From 128f3b8d4398545a139c563c723c9728a4b8adc4 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 2 Apr 2024 11:14:57 +0800 Subject: [PATCH] Updated on 2026-08-14 --- .../com/tangem/tap/LockUserWalletsTimer.kt | 52 +++++++++++++------ .../main/java/com/tangem/tap/MainActivity.kt | 6 ++- .../local/preferences/PreferencesKeys.kt | 8 +++ .../settings/DefaultSettingsRepository.kt | 19 +++++++ .../preferences/PreferencesDataSource.kt | 14 ----- .../repositories/SettingsRepository.kt | 8 +++ 6 files changed, 75 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/LockUserWalletsTimer.kt b/app/src/main/java/com/tangem/tap/LockUserWalletsTimer.kt index 256bd62a5f..7dda361ec6 100644 --- a/app/src/main/java/com/tangem/tap/LockUserWalletsTimer.kt +++ b/app/src/main/java/com/tangem/tap/LockUserWalletsTimer.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import com.tangem.core.navigation.AppScreen import com.tangem.core.navigation.NavigationAction +import com.tangem.domain.settings.repositories.SettingsRepository import com.tangem.domain.wallets.legacy.asLockable import com.tangem.tap.common.extensions.dispatchOnMain import kotlinx.coroutines.* @@ -13,6 +14,7 @@ import kotlin.time.Duration internal class LockUserWalletsTimer( owner: LifecycleOwner, + private val settingsRepository: SettingsRepository, private val duration: Duration = with(Duration) { 10.minutes }, ) : LifecycleOwner by owner, DefaultLifecycleObserver { @@ -28,24 +30,35 @@ internal class LockUserWalletsTimer( } override fun onResume(owner: LifecycleOwner) { - Timber.d( - """ + owner.lifecycleScope.launch { + val wasApplicationStopped = settingsRepository.wasApplicationStopped() + val shouldOpenWelcomeScreenOnResume = settingsRepository.shouldOpenWelcomeScreenOnResume() + + Timber.d( + """ Owner resumed - |- Was stopped: ${preferencesStorage.wasApplicationStopped} - |- Need to open welcome screen: ${preferencesStorage.shouldOpenWelcomeScreenOnResume} - """.trimIndent(), - ) - preferencesStorage.wasApplicationStopped = false - start() - if (preferencesStorage.shouldOpenWelcomeScreenOnResume) { - store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Welcome)) - preferencesStorage.shouldOpenWelcomeScreenOnResume = false + |- Was stopped: $wasApplicationStopped + |- Need to open welcome screen: $shouldOpenWelcomeScreenOnResume + """.trimIndent(), + ) + + settingsRepository.setWasApplicationStopped(value = false) + + start() + + if (shouldOpenWelcomeScreenOnResume) { + store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Welcome)) + settingsRepository.setShouldOpenWelcomeScreenOnResume(value = false) + } } } override fun onStop(owner: LifecycleOwner) { Timber.d("Owner stopped") - preferencesStorage.wasApplicationStopped = true + + owner.lifecycleScope.launch { + settingsRepository.setWasApplicationStopped(value = true) + } } override fun onDestroy(owner: LifecycleOwner) { @@ -90,22 +103,27 @@ internal class LockUserWalletsTimer( private fun createDelayJob(): Job = lifecycleScope.launch(Dispatchers.Default) { val startTime = System.currentTimeMillis() + delay(duration) + if (isActive) { - val userWalletsListManager = userWalletsListManagerSafe?.asLockable() - ?: return@launch + val userWalletsListManager = userWalletsListManagerSafe?.asLockable() ?: return@launch + if (userWalletsListManager.hasUserWallets) { val currentTime = System.currentTimeMillis() + val wasApplicationStopped = settingsRepository.wasApplicationStopped() + Timber.d( """ Finished - |- App is stopped: ${preferencesStorage.wasApplicationStopped} + |- App is stopped: $wasApplicationStopped |- Millis passed: ${currentTime - startTime} """.trimIndent(), ) + userWalletsListManager.lock() - if (preferencesStorage.wasApplicationStopped) { - preferencesStorage.shouldOpenWelcomeScreenOnResume = true + if (wasApplicationStopped) { + settingsRepository.setShouldOpenWelcomeScreenOnResume(value = true) } else { store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Welcome)) } diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index d5d7000089..7817df8a2f 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -35,6 +35,7 @@ import com.tangem.data.card.sdk.CardSdkLifecycleObserver import com.tangem.domain.apptheme.model.AppThemeMode import com.tangem.domain.card.ScanCardUseCase import com.tangem.domain.card.repository.CardSdkConfigRepository +import com.tangem.domain.settings.repositories.SettingsRepository import com.tangem.domain.wallets.legacy.UserWalletsListManager import com.tangem.domain.wallets.legacy.UserWalletsListManagerFeatureToggles import com.tangem.domain.wallets.legacy.asLockable @@ -141,6 +142,9 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac @Inject lateinit var userWalletsListManagerFeatureToggles: UserWalletsListManagerFeatureToggles + @Inject + lateinit var settingsRepository: SettingsRepository + internal val viewModel: MainViewModel by viewModels() private lateinit var appThemeModeFlow: SharedFlow @@ -201,7 +205,7 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac tangemSdkManager = injectedTangemSdkManager appStateHolder.tangemSdkManager = tangemSdkManager backupService = BackupService.init(cardSdkConfigRepository.sdk, this) - lockUserWalletsTimer = LockUserWalletsTimer(owner = this) + lockUserWalletsTimer = LockUserWalletsTimer(owner = this, settingsRepository = settingsRepository) initIntentHandlers() diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt index ab0ab7c350..d180755897 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt @@ -5,9 +5,11 @@ import com.tangem.datasource.local.preferences.PreferencesKeys.APP_LAUNCH_COUNT_ import com.tangem.datasource.local.preferences.PreferencesKeys.FUNDS_FOUND_DATE_KEY import com.tangem.datasource.local.preferences.PreferencesKeys.IS_TANGEM_TOS_ACCEPTED_KEY import com.tangem.datasource.local.preferences.PreferencesKeys.SAVE_USER_WALLETS_KEY +import com.tangem.datasource.local.preferences.PreferencesKeys.SHOULD_OPEN_WELCOME_ON_RESUME_KEY import com.tangem.datasource.local.preferences.PreferencesKeys.SHOW_RATING_DIALOG_AT_LAUNCH_COUNT_KEY import com.tangem.datasource.local.preferences.PreferencesKeys.USED_CARDS_INFO_KEY import com.tangem.datasource.local.preferences.PreferencesKeys.USER_WAS_INTERACT_WITH_RATING_KEY +import com.tangem.datasource.local.preferences.PreferencesKeys.WAS_APPLICATION_STOPPED_KEY import com.tangem.datasource.local.preferences.PreferencesKeys.WAS_TWINS_ONBOARDING_SHOWN /** @@ -65,6 +67,10 @@ object PreferencesKeys { val SEND_TAP_HELP_PREVIEW_KEY by lazy { booleanPreferencesKey(name = "sendTapHelpPreview") } + val WAS_APPLICATION_STOPPED_KEY by lazy { booleanPreferencesKey(name = "applicationStopped") } + + val SHOULD_OPEN_WELCOME_ON_RESUME_KEY by lazy { booleanPreferencesKey(name = "openWelcomeOnResume") } + fun getStart2CoinTOSAcceptedKey(region: String?) = booleanPreferencesKey(name = "start2Coin_tos_accepted_$region") } @@ -79,6 +85,8 @@ internal fun getTapPrefKeysToMigrate(): Set { USED_CARDS_INFO_KEY, WAS_TWINS_ONBOARDING_SHOWN, IS_TANGEM_TOS_ACCEPTED_KEY, + WAS_APPLICATION_STOPPED_KEY, + SHOULD_OPEN_WELCOME_ON_RESUME_KEY, ) .map(Preferences.Key<*>::name) .toSet() diff --git a/data/settings/src/main/java/com/tangem/data/settings/DefaultSettingsRepository.kt b/data/settings/src/main/java/com/tangem/data/settings/DefaultSettingsRepository.kt index 71e8f8d654..b6c68d65f0 100644 --- a/data/settings/src/main/java/com/tangem/data/settings/DefaultSettingsRepository.kt +++ b/data/settings/src/main/java/com/tangem/data/settings/DefaultSettingsRepository.kt @@ -75,4 +75,23 @@ internal class DefaultSettingsRepository( value = isEnabled, ) } + + override suspend fun wasApplicationStopped(): Boolean { + return appPreferencesStore.getSyncOrDefault(key = PreferencesKeys.WAS_APPLICATION_STOPPED_KEY, default = false) + } + + override suspend fun setWasApplicationStopped(value: Boolean) { + appPreferencesStore.store(key = PreferencesKeys.WAS_APPLICATION_STOPPED_KEY, value = value) + } + + override suspend fun shouldOpenWelcomeScreenOnResume(): Boolean { + return appPreferencesStore.getSyncOrDefault( + key = PreferencesKeys.SHOULD_OPEN_WELCOME_ON_RESUME_KEY, + default = false, + ) + } + + override suspend fun setShouldOpenWelcomeScreenOnResume(value: Boolean) { + appPreferencesStore.store(key = PreferencesKeys.SHOULD_OPEN_WELCOME_ON_RESUME_KEY, value = value) + } } \ No newline at end of file diff --git a/data/source/preferences/src/main/kotlin/com/tangem/data/source/preferences/PreferencesDataSource.kt b/data/source/preferences/src/main/kotlin/com/tangem/data/source/preferences/PreferencesDataSource.kt index e12d679fd7..64bde15385 100644 --- a/data/source/preferences/src/main/kotlin/com/tangem/data/source/preferences/PreferencesDataSource.kt +++ b/data/source/preferences/src/main/kotlin/com/tangem/data/source/preferences/PreferencesDataSource.kt @@ -29,18 +29,6 @@ class PreferencesDataSource @Inject internal constructor(applicationContext: Con putBoolean(SAVE_ACCESS_CODES_KEY, value) } - var wasApplicationStopped: Boolean - get() = preferences.getBoolean(APPLICATION_STOPPED_KEY, false) - set(value) = preferences.edit { - putBoolean(APPLICATION_STOPPED_KEY, value) - } - - var shouldOpenWelcomeScreenOnResume: Boolean - get() = preferences.getBoolean(OPEN_WELCOME_ON_RESUME_KEY, false) - set(value) = preferences.edit { - putBoolean(OPEN_WELCOME_ON_RESUME_KEY, value) - } - private fun incrementLaunchCounter() { var count = preferences.getInt(APP_LAUNCH_COUNT_KEY, 0) preferences.edit { putInt(APP_LAUNCH_COUNT_KEY, ++count) } @@ -51,7 +39,5 @@ class PreferencesDataSource @Inject internal constructor(applicationContext: Con private const val APP_LAUNCH_COUNT_KEY = "launchCount" private const val SAVE_WALLET_DIALOG_SHOWN_KEY = "saveUserWalletShown" private const val SAVE_ACCESS_CODES_KEY = "saveAccessCodes" - private const val APPLICATION_STOPPED_KEY = "applicationStopped" - private const val OPEN_WELCOME_ON_RESUME_KEY = "openWelcomeOnResume" } } \ No newline at end of file diff --git a/domain/settings/src/main/java/com/tangem/domain/settings/repositories/SettingsRepository.kt b/domain/settings/src/main/java/com/tangem/domain/settings/repositories/SettingsRepository.kt index 63a3ab3247..06f89908f8 100644 --- a/domain/settings/src/main/java/com/tangem/domain/settings/repositories/SettingsRepository.kt +++ b/domain/settings/src/main/java/com/tangem/domain/settings/repositories/SettingsRepository.kt @@ -17,4 +17,12 @@ interface SettingsRepository { suspend fun isSendTapHelpPreviewEnabled(): Boolean suspend fun setSendTapHelpPreviewAvailability(isEnabled: Boolean) + + suspend fun wasApplicationStopped(): Boolean + + suspend fun setWasApplicationStopped(value: Boolean) + + suspend fun shouldOpenWelcomeScreenOnResume(): Boolean + + suspend fun setShouldOpenWelcomeScreenOnResume(value: Boolean) } \ No newline at end of file