diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index a9d713e0bb..98f5a2c65c 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -116,21 +116,8 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac super.onResume() notificationsHandler = NotificationsHandler(binding.fragmentContainer) - val backStackIsEmpty = supportFragmentManager.backStackEntryCount == 0 - val isScannedBefore = store.state.globalState.scanResponse != null - val isOnboardingServiceActive = store.state.globalState.onboardingState.onboardingStarted - val shopOpened = store.state.shopState.total != null - @Suppress("ComplexCondition") - if (backStackIsEmpty || !isOnboardingServiceActive && !isScannedBefore && !shopOpened) { - if (userWalletsListManager.hasSavedUserWallets) { - store.dispatchOnMain(WelcomeAction.HandleDeepLink(intent)) - store.dispatchOnMain(NavigationAction.NavigateTo(AppScreen.Welcome)) - } else { - store.dispatchOnMain(NavigationAction.NavigateTo(AppScreen.Home)) - intentHandler.handleWalletConnectLink(intent) - } - store.dispatch(BackupAction.CheckForUnfinishedBackup) - } + navigateToInitialScreenIfNeeded() + intentHandler.handleBackgroundScan(intent) intentHandler.handleSellCurrencyCallback(intent) } @@ -204,4 +191,31 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac lockUserWalletsTimer?.restart() } + + private fun navigateToInitialScreenIfNeeded() { + val backStackIsEmpty = supportFragmentManager.backStackEntryCount == 0 + val isNotScannedBefore = store.state.globalState.scanResponse == null + val isOnboardingServiceNotActive = store.state.globalState.onboardingState.onboardingStarted + val isShopNotOpened = store.state.shopState.total != null + when { + !backStackIsEmpty && isNotScannedBefore && isOnboardingServiceNotActive && isShopNotOpened -> { + navigateToInitialScreen() + } + backStackIsEmpty -> { + navigateToInitialScreen() + } + } + } + + private fun navigateToInitialScreen() { + if (userWalletsListManager.hasSavedUserWallets) { + store.dispatchOnMain(WelcomeAction.HandleDeepLink(intent)) + store.dispatchOnMain(NavigationAction.NavigateTo(AppScreen.Welcome)) + store.dispatchOnMain(WelcomeAction.ProceedWithBiometrics) + } else { + store.dispatchOnMain(NavigationAction.NavigateTo(AppScreen.Home)) + intentHandler.handleWalletConnectLink(intent) + } + store.dispatch(BackupAction.CheckForUnfinishedBackup) + } } \ No newline at end of file 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 46cdd6dd4d..bf5df6a9a9 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 @@ -34,8 +34,13 @@ val navigationMiddleware: Middleware = { _, state -> AppScreen.Home, AppScreen.Welcome, -> { - navState?.activity?.get()?.popBackTo(screen, inclusive = true) - store.dispatchOnMain(NavigationAction.NavigateTo(screen)) + if (navState?.backStack?.contains(screen) == false) { + // Pop back to activity + navState.activity?.get()?.popBackTo(screen = null, inclusive = true) + store.dispatchOnMain(NavigationAction.NavigateTo(screen)) + } else { + navState?.activity?.get()?.popBackTo(screen, action.inclusive) + } } else -> { navState?.activity?.get()?.popBackTo(screen, action.inclusive) diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/BiometricUserWalletsListManager.kt b/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/BiometricUserWalletsListManager.kt index 3f8cdb5221..748665ccea 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/BiometricUserWalletsListManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/BiometricUserWalletsListManager.kt @@ -59,12 +59,7 @@ internal class BiometricUserWalletsListManager( } override fun lock() { - state.update { prevState -> - prevState.copy( - encryptionKeys = emptyList(), - isLocked = true, - ) - } + state.update { State() } } override suspend fun selectWallet(userWalletId: UserWalletId): CompletionResult = catching { @@ -143,7 +138,7 @@ internal class BiometricUserWalletsListManager( .flatMap { keysRepository.clear() } .map { selectedUserWalletRepository.set(null) - state.update { State() } + lock() } } diff --git a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt index e7cb2e01e7..726b57a823 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt @@ -36,7 +36,7 @@ internal class WelcomeMiddleware { private fun handleAction(action: WelcomeAction, state: WelcomeState) { when (action) { is WelcomeAction.ProceedWithBiometrics -> { - proceedWithBiometry(state) + proceedWithBiometrics(state) } is WelcomeAction.ProceedWithCard -> { proceedWithCard(state) @@ -51,7 +51,7 @@ internal class WelcomeMiddleware { } } - private fun proceedWithBiometry(state: WelcomeState) { + private fun proceedWithBiometrics(state: WelcomeState) { scope.launch { userWalletsListManager.unlockWithBiometry() .doOnFailure { error ->