From b07d4788884b3fa9be9fba24f396db5802c6c8fe Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 22 Nov 2024 19:51:04 +0200 Subject: [PATCH 1/3] Updated on 2026-08-14 --- .../domain/GetSingleWalletWarningsFactory.kt | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetSingleWalletWarningsFactory.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetSingleWalletWarningsFactory.kt index 81e435fa5e..21f40750f2 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetSingleWalletWarningsFactory.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetSingleWalletWarningsFactory.kt @@ -9,6 +9,7 @@ import com.tangem.domain.tokens.GetPrimaryCurrencyStatusUpdatesUseCase import com.tangem.domain.tokens.error.CurrencyStatusError import com.tangem.domain.tokens.model.CryptoCurrencyStatus import com.tangem.domain.wallets.models.UserWallet +import com.tangem.domain.wallets.usecase.GetWalletsUseCase import com.tangem.domain.wallets.usecase.IsNeedToBackupUseCase import com.tangem.feature.wallet.presentation.wallet.state.model.WalletNotification import com.tangem.feature.wallet.presentation.wallet.viewmodels.intents.WalletClickIntents @@ -25,6 +26,7 @@ internal class GetSingleWalletWarningsFactory @Inject constructor( private val isReadyToShowRateAppUseCase: IsReadyToShowRateAppUseCase, private val isNeedToBackupUseCase: IsNeedToBackupUseCase, private val hasSingleWalletSignedHashesUseCase: HasSingleWalletSignedHashesUseCase, + private val getWalletsUseCase: GetWalletsUseCase, ) { private var readyForRateAppNotification = false @@ -36,22 +38,32 @@ internal class GetSingleWalletWarningsFactory @Inject constructor( flow = getPrimaryCurrencyStatusUpdatesUseCase(userWallet.walletId), flow2 = isReadyToShowRateAppUseCase().conflate(), flow3 = isNeedToBackupUseCase(userWallet.walletId).conflate(), - ) { primaryCurrencyStatus, isReadyToShowRating, isNeedToBackup -> + flow4 = getWalletsUseCase().conflate(), + ) { maybePrimaryCurrencyStatus, isReadyToShowRating, isNeedToBackup, userWallets -> readyForRateAppNotification = true buildList { - addCriticalNotifications(cardTypesResolver) - - addInformationalNotifications(cardTypesResolver, clickIntents) - - addWarningNotifications( - userWallet, - cardTypesResolver, - primaryCurrencyStatus, - isNeedToBackup, - clickIntents, + addCriticalNotifications( + cardTypesResolver = cardTypesResolver, ) - addRateTheAppNotification(isReadyToShowRating, clickIntents) + addInformationalNotifications( + userWallets = userWallets, + cardTypesResolver = cardTypesResolver, + clickIntents = clickIntents, + ) + + addWarningNotifications( + userWallet = userWallet, + cardTypesResolver = cardTypesResolver, + maybePrimaryCurrencyStatus = maybePrimaryCurrencyStatus, + isNeedToBackup = isNeedToBackup, + clickIntents = clickIntents, + ) + + addRateTheAppNotification( + isReadyToShowRating = isReadyToShowRating, + clickIntents = clickIntents, + ) }.toImmutableList() } } @@ -76,14 +88,19 @@ internal class GetSingleWalletWarningsFactory @Inject constructor( } private fun MutableList.addInformationalNotifications( + userWallets: List, cardTypesResolver: CardTypesResolver, clickIntents: WalletClickIntents, ) { + val userHasWalletOrWallet2 = userWallets.any { + val typesResolver = it.scanResponse.cardTypesResolver + typesResolver.isTangemWallet() || typesResolver.isWallet2() + } addIf( element = WalletNotification.NoteMigration( onClick = { clickIntents.onNoteMigrationButtonClick(NOTE_MIGRATION_URL) }, ), - condition = cardTypesResolver.isTangemNote(), + condition = cardTypesResolver.isTangemNote() && !userHasWalletOrWallet2, ) addIf( From 299f10a1f6cc06f544b31f92382c1cbcd8007975 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 25 Nov 2024 15:32:35 +0300 Subject: [PATCH 2/3] Updated on 2026-08-14 --- gradle/dependencies.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 489719b73a..e32d4d13c7 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -87,7 +87,7 @@ markdownComposeView = "0.5.4" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "release-app_5.18-870" +tangemBlockchainSdk = "release-app_5.18-872" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "release-app_5.18-402" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ From 486f9a6c340501dd8df2c0e1714d21ccc481ee36 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 25 Nov 2024 14:50:39 +0300 Subject: [PATCH 3/3] Updated on 2026-08-14 --- .../main/java/com/tangem/tap/MainActivity.kt | 11 ++++++++++- .../local/preferences/PreferencesDataStore.kt | 3 +++ .../preferences/utils/CleanupKeyMigration.kt | 18 ++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/CleanupKeyMigration.kt diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index cc4284cc7a..e456f93295 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -89,6 +89,7 @@ import kotlinx.coroutines.flow.* import timber.log.Timber import javax.inject.Inject import kotlin.coroutines.CoroutineContext +import kotlin.time.Duration.Companion.seconds lateinit var tangemSdkManager: TangemSdkManager lateinit var backupService: BackupService @@ -314,7 +315,11 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac private fun installAppTheme() { appThemeModeFlow = createAppThemeModeFlow() - val mode = runBlocking { appThemeModeFlow.first() } + val mode = runBlocking { + withTimeoutOrNull(APP_THEME_LOAD_TIMEOUT.seconds) { + appThemeModeFlow.first() + } ?: AppThemeMode.DEFAULT + } updateAppTheme(mode) } @@ -581,4 +586,8 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac .onRight { Timber.d("Submitting hashes succeeded") } } } + + companion object { + private const val APP_THEME_LOAD_TIMEOUT = 2 + } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesDataStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesDataStore.kt index 9e9b278b7e..9e326cc62c 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesDataStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesDataStore.kt @@ -10,6 +10,8 @@ import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.emptyPreferences import androidx.datastore.preferences.preferencesDataStoreFile import com.tangem.datasource.local.preferences.PreferencesDataStore.INSTANCE +import com.tangem.datasource.local.preferences.PreferencesKeys.APP_LOGS_KEY +import com.tangem.datasource.local.preferences.utils.CleanupKeyMigration import com.tangem.datasource.local.preferences.utils.SharedPreferencesKeyMigration import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.SupervisorJob @@ -77,6 +79,7 @@ internal object PreferencesDataStore { legacyKeyName = LEGACY_DEFAULT_KEY_NAME, keyName = PreferencesKeys.BALANCE_HIDING_SETTINGS_KEY.name, ), + CleanupKeyMigration(key = APP_LOGS_KEY), ) } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/CleanupKeyMigration.kt b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/CleanupKeyMigration.kt new file mode 100644 index 0000000000..8b5e3fa149 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/CleanupKeyMigration.kt @@ -0,0 +1,18 @@ +package com.tangem.datasource.local.preferences.utils + +import androidx.datastore.core.DataMigration +import androidx.datastore.preferences.core.Preferences + +internal class CleanupKeyMigration(private val key: Preferences.Key) : DataMigration { + + override suspend fun cleanUp() { + // do nothing + } + + override suspend fun shouldMigrate(currentData: Preferences): Boolean = currentData.contains(key) + + override suspend fun migrate(currentData: Preferences): Preferences { + currentData.toMutablePreferences().remove(key) + return currentData + } +} \ No newline at end of file