From f983eb8db58d4c5e879dd76b238ab049b8c52f4a Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 18 Dec 2024 17:55:51 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../features/welcome/ui/WelcomeScreenState.kt | 6 +- .../welcome/ui/components/WelcomeScreen.kt | 101 ++++++++++++++++++ .../ui/components/WelcomeScreenContent.kt | 6 +- 3 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/features/welcome/ui/components/WelcomeScreen.kt diff --git a/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeScreenState.kt b/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeScreenState.kt index 701042816e..3ede2ae446 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeScreenState.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeScreenState.kt @@ -1,13 +1,15 @@ package com.tangem.tap.features.welcome.ui -import androidx.compose.runtime.Immutable import com.tangem.tap.features.details.ui.cardsettings.TextReference import com.tangem.tap.features.welcome.ui.model.WarningModel -@Immutable internal data class WelcomeScreenState( + val onPopBack: () -> Unit = {}, val showUnlockWithBiometricsProgress: Boolean = false, val showUnlockWithCardProgress: Boolean = false, val warning: WarningModel? = null, val error: TextReference? = null, + val onUnlockClick: () -> Unit = {}, + val onScanCardClick: () -> Unit = {}, + val onCloseError: () -> Unit = {}, ) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/welcome/ui/components/WelcomeScreen.kt b/app/src/main/java/com/tangem/tap/features/welcome/ui/components/WelcomeScreen.kt new file mode 100644 index 0000000000..8b90cbbdc9 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/welcome/ui/components/WelcomeScreen.kt @@ -0,0 +1,101 @@ +package com.tangem.tap.features.welcome.ui.components + +import android.content.res.Configuration +import androidx.activity.compose.BackHandler +import androidx.compose.foundation.background +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.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import androidx.compose.ui.unit.dp +import com.tangem.core.ui.res.TangemTheme +import com.tangem.core.ui.res.TangemThemePreview +import com.tangem.tap.features.details.ui.cardsettings.TextReference +import com.tangem.tap.features.details.ui.cardsettings.resolveReference +import com.tangem.tap.features.welcome.component.WelcomeComponent +import com.tangem.tap.features.welcome.component.impl.PreviewWelcomeComponent +import com.tangem.tap.features.welcome.ui.WelcomeScreenState +import com.tangem.tap.features.welcome.ui.model.WarningModel + +@Composable +internal fun WelcomeScreen(state: WelcomeScreenState, modifier: Modifier = Modifier) { + val snackbarHostState = remember { SnackbarHostState() } + val errorMessage by rememberUpdatedState(newValue = state.error?.resolveReference()) + val warning by rememberUpdatedState(newValue = state.warning) + + BackHandler(onBack = state.onPopBack) + + Box( + modifier = modifier + .background(TangemTheme.colors.background.primary) + .systemBarsPadding(), + ) { + WelcomeScreenContent( + showUnlockProgress = state.showUnlockWithBiometricsProgress, + showScanCardProgress = state.showUnlockWithCardProgress, + onUnlockClick = state.onUnlockClick, + onScanCardClick = state.onScanCardClick, + ) + + SnackbarHost( + modifier = Modifier + .align(Alignment.BottomCenter) + .padding(vertical = 16.dp) + .fillMaxWidth(), + hostState = snackbarHostState, + ) + } + + WarningDialog(warning) + + LaunchedEffect(errorMessage, state.onCloseError) { + errorMessage?.let { + snackbarHostState.showSnackbar(it) + state.onCloseError() + } + } +} + +// region Preview +@Composable +@Preview(showBackground = true, widthDp = 360) +@Preview(showBackground = true, widthDp = 360, uiMode = Configuration.UI_MODE_NIGHT_YES) +private fun Preview_WelcomeScreen( + @PreviewParameter(WelcomeComponentPreviewProvider::class) component: WelcomeComponent, +) { + TangemThemePreview { + component.Content(Modifier) + } +} + +private class WelcomeComponentPreviewProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + PreviewWelcomeComponent(), + PreviewWelcomeComponent( + initialState = WelcomeScreenState( + showUnlockWithBiometricsProgress = true, + showUnlockWithCardProgress = true, + ), + ), + PreviewWelcomeComponent( + initialState = WelcomeScreenState( + error = TextReference.Str(value = "Error"), + ), + ), + PreviewWelcomeComponent( + initialState = WelcomeScreenState( + warning = WarningModel.KeyInvalidatedWarning(onDismiss = {}), + ), + ), + ) +} +// endregion Preview \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/welcome/ui/components/WelcomeScreenContent.kt b/app/src/main/java/com/tangem/tap/features/welcome/ui/components/WelcomeScreenContent.kt index 23661bc2ad..c9bbbdf31c 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/ui/components/WelcomeScreenContent.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/ui/components/WelcomeScreenContent.kt @@ -24,8 +24,12 @@ internal fun WelcomeScreenContent( showScanCardProgress: Boolean, onUnlockClick: () -> Unit, onScanCardClick: () -> Unit, + modifier: Modifier = Modifier, ) { - Column(horizontalAlignment = Alignment.CenterHorizontally) { + Column( + modifier = modifier, + horizontalAlignment = Alignment.CenterHorizontally, + ) { SpacerHMax() Icon( modifier = Modifier.size(TangemTheme.dimens.size96),