From a91ab6fd99d0be66f9d2f269a2de31367eb8900d Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 7 Sep 2023 10:20:40 +0300 Subject: [PATCH 1/3] Updated on 2026-08-14 --- app/src/main/res/values/styles.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 From 6bacab51697136f1fd155db4c48af6b0ee23b0c9 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 7 Sep 2023 17:29:19 +0800 Subject: [PATCH 2/3] Updated on 2026-08-14 --- .../main/java/com/tangem/tap/MainActivity.kt | 2 +- .../data/card/sdk/CardSdkLifecycleObserver.kt | 4 ++-- .../data/card/sdk/DefaultCardSdkProvider.kt | 19 ++++++++++++++----- 3 files changed, 17 insertions(+), 8 deletions(-) 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/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 { From 42c93fe9c495c1ee4e8f247d59f103a1bd726038 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 7 Sep 2023 12:35:53 +0300 Subject: [PATCH 3/3] Updated on 2026-08-14 --- .../viewmodels/AddCustomTokenViewModel.kt | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) 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