From b9ba8a030a80668da7ac76b46a8a939ea0044d6c Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 23 Oct 2023 15:10:39 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../details/ui/details/DetailsViewModel.kt | 21 +++++---- .../details/ui/resetcard/ResetCardFragment.kt | 5 +- .../details/ui/resetcard/ResetCardScreen.kt | 46 +++++++++++++------ .../ui/resetcard/ResetCardScreenState.kt | 32 ++++++++----- .../ui/resetcard/ResetCardViewModel.kt | 21 ++++++++- 5 files changed, 85 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsViewModel.kt b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsViewModel.kt index 8e9fb4ce18..5f12982afd 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsViewModel.kt @@ -12,6 +12,7 @@ import com.tangem.core.ui.extensions.TextReference import com.tangem.domain.common.util.cardTypesResolver import com.tangem.domain.wallets.repository.WalletsRepository import com.tangem.tap.common.analytics.events.Settings +import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.dispatchWithMain import com.tangem.tap.common.feedback.FeedbackEmail import com.tangem.tap.common.feedback.SupportInfo @@ -128,51 +129,51 @@ internal class DetailsViewModel( } private fun navigateToToS() { - store.dispatch(DisclaimerAction.Show(AppScreen.Details)) + store.dispatchOnMain(DisclaimerAction.Show(AppScreen.Details)) } private fun navigateToReferralProgram() { - store.dispatch(NavigationAction.NavigateTo(AppScreen.ReferralProgram)) + store.dispatchOnMain(NavigationAction.NavigateTo(AppScreen.ReferralProgram)) } private fun sendFeedback() { Analytics.send(Settings.ButtonSendFeedback()) - store.dispatch(GlobalAction.SendEmail(FeedbackEmail())) + store.dispatchOnMain(GlobalAction.SendEmail(FeedbackEmail())) } private fun navigateToChat() { Analytics.send(Settings.ButtonChat()) - store.dispatch(GlobalAction.OpenChat(SupportInfo())) + store.dispatchOnMain(GlobalAction.OpenChat(SupportInfo())) } private fun navigateToAppSettings() { Analytics.send(Settings.ButtonAppSettings()) - store.dispatch(NavigationAction.NavigateTo(AppScreen.AppSettings)) + store.dispatchOnMain(NavigationAction.NavigateTo(AppScreen.AppSettings)) } private fun navigateToCardSettings() { Analytics.send(Settings.ButtonCardSettings()) - store.dispatch(NavigationAction.NavigateTo(AppScreen.CardSettings)) + store.dispatchOnMain(NavigationAction.NavigateTo(AppScreen.CardSettings)) } private fun linkMoreCards() { Analytics.send(Settings.ButtonCreateBackup()) - store.dispatch(WalletAction.MultiWallet.BackupWallet) + store.dispatchOnMain(WalletAction.MultiWallet.BackupWallet) } private fun scanAndSaveUserWallet() { Analytics.send(Settings.ScanNewCard) - store.dispatch(DetailsAction.ScanAndSaveUserWallet) + store.dispatchOnMain(DetailsAction.ScanAndSaveUserWallet) } private fun navigateToWalletConnect() { Analytics.send(Settings.ButtonWalletConnect()) - store.dispatch(NavigationAction.NavigateTo(AppScreen.WalletConnectSessions)) + store.dispatchOnMain(NavigationAction.NavigateTo(AppScreen.WalletConnectSessions)) } private fun handleSocialNetworkClick(link: SocialNetworkLink) { Analytics.send(Settings.ButtonSocialNetwork(link.network)) - store.dispatch(NavigationAction.OpenUrl(link.url)) + store.dispatchOnMain(NavigationAction.OpenUrl(link.url)) } private fun getSocialLinks(): ImmutableList { diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardFragment.kt index 9ac4c1f3d3..a81836f541 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardFragment.kt @@ -22,7 +22,7 @@ internal class ResetCardFragment : ComposeFragment(), StoreSubscriber = - mutableStateOf(viewModel.updateState(store.state.detailsState.cardSettingsState)) + mutableStateOf(ResetCardScreenState.InitialState) @Composable override fun ScreenContent(modifier: Modifier) { @@ -49,6 +49,7 @@ internal class ResetCardFragment : ComposeFragment(), StoreSubscriber Unit, modifier: Modifier = Modifier) { SettingsScreensScaffold( modifier = modifier, - content = { ResetCardView(state = state) }, + content = { + when (state) { + is ResetCardScreenState.ResetCardScreenContent -> { + ResetCardView(state = state) + } + ResetCardScreenState.InitialState -> { + // do nothing for now, just white screen + } + } + }, onBackClick = onBackClick, ) } -@OptIn(ExperimentalAnimationApi::class) @Suppress("LongMethod", "MagicNumber") @Composable -private fun ResetCardView(state: ResetCardScreenState) { +private fun ResetCardView(state: ResetCardScreenState.ResetCardScreenContent) { Column( modifier = Modifier .fillMaxSize() @@ -80,17 +88,24 @@ private fun ResetCardView(state: ResetCardScreenState) { Spacer(modifier = Modifier.size(28.dp)) - ConditionCheckBox( - checkedState = state.acceptCondition1Checked, - onCheckedChange = state.onAcceptCondition1ToggleClick, - description = TextReference.Res(R.string.reset_card_to_factory_condition_1), - ) - - ConditionCheckBox( - checkedState = state.acceptCondition2Checked, - onCheckedChange = state.onAcceptCondition2ToggleClick, - description = TextReference.Res(R.string.reset_card_to_factory_condition_2), - ) + state.warningsToShow.forEach { + when (it) { + ResetCardScreenState.WarningsToReset.LOST_WALLET_ACCESS -> { + ConditionCheckBox( + checkedState = state.acceptCondition1Checked, + onCheckedChange = state.onAcceptCondition1ToggleClick, + description = TextReference.Res(R.string.reset_card_to_factory_condition_1), + ) + } + ResetCardScreenState.WarningsToReset.LOST_PASSWORD_RESTORE -> { + ConditionCheckBox( + checkedState = state.acceptCondition2Checked, + onCheckedChange = state.onAcceptCondition2ToggleClick, + description = TextReference.Res(R.string.reset_card_to_factory_condition_2), + ) + } + } + } Spacer(modifier = Modifier.size(16.dp)) Box( @@ -162,8 +177,9 @@ private fun ResetCardScreenSample(modifier: Modifier = Modifier) { .background(TangemTheme.colors.background.secondary), ) { ResetCardScreen( - state = ResetCardScreenState( + state = ResetCardScreenState.ResetCardScreenContent( accepted = true, + warningsToShow = listOf(ResetCardScreenState.WarningsToReset.LOST_WALLET_ACCESS), descriptionText = TextReference.Res(R.string.reset_card_with_backup_to_factory_message), onAcceptCondition1ToggleClick = {}, onAcceptCondition2ToggleClick = {}, diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardScreenState.kt b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardScreenState.kt index 97f7a9776e..a12decbeef 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardScreenState.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardScreenState.kt @@ -2,15 +2,25 @@ package com.tangem.tap.features.details.ui.resetcard import com.tangem.tap.features.details.ui.cardsettings.TextReference -internal data class ResetCardScreenState( - val accepted: Boolean = false, - val descriptionText: TextReference, - val acceptCondition1Checked: Boolean = false, - val acceptCondition2Checked: Boolean = false, - val onAcceptCondition1ToggleClick: (Boolean) -> Unit, - val onAcceptCondition2ToggleClick: (Boolean) -> Unit, - val onResetButtonClick: () -> Unit, -) { - val resetButtonEnabled: Boolean - get() = accepted +internal sealed class ResetCardScreenState { + + object InitialState : ResetCardScreenState() + + data class ResetCardScreenContent( + val accepted: Boolean = false, + val descriptionText: TextReference, + val warningsToShow: List, + val acceptCondition1Checked: Boolean = false, + val acceptCondition2Checked: Boolean = false, + val onAcceptCondition1ToggleClick: (Boolean) -> Unit, + val onAcceptCondition2ToggleClick: (Boolean) -> Unit, + val onResetButtonClick: () -> Unit, + ) : ResetCardScreenState() { + val resetButtonEnabled: Boolean + get() = accepted + } + + internal enum class WarningsToReset { + LOST_WALLET_ACCESS, LOST_PASSWORD_RESTORE + } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardViewModel.kt b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardViewModel.kt index 00d9f515e2..c892a62abd 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardViewModel.kt @@ -1,5 +1,8 @@ package com.tangem.tap.features.details.ui.resetcard +import com.tangem.domain.common.util.cardTypesResolver +import com.tangem.domain.models.scan.CardDTO +import com.tangem.domain.models.scan.ScanResponse import com.tangem.tap.common.redux.AppState import com.tangem.tap.features.details.redux.CardSettingsState import com.tangem.tap.features.details.redux.DetailsAction @@ -9,14 +12,28 @@ import org.rekotlin.Store internal class ResetCardViewModel(private val store: Store) { - fun updateState(state: CardSettingsState?): ResetCardScreenState { + fun updateState( + scanResponse: ScanResponse, + state: CardSettingsState?, + ): ResetCardScreenState.ResetCardScreenContent { val descriptionText = state?.cardInfo ?.toResetCardDescriptionText() ?: TextReference.Str(value = "") - return ResetCardScreenState( + val warningsToShow = buildList { + add(ResetCardScreenState.WarningsToReset.LOST_WALLET_ACCESS) + + val cardTypesResolver = scanResponse.cardTypesResolver + val isTangemWallet = cardTypesResolver.isTangemWallet() || cardTypesResolver.isWallet2() + if (isTangemWallet && state?.card?.backupStatus is CardDTO.BackupStatus.Active) { + add(ResetCardScreenState.WarningsToReset.LOST_PASSWORD_RESTORE) + } + } + + return ResetCardScreenState.ResetCardScreenContent( accepted = state?.resetButtonEnabled ?: false, descriptionText = descriptionText, + warningsToShow = warningsToShow, acceptCondition1Checked = state?.condition1Checked ?: false, acceptCondition2Checked = state?.condition2Checked ?: false, onAcceptCondition1ToggleClick = { store.dispatch(DetailsAction.ResetToFactory.AcceptCondition1(it)) },