From bee55441a6d2520894bc64d22460877497126fec Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 14 Dec 2022 21:28:45 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../com/tangem/tap/LockUserWalletsTimer.kt | 26 +++++++++---------- .../redux/navigation/NavigationMiddleware.kt | 20 +++++++------- .../redux/navigation/NavigationReducer.kt | 2 ++ .../tap/persistence/PreferencesStorage.kt | 14 ++++++++++ 4 files changed, 39 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/LockUserWalletsTimer.kt b/app/src/main/java/com/tangem/tap/LockUserWalletsTimer.kt index 0bfb76a8ac..426f49ca25 100644 --- a/app/src/main/java/com/tangem/tap/LockUserWalletsTimer.kt +++ b/app/src/main/java/com/tangem/tap/LockUserWalletsTimer.kt @@ -16,7 +16,7 @@ import kotlin.time.Duration internal class LockUserWalletsTimer( owner: LifecycleOwner, - private val duration: Duration = with(Duration) { 5.minutes }, + private val duration: Duration = with(Duration) { 10.minutes }, ) : LifecycleOwner by owner, DefaultLifecycleObserver { @@ -25,8 +25,6 @@ internal class LockUserWalletsTimer( field?.cancel() field = value } - private var isStopped = false - private var openWelcomeScreenWhenResumed = false init { lifecycle.addObserver(this) @@ -35,22 +33,22 @@ internal class LockUserWalletsTimer( override fun onResume(owner: LifecycleOwner) { Timber.d( """ - Owner resumed - |- Was stopped: $isStopped - |- Need to open welcome screen: $openWelcomeScreenWhenResumed - """.trimIndent(), + Owner resumed + |- Was stopped: ${preferencesStorage.wasApplicationStopped} + |- Need to open welcome screen: ${preferencesStorage.shouldOpenWelcomeScreenOnResume} + """.trimIndent(), ) - isStopped = false + preferencesStorage.wasApplicationStopped = false start() - if (openWelcomeScreenWhenResumed) { + if (preferencesStorage.shouldOpenWelcomeScreenOnResume) { store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Welcome)) - openWelcomeScreenWhenResumed = false + preferencesStorage.shouldOpenWelcomeScreenOnResume = false } } override fun onStop(owner: LifecycleOwner) { Timber.d("Owner stopped") - isStopped = true + preferencesStorage.wasApplicationStopped = true } override fun onDestroy(owner: LifecycleOwner) { @@ -103,13 +101,13 @@ internal class LockUserWalletsTimer( Timber.d( """ Finished - |- App is stopped: $isStopped + |- App is stopped: ${preferencesStorage.wasApplicationStopped} |- Millis passed: ${currentTime - startTime} """.trimIndent(), ) userWalletsListManager.lock() - if (isStopped) { - openWelcomeScreenWhenResumed = true + if (preferencesStorage.wasApplicationStopped) { + preferencesStorage.shouldOpenWelcomeScreenOnResume = true } else { store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Welcome)) } diff --git a/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationMiddleware.kt b/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationMiddleware.kt index c8457793e5..871ef1ea5c 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationMiddleware.kt @@ -28,15 +28,17 @@ val navigationMiddleware: Middleware = { _, state -> ) } is NavigationAction.PopBackTo -> { - when (val screen = action.screen) { - AppScreen.Home, - AppScreen.Welcome, - -> { - navState?.activity?.get()?.popBackTo(screen, inclusive = true) - store.dispatchOnMain(NavigationAction.NavigateTo(screen)) - } - else -> { - navState?.activity?.get()?.popBackTo(screen, action.inclusive) + if (navState?.backStack?.lastOrNull() != action.screen) { + when (val screen = action.screen) { + AppScreen.Home, + AppScreen.Welcome, + -> { + navState?.activity?.get()?.popBackTo(screen, inclusive = true) + store.dispatchOnMain(NavigationAction.NavigateTo(screen)) + } + else -> { + navState?.activity?.get()?.popBackTo(screen, action.inclusive) + } } } } diff --git a/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationReducer.kt b/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationReducer.kt index 7d63cb95ee..b6f7522586 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationReducer.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationReducer.kt @@ -20,6 +20,8 @@ private fun internalReduce(action: Action, state: AppState): NavigationState { navState.copy(backStack = navState.backStack + navigationAction.screen) } is NavigationAction.PopBackTo -> { + if (navState.backStack.lastOrNull() == navigationAction.screen) return navState + val screen = navigationAction.screen ?: navState.activity?.get()?.getPreviousScreen() val index = navState.backStack.lastIndexOf(screen) + 1 state.navigationState.copy(backStack = navState.backStack.subList(0, index)) diff --git a/app/src/main/java/com/tangem/tap/persistence/PreferencesStorage.kt b/app/src/main/java/com/tangem/tap/persistence/PreferencesStorage.kt index eaf21b8d83..d419aafffc 100644 --- a/app/src/main/java/com/tangem/tap/persistence/PreferencesStorage.kt +++ b/app/src/main/java/com/tangem/tap/persistence/PreferencesStorage.kt @@ -51,6 +51,18 @@ class PreferencesStorage(applicationContext: Application) { 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) + } + fun getCountOfLaunches(): Int = preferences.getInt(APP_LAUNCH_COUNT_KEY, 1) fun saveTwinsOnboardingShown() { @@ -74,6 +86,8 @@ class PreferencesStorage(applicationContext: Application) { private const val SAVE_WALLET_DIALOG_SHOWN_KEY = "saveUserWalletShown" private const val SAVE_USER_WALLETS_KEY = "saveUserWallets" private const val SAVE_ACCESS_CODES_KEY = "saveAccessCodes" + private const val APPLICATION_STOPPED_KEY = "applicationStopped" + private const val OPEN_WELCOME_ON_RESUME_KEY = "openWelcomeOnResume" } }