Updated on 2026-08-14

This commit is contained in:
Tangem 2023-06-13 08:55:20 +03:00
commit 7f59562eb1
9 changed files with 27 additions and 34 deletions

View file

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

View file

@ -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<WalletSelectorState> {
@ -200,8 +196,7 @@ internal class WalletSelectorViewModel : ViewModel(), StoreSubscriber<WalletSele
onDismiss = this::dismissWarningDialog,
)
is UserWalletsListError.BiometricsAuthenticationDisabled -> WarningModel.BiometricsDisabledWarning(
onConfirm = this::clearUserWallets,
onDismiss = this::dismissWarningDialog,
onDismiss = this::clearUserWallets,
)
else -> currentDialog
}

View file

@ -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 = {},
),
)

View file

@ -24,7 +24,6 @@ internal sealed interface WarningModel : DialogModel {
) : WarningModel
data class BiometricsDisabledWarning(
val onConfirm: () -> Unit,
val onDismiss: () -> Unit,
) : WarningModel
}

View file

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

View file

@ -72,8 +72,7 @@ internal class WelcomeViewModel : ViewModel(), StoreSubscriber<WelcomeState> {
onDismiss = this::dismissWarning,
)
is UserWalletsListError.BiometricsAuthenticationDisabled -> WarningModel.BiometricsDisabledWarning(
onConfirm = this::clearUserWallets,
onDismiss = this::dismissWarning,
onDismiss = this::clearUserWallets,
)
else -> null
}

View file

@ -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 = {}))
}
}

View file

@ -11,7 +11,6 @@ internal sealed interface WarningModel {
) : WarningModel
data class BiometricsDisabledWarning(
val onConfirm: () -> Unit,
val onDismiss: () -> Unit,
) : WarningModel
}

View file

@ -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 <a href = "https://www.figma.com/file/14ISV23YB1yVW1uNVwqrKv/Android?node-id=48%3A30&t=izDPAJnDbJTTC0Fp-1"
* >Figma component</a>
@ -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 <a href = "https://www.figma.com/file/14ISV23YB1yVW1uNVwqrKv/Android?node-id=268%3A273&t=9uHKoudX78ySqium-4"
* >Figma component</a>
@ -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(