Updated on 2026-08-14

This commit is contained in:
Tangem 2023-01-19 14:46:05 +03:00
parent 2777db0197
commit 535ffd0004
4 changed files with 40 additions and 26 deletions

View file

@ -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)
}
@ -202,4 +189,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)
}
}

View file

@ -34,8 +34,13 @@ val navigationMiddleware: Middleware<AppState> = { _, 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)

View file

@ -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<UserWallet> = catching {
@ -143,7 +138,7 @@ internal class BiometricUserWalletsListManager(
.flatMap { keysRepository.clear() }
.map {
selectedUserWalletRepository.set(null)
state.update { State() }
lock()
}
}

View file

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