diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt b/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt index 3abbbac6d1..711e7ed172 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt @@ -54,12 +54,12 @@ fun FragmentActivity.openFragment( if (screen.isDialogFragment) { (fragment as DialogFragment).show(transaction, screen.name) if (addToBackstack) { - transaction.addToBackStack(null) + transaction.addToBackStack(screen.name) } } else { transaction.replace(R.id.fragment_container, fragment, screen.name) - if (addToBackstack && (screen != AppScreen.Home && screen != AppScreen.Welcome)) { - transaction.addToBackStack(null) + if (addToBackstack) { + transaction.addToBackStack(screen.name) } transaction.commitAllowingStateLoss() } diff --git a/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationAction.kt b/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationAction.kt index df26b85edc..3e4f3a9702 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationAction.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationAction.kt @@ -12,7 +12,10 @@ sealed class NavigationAction : Action { val addToBackstack: Boolean = true, ) : NavigationAction() - data class PopBackTo(val screen: AppScreen? = null) : NavigationAction() + data class PopBackTo( + val screen: AppScreen? = null, + val inclusive: Boolean = false, + ) : NavigationAction() data class OpenUrl(val url: String) : NavigationAction() 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 da9430b1e1..90d6b880da 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 @@ -32,13 +32,13 @@ val navigationMiddleware: Middleware = { _, state -> AppScreen.Home, AppScreen.Welcome, -> { - navState?.activity?.get()?.popBackTo(screen = null, inclusive = true) + navState?.activity?.get()?.popBackTo(screen, action.inclusive) if (navState?.backStack?.contains(screen) != true) { store.dispatchOnMain(NavigationAction.NavigateTo(screen)) } } else -> { - navState?.activity?.get()?.popBackTo(screen = action.screen) + navState?.activity?.get()?.popBackTo(screen, action.inclusive) } } } diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt index 11cd4bb5f4..d991fe21ba 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt @@ -121,12 +121,15 @@ class DetailsMiddleware { .flatMap { userWalletsListManager.delete(listOf(card.userWalletId)) } .doOnSuccess { Analytics.send(Settings.CardSettings.FactoryResetFinished()) - val screen = if (userWalletsListManager.hasSavedUserWallets) { - AppScreen.Welcome + + val selectedUserWallet = userWalletsListManager.selectedUserWalletSync + if (selectedUserWallet != null) { + store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Wallet)) + store.onUserWalletSelected(selectedUserWallet) } else { - AppScreen.Home + userWalletsListManager.lock() + store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Home)) } - store.dispatchOnMain(NavigationAction.PopBackTo(screen)) } .doOnFailure { error -> (error as? TangemSdkError)?.let { sdkError -> diff --git a/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt b/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt index 88a3e28b3c..450d428367 100644 --- a/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.activity.compose.BackHandler import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf @@ -42,6 +43,10 @@ class HomeFragment : Fragment(), StoreSubscriber { return ComposeView(inflater.context).apply { setContent { + BackHandler { + requireActivity().finish() + } + AppCompatTheme { ScreenContent() } diff --git a/app/src/main/java/com/tangem/tap/features/saveWallet/redux/SaveWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/saveWallet/redux/SaveWalletMiddleware.kt index 286b00e96d..b8338279a4 100644 --- a/app/src/main/java/com/tangem/tap/features/saveWallet/redux/SaveWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/saveWallet/redux/SaveWalletMiddleware.kt @@ -82,7 +82,7 @@ internal class SaveWalletMiddleware { userWalletsListManager.selectedUserWalletSync?.walletId == userWallet.walletId if (isSavedWalletSelected) { - store.dispatchOnMain(NavigationAction.PopBackTo()) + store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Wallet)) } else { store.dispatchOnMain(NavigationAction.NavigateTo(AppScreen.WalletSelector)) } diff --git a/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt b/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt index bac210c6d4..81ba0b4cf1 100644 --- a/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt @@ -127,7 +127,7 @@ internal class WalletSelectorMiddleware { store.dispatchOnMain(WalletSelectorAction.AddWallet.Success) if (isSavedWalletSelected) { - store.dispatchOnMain(NavigationAction.PopBackTo()) + store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Wallet)) store.onUserWalletSelected(selectedWallet) } } @@ -141,7 +141,7 @@ internal class WalletSelectorMiddleware { store.dispatchOnMain(WalletSelectorAction.HandleError(error)) } .doOnSuccess { selectedWallet -> - store.dispatchOnMain(NavigationAction.PopBackTo()) + store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Wallet)) store.onUserWalletSelected(selectedWallet) } } diff --git a/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt b/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt index 8ccaffcc44..9ff1ad727f 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt @@ -1,12 +1,19 @@ package com.tangem.tap.features.welcome.ui +import androidx.activity.compose.BackHandler import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.material.SnackbarHost import androidx.compose.material.SnackbarHostState -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.State +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.colorResource @@ -39,6 +46,10 @@ internal class WelcomeFragment : ComposeFragment() { setSystemBarsColor(color = backgroundColor) } + BackHandler { + requireActivity().finish() + } + Box( modifier = modifier .systemBarsPadding(),