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 f1c972ae02..3528a61c7a 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 @@ -71,7 +71,7 @@ internal class WalletSelectorMiddleware { refreshUserWalletsAmounts() } is WalletSelectorAction.ClearUserWallets -> { - disableUserWalletsSaving() + clearUserWalletsAndCloseError() } is WalletSelectorAction.AddWallet.Success, is WalletSelectorAction.AddWallet.Error, @@ -296,12 +296,8 @@ internal class WalletSelectorMiddleware { } } - private fun disableUserWalletsSaving() = scope.launch { + private fun clearUserWalletsAndCloseError() = scope.launch { clearUserWallets() - .map { - preferencesStorage.shouldSaveUserWallets = false - preferencesStorage.shouldSaveAccessCodes = false - } .doOnSuccess { store.dispatchWithMain(WalletSelectorAction.CloseError) popBackToHome() diff --git a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorViewModel.kt b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorViewModel.kt index 5a947b1cbd..c6339f9cd8 100644 --- a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorViewModel.kt @@ -19,11 +19,7 @@ import com.tangem.tap.features.walletSelector.ui.model.WarningModel import com.tangem.tap.store import com.tangem.tap.userWalletsListManager import com.tangem.tap.walletStoresManager -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.flow.update +import kotlinx.coroutines.flow.* import org.rekotlin.StoreSubscriber internal class WalletSelectorViewModel : ViewModel(), StoreSubscriber { @@ -200,8 +196,7 @@ internal class WalletSelectorViewModel : ViewModel(), StoreSubscriber WarningModel.BiometricsDisabledWarning( - onConfirm = this::clearUserWallets, - onDismiss = this::dismissWarningDialog, + onDismiss = this::clearUserWallets, ) else -> currentDialog } diff --git a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/components/BiometricsDisabledWarningContent.kt b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/components/BiometricsDisabledWarningContent.kt index b3b50288d2..61e8bd9000 100644 --- a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/components/BiometricsDisabledWarningContent.kt +++ b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/components/BiometricsDisabledWarningContent.kt @@ -17,9 +17,10 @@ internal fun BiometricsDisabledWarningContent(warning: WarningModel.BiometricsDi title = stringResource(id = R.string.common_warning), message = stringResource(id = R.string.biometric_unavailable_warning), onDismissDialog = warning.onDismiss, + isDismissable = false, confirmButton = DialogButton( title = stringResource(id = R.string.common_ok), - onClick = warning.onConfirm, + onClick = warning.onDismiss, ), ) } @@ -30,7 +31,6 @@ private fun BiometricsDisabledWarningContentSample(modifier: Modifier = Modifier Column(modifier = modifier) { BiometricsDisabledWarningContent( warning = WarningModel.BiometricsDisabledWarning( - onConfirm = {}, onDismiss = {}, ), ) diff --git a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/model/DialogModel.kt b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/model/DialogModel.kt index b458313c35..87039dc113 100644 --- a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/model/DialogModel.kt +++ b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/model/DialogModel.kt @@ -24,7 +24,6 @@ internal sealed interface WarningModel : DialogModel { ) : WarningModel data class BiometricsDisabledWarning( - val onConfirm: () -> Unit, val onDismiss: () -> Unit, ) : WarningModel } \ No newline at end of file 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 9f7143077a..8cc33eca6c 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 @@ -6,7 +6,6 @@ import com.tangem.common.doOnFailure import com.tangem.common.doOnResult import com.tangem.common.doOnSuccess import com.tangem.common.flatMap -import com.tangem.common.map import com.tangem.domain.models.scan.ScanResponse import com.tangem.tap.* import com.tangem.tap.common.analytics.events.AnalyticsParam @@ -63,16 +62,12 @@ internal class WelcomeMiddleware { private fun disableUserWalletsSaving() = scope.launch { userWalletsListManager.clear() + .flatMap { walletStoresManager.clear() } .flatMap { tangemSdkManager.clearSavedUserCodes() } - .map { - preferencesStorage.shouldSaveUserWallets = false - preferencesStorage.shouldSaveAccessCodes = false - } .doOnFailure { e -> Timber.e(e, "Unable to clear user wallets") } .doOnResult { - // !!! Workaround !!! store.dispatchWithMain(WelcomeAction.CloseError) store.dispatchWithMain(NavigationAction.PopBackTo(AppScreen.Home)) } diff --git a/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeViewModel.kt b/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeViewModel.kt index ad39cbe5ae..fd40c5038b 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeViewModel.kt @@ -72,8 +72,7 @@ internal class WelcomeViewModel : ViewModel(), StoreSubscriber { onDismiss = this::dismissWarning, ) is UserWalletsListError.BiometricsAuthenticationDisabled -> WarningModel.BiometricsDisabledWarning( - onConfirm = this::clearUserWallets, - onDismiss = this::dismissWarning, + onDismiss = this::clearUserWallets, ) else -> null } diff --git a/app/src/main/java/com/tangem/tap/features/welcome/ui/components/WarningDialog.kt b/app/src/main/java/com/tangem/tap/features/welcome/ui/components/WarningDialog.kt index d8a78e246f..ca9a8d5769 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/ui/components/WarningDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/ui/components/WarningDialog.kt @@ -48,9 +48,10 @@ internal fun WarningDialog(warning: WarningModel?) { title = stringResource(id = R.string.common_warning), message = stringResource(id = R.string.biometric_unavailable_warning), onDismissDialog = warning.onDismiss, + isDismissable = false, confirmButton = DialogButton( title = stringResource(id = R.string.common_ok), - onClick = warning.onConfirm, + onClick = warning.onDismiss, ), ) } @@ -140,7 +141,7 @@ private fun KeyInvalidatedWarningPreview_Dark() { @Composable private fun BiometricDisabledWarningSample(modifier: Modifier = Modifier) { Column(modifier = modifier) { - WarningDialog(warning = WarningModel.BiometricsDisabledWarning(onConfirm = {}, onDismiss = {})) + WarningDialog(warning = WarningModel.BiometricsDisabledWarning(onDismiss = {})) } } diff --git a/app/src/main/java/com/tangem/tap/features/welcome/ui/model/WarningModel.kt b/app/src/main/java/com/tangem/tap/features/welcome/ui/model/WarningModel.kt index 55789fe91a..f8fb28135c 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/ui/model/WarningModel.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/ui/model/WarningModel.kt @@ -11,7 +11,6 @@ internal sealed interface WarningModel { ) : WarningModel data class BiometricsDisabledWarning( - val onConfirm: () -> Unit, val onDismiss: () -> Unit, ) : WarningModel } \ No newline at end of file diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/Dialogs.kt b/core/ui/src/main/java/com/tangem/core/ui/components/Dialogs.kt index 36052e27f0..24a2316d60 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/Dialogs.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/Dialogs.kt @@ -1,12 +1,7 @@ package com.tangem.core.ui.components import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.* import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -15,6 +10,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties import com.tangem.core.ui.R import com.tangem.core.ui.res.TangemTheme @@ -52,6 +48,7 @@ data class AdditionalTextInputDialogParams( * @param confirmButton title and action for confirm button * @param dismissButton title and action for dismiss button (no dismiss button if null) * @param onDismissDialog action to perform when dialog is closed + * @param isDismissable If false then dialog can not be dismissed by back button click or by outside click * * @see Figma component @@ -63,6 +60,7 @@ fun BasicDialog( onDismissDialog: () -> Unit, title: String? = null, dismissButton: DialogButton? = null, + isDismissable: Boolean = true, ) { TangemDialog( type = DialogType.Message(message), @@ -70,6 +68,10 @@ fun BasicDialog( onDismissDialog = onDismissDialog, title = title, dismissButton = dismissButton, + properties = DialogProperties( + dismissOnBackPress = isDismissable, + dismissOnClickOutside = isDismissable, + ), ) } @@ -94,6 +96,7 @@ fun SimpleOkDialog(message: String, onDismissDialog: () -> Unit) { * @param dismissButton title and action for dismiss button (no dismiss button if null) * @param onDismissDialog action to perform when dialog is closed * @param textFieldParams Additional params for dialog text field + * @param isDismissable If false then dialog can not be dismissed by back button click or by outside click * * @see Figma component @@ -107,6 +110,7 @@ fun TextInputDialog( textFieldParams: AdditionalTextInputDialogParams, title: String? = null, dismissButton: DialogButton? = null, + isDismissable: Boolean = true, ) { TangemDialog( type = DialogType.TextInput( @@ -118,6 +122,10 @@ fun TextInputDialog( onDismissDialog = onDismissDialog, title = title, dismissButton = dismissButton, + properties = DialogProperties( + dismissOnBackPress = isDismissable, + dismissOnClickOutside = isDismissable, + ), ) } @@ -129,8 +137,9 @@ private fun TangemDialog( onDismissDialog: () -> Unit, title: String? = null, dismissButton: DialogButton? = null, + properties: DialogProperties = DialogProperties(), ) { - Dialog(onDismissRequest = onDismissDialog) { + Dialog(properties = properties, onDismissRequest = onDismissDialog) { Column( modifier = Modifier .background(