diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index 43eaa90ca3..0c9f4a0bbf 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -96,8 +96,8 @@ class MainActivity : AppCompatActivity(), SnackbarHandler { val backStackIsEmpty = supportFragmentManager.backStackEntryCount == 0 val isScannedBefore = store.state.globalState.scanResponse != null - val isOnboardingServiceActive = store.state.globalState.onboardingManager != null - if (backStackIsEmpty && (!isOnboardingServiceActive && !isScannedBefore)) { + val isOnboardingServiceActive = store.state.globalState.onboardingState.onboardingStarted + if (backStackIsEmpty || (!isOnboardingServiceActive && !isScannedBefore)) { store.dispatch(NavigationAction.NavigateTo(AppScreen.Home)) } intentHandler.handleIntent(intent) diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt index f448916049..bbea6e43f9 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt @@ -31,7 +31,7 @@ sealed class GlobalAction : Action { object HideDialog : GlobalAction() sealed class Onboarding { - data class Start(val scanResponse: ScanResponse, val fromHomeScreen: Boolean = true) : GlobalAction() + data class Start(val scanResponse: ScanResponse?, val fromHomeScreen: Boolean = true) : GlobalAction() object Stop : GlobalAction() } diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt index 993830329a..e549a2f386 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt @@ -17,12 +17,16 @@ fun globalReducer(action: Action, state: AppState): GlobalState { globalState.copy(resources = action.resources) } is GlobalAction.Onboarding.Start -> { - val usedCardsPrefStorage = preferencesStorage.usedCardsPrefStorage - val onboardingState = OnboardingManager(action.scanResponse, usedCardsPrefStorage) - globalState.copy(onboardingManager = onboardingState) + val onboardingManager = if (action.scanResponse != null) { + val usedCardsPrefStorage = preferencesStorage.usedCardsPrefStorage + OnboardingManager(action.scanResponse, usedCardsPrefStorage) + } else { + null + } + globalState.copy(onboardingState = OnboardingState(true, onboardingManager)) } is GlobalAction.Onboarding.Stop -> { - globalState.copy(onboardingManager = null) + globalState.copy(onboardingState = OnboardingState(false)) } is GlobalAction.ScanFailsCounter.Increment -> { globalState.copy(scanCardFailsCounter = globalState.scanCardFailsCounter + 1) diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt index 484142c611..f634a6a0ff 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt @@ -15,7 +15,7 @@ import org.rekotlin.StateType data class GlobalState( val scanResponse: ScanResponse? = null, - val onboardingManager: OnboardingManager? = null, + val onboardingState: OnboardingState = OnboardingState(), val cardVerifiedOnline: Boolean = false, val tapWalletManager: TapWalletManager = TapWalletManager(), val payIdManager: PayIdManager = PayIdManager(), @@ -32,12 +32,17 @@ data class GlobalState( data class AndroidResources( - val strings: RString = RString() + val strings: RString = RString(), ) { data class RString( val addressWasCopied: Int = -1, - val walletIsNotEmpty: Int = -1 + val walletIsNotEmpty: Int = -1, ) } typealias CryptoCurrencyName = String -typealias FiatCurrencyName = String \ No newline at end of file +typealias FiatCurrencyName = String + +data class OnboardingState( + val onboardingStarted: Boolean = false, + val onboardingManager: OnboardingManager? = null, +) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/tasks/product/CreateProductWalletTask.kt b/app/src/main/java/com/tangem/tap/domain/tasks/product/CreateProductWalletTask.kt index 8818309e08..530b53ac4c 100644 --- a/app/src/main/java/com/tangem/tap/domain/tasks/product/CreateProductWalletTask.kt +++ b/app/src/main/java/com/tangem/tap/domain/tasks/product/CreateProductWalletTask.kt @@ -113,7 +113,7 @@ private class CreateWalletTangemWallet : ProductCommandProcessor = { dispatch, state - private fun handleNoteAction(action: Action, dispatch: DispatchFunction) { if (action !is OnboardingNoteAction) return val globalState = store.state.globalState - val onboardingManager = globalState.onboardingManager ?: return + val onboardingManager = globalState.onboardingState.onboardingManager ?: return val scanResponse = onboardingManager.scanResponse val card = onboardingManager.scanResponse.card diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/otherCards/redux/OnboardingOtherCardsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/otherCards/redux/OnboardingOtherCardsMiddleware.kt index 4606c539ae..f3419e67fa 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/otherCards/redux/OnboardingOtherCardsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/otherCards/redux/OnboardingOtherCardsMiddleware.kt @@ -37,7 +37,7 @@ private val onboardingOtherCardsMiddleware: Middleware = { dispatch, s private fun handleOtherCardsAction(action: Action, dispatch: DispatchFunction) { if (action !is OnboardingOtherCardsAction) return val globalState = store.state.globalState - val onboardingManager = globalState.onboardingManager ?: return + val onboardingManager = globalState.onboardingState.onboardingManager ?: return val card = onboardingManager.scanResponse.card diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt index 818b1974aa..f69e59381f 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt @@ -45,7 +45,7 @@ private fun handle(action: Action, dispatch: DispatchFunction) { val action = action as? TwinCardsAction ?: return val globalState = store.state.globalState - val onboardingManager = globalState.onboardingManager + val onboardingManager = globalState.onboardingState.onboardingManager val twinCardsState = store.state.twinCardsState fun getScanResponse(): ScanResponse { diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt index cecbb010c6..4e8cc263ab 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt @@ -38,7 +38,7 @@ private val onboardingWalletMiddleware: Middleware = { dispatch, state private fun handleWalletAction(action: Action) { if (action !is OnboardingWalletAction) return val globalState = store.state.globalState - val onboardingManager = globalState.onboardingManager + val onboardingManager = globalState.onboardingState.onboardingManager val scanResponse = onboardingManager?.scanResponse val card = scanResponse?.card @@ -73,7 +73,8 @@ private fun handleWalletAction(action: Action) { when (result) { is CompletionResult.Success -> { //here we must use updated scanResponse after createWallet & derivation - val updatedResponse = globalState.onboardingManager.scanResponse.copy(card = result.data) + val updatedResponse = + globalState.onboardingState.onboardingManager.scanResponse.copy(card = result.data) onboardingManager.scanResponse = updatedResponse onboardingManager.activationStarted(updatedResponse.card.cardId) store.dispatch(OnboardingWalletAction.ProceedBackup) @@ -134,7 +135,7 @@ private fun updateScanResponseAfterBackup( scanResponse: ScanResponse, backupState: BackupState ): ScanResponse { val card = if (backupState.backupStep == BackupStep.Finished) { - val cardsCount = backupState.backupCardsNumber + 1 + val cardsCount = backupState.backupCardsNumber scanResponse.card.copy( backupStatus = Card.BackupStatus.Active(cardCount = cardsCount), isAccessCodeSet = true @@ -250,6 +251,7 @@ class BackupMiddleware { } } is BackupAction.ResumeBackup -> { + store.dispatch(GlobalAction.Onboarding.Start(null, true)) store.dispatch(OnboardingWalletAction.ProceedBackup) store.dispatch(NavigationAction.NavigateTo(AppScreen.OnboardingWallet)) } diff --git a/app/src/main/res/drawable/shape_chip.xml b/app/src/main/res/drawable/shape_chip.xml index 9544d9916d..658e94c9a7 100644 --- a/app/src/main/res/drawable/shape_chip.xml +++ b/app/src/main/res/drawable/shape_chip.xml @@ -1,7 +1,7 @@ - +