diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt
index 17b20dbe41..f0a79eafeb 100644
--- a/app/src/main/java/com/tangem/tap/MainActivity.kt
+++ b/app/src/main/java/com/tangem/tap/MainActivity.kt
@@ -175,7 +175,7 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac
override fun onDestroy() {
store.dispatch(NavigationAction.ActivityDestroyed(WeakReference(this)))
intentProcessor.removeAll()
- cardSdkLifecycleObserver.onDestroy()
+ cardSdkLifecycleObserver.onDestroy(this)
super.onDestroy()
}
diff --git a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt
index 831823009f..dffe1709dd 100644
--- a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt
+++ b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt
@@ -12,6 +12,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchain.common.Token
+import com.tangem.blockchain.common.derivation.DerivationStyle
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.crypto.hdWallet.DerivationPath
import com.tangem.crypto.hdWallet.HDWalletError
@@ -212,13 +213,21 @@ internal class AddCustomTokenViewModel @Inject constructor(
return listOf(defaultNetwork) + Blockchain.values()
.filter { blockchain ->
scanResponse?.card?.supportedBlockchains(scanResponse.cardTypesResolver)
- ?.contains(blockchain) == true &&
- blockchain.derivationPath(derivationStyle)?.rawPath?.isNotEmpty() == true
+ ?.contains(blockchain) == true && isDerivationPathNotEmpty(derivationStyle, blockchain)
}
.sortedBy(Blockchain::fullName)
.map(::createNetworkSelectorItem)
}
+ private fun isDerivationPathNotEmpty(derivationStyle: DerivationStyle?, blockchain: Blockchain): Boolean {
+ // derivationStyle is null for cards without HD wallets, always return true
+ return if (derivationStyle != null) {
+ blockchain.derivationPath(derivationStyle)?.rawPath?.isNotEmpty() == true
+ } else {
+ true
+ }
+ }
+
private fun createTokenNameInputField(): AddCustomTokenInputField.TokenName {
return AddCustomTokenInputField.TokenName(
value = "",
@@ -288,7 +297,12 @@ internal class AddCustomTokenViewModel @Inject constructor(
}
.sortedBy(Blockchain::fullName)
.mapNotNull {
- val derivationPath = it.derivationPath(derivationStyle)?.rawPath
+ val derivationPath = if (derivationStyle != null) {
+ it.derivationPath(derivationStyle)?.rawPath
+ } else {
+ // derivationStyle is null for cards without HDWallet, use DerivationStyle.V1
+ it.derivationPath(DerivationStyle.V1)?.rawPath
+ }
if (derivationPath?.isNotEmpty() == true) {
createDerivationPathSelectorAdditionalItem(
blockchain = it,
@@ -628,6 +642,7 @@ internal class AddCustomTokenViewModel @Inject constructor(
if (blockchain == null) return null
val derivationStyle = reduxStateHolder.scanResponse?.derivationStyleProvider?.getDerivationStyle()
+ ?: DerivationStyle.V1
val derivationNetwork = if (blockchain == Blockchain.Unknown) {
uiState.form.networkSelectorField.selectedItem.blockchain
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index bd85fdbd1c..9b5f1ccfa6 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -49,8 +49,8 @@
- 14dp
- false
- 14sp
- - @font/roboto_regular
- - 0
+ - @font/roboto_medium
+ - 0.01
- 500
- 16sp
- 4dp
diff --git a/data/card/src/main/java/com/tangem/data/card/sdk/CardSdkLifecycleObserver.kt b/data/card/src/main/java/com/tangem/data/card/sdk/CardSdkLifecycleObserver.kt
index f5f6781392..212ff3a8bf 100644
--- a/data/card/src/main/java/com/tangem/data/card/sdk/CardSdkLifecycleObserver.kt
+++ b/data/card/src/main/java/com/tangem/data/card/sdk/CardSdkLifecycleObserver.kt
@@ -12,6 +12,6 @@ interface CardSdkLifecycleObserver {
/** Callback of creating activity [context] */
fun onCreate(context: Context)
- /** Callback of destroying activity */
- fun onDestroy()
+ /** Callback of destroying activity [context] */
+ fun onDestroy(context: Context)
}
\ No newline at end of file
diff --git a/data/card/src/main/java/com/tangem/data/card/sdk/DefaultCardSdkProvider.kt b/data/card/src/main/java/com/tangem/data/card/sdk/DefaultCardSdkProvider.kt
index 993a613c73..b536029bcb 100644
--- a/data/card/src/main/java/com/tangem/data/card/sdk/DefaultCardSdkProvider.kt
+++ b/data/card/src/main/java/com/tangem/data/card/sdk/DefaultCardSdkProvider.kt
@@ -7,6 +7,7 @@ import com.tangem.common.CardFilter
import com.tangem.common.card.FirmwareVersion
import com.tangem.common.core.Config
import com.tangem.sdk.extensions.initWithBiometrics
+import java.lang.ref.WeakReference
import javax.inject.Inject
import javax.inject.Singleton
@@ -23,14 +24,22 @@ internal class DefaultCardSdkProvider @Inject constructor() : CardSdkProvider, C
private var _sdk: TangemSdk? = null
+ /** Weak reference of context that uses to create [TangemSdk] */
+ private var contextRef: WeakReference = WeakReference(null)
+
override fun onCreate(context: Context) {
- if (_sdk == null) {
- _sdk = TangemSdk.initWithBiometrics(activity = context as FragmentActivity, config = config)
- }
+ contextRef = WeakReference(context)
+ _sdk = TangemSdk.initWithBiometrics(activity = context as FragmentActivity, config = config)
}
- override fun onDestroy() {
- _sdk = null
+ override fun onDestroy(context: Context) {
+ /*
+
+
+ */
+ if (contextRef.get() == context) {
+ _sdk = null
+ }
}
private companion object {