Updated on 2026-08-14

This commit is contained in:
Tangem 2024-11-25 16:52:29 +03:00
commit 84f25e781f
5 changed files with 62 additions and 15 deletions

View file

@ -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
}
}

View file

@ -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),
)
}
}

View file

@ -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<T>(private val key: Preferences.Key<T>) : DataMigration<Preferences> {
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
}
}

View file

@ -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<WalletNotification>.addInformationalNotifications(
userWallets: List<UserWallet>,
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(

View file

@ -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 ^