From af323d863655a76f9ada103e75cf4ec123baa985 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 7 Jul 2023 15:34:15 +0200 Subject: [PATCH] Show Snackbar once the verification is finish in the correct screen (#812) --- .../impl/root/PreferencesRootPresenter.kt | 8 +++++++- .../impl/root/PreferencesRootState.kt | 4 +++- .../impl/root/PreferencesRootStateProvider.kt | 5 ++++- .../impl/root/PreferencesRootView.kt | 17 ++++++++++++++++- .../components/preferences/PreferenceScreen.kt | 2 ++ 5 files changed, 32 insertions(+), 4 deletions(-) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt index 7afa2a67da..66ff62ee2b 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt @@ -28,6 +28,8 @@ import androidx.compose.runtime.saveable.rememberSaveable import io.element.android.features.logout.api.LogoutPreferencePresenter import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.meta.BuildType +import io.element.android.libraries.designsystem.utils.SnackbarDispatcher +import io.element.android.libraries.designsystem.utils.collectSnackbarMessageAsState import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.user.getCurrentUser @@ -43,6 +45,7 @@ class PreferencesRootPresenter @Inject constructor( private val sessionVerificationService: SessionVerificationService, private val buildType: BuildType, private val versionFormatter: VersionFormatter, + private val snackbarDispatcher: SnackbarDispatcher, ) : Presenter { @Composable @@ -54,6 +57,8 @@ class PreferencesRootPresenter @Inject constructor( initialLoad(matrixUser) } + val snackbarMessage by snackbarDispatcher.collectSnackbarMessageAsState() + // Session verification status (unknown, not verified, verified) val sessionVerifiedStatus by sessionVerificationService.sessionVerifiedStatus.collectAsState() val sessionIsNotVerified by remember { @@ -67,7 +72,8 @@ class PreferencesRootPresenter @Inject constructor( myUser = matrixUser.value, version = versionFormatter.get(), showCompleteVerification = sessionIsNotVerified, - showDeveloperSettings = showDeveloperSettings + showDeveloperSettings = showDeveloperSettings, + snackbarMessage = snackbarMessage, ) } diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootState.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootState.kt index 8760550fd0..2b0963c53c 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootState.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootState.kt @@ -17,6 +17,7 @@ package io.element.android.features.preferences.impl.root import io.element.android.features.logout.api.LogoutPreferenceState +import io.element.android.libraries.designsystem.utils.SnackbarMessage import io.element.android.libraries.matrix.api.user.MatrixUser data class PreferencesRootState( @@ -24,5 +25,6 @@ data class PreferencesRootState( val myUser: MatrixUser?, val version: String, val showCompleteVerification: Boolean, - val showDeveloperSettings: Boolean + val showDeveloperSettings: Boolean, + val snackbarMessage: SnackbarMessage?, ) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootStateProvider.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootStateProvider.kt index 4f9626bcbd..9dbd54ffff 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootStateProvider.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootStateProvider.kt @@ -17,11 +17,14 @@ package io.element.android.features.preferences.impl.root import io.element.android.features.logout.api.aLogoutPreferenceState +import io.element.android.libraries.designsystem.utils.SnackbarMessage +import io.element.android.libraries.ui.strings.CommonStrings fun aPreferencesRootState() = PreferencesRootState( logoutState = aLogoutPreferenceState(), myUser = null, version = "Version 1.1 (1)", showCompleteVerification = true, - showDeveloperSettings = true + showDeveloperSettings = true, + snackbarMessage = SnackbarMessage(CommonStrings.common_verification_complete), ) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt index f1e6e7de61..745e001b6d 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt @@ -24,6 +24,9 @@ import androidx.compose.material.icons.outlined.DeveloperMode import androidx.compose.material.icons.outlined.Help import androidx.compose.material.icons.outlined.InsertChart import androidx.compose.material.icons.outlined.VerifiedUser +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Snackbar +import androidx.compose.material3.SnackbarHost import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource @@ -39,6 +42,7 @@ import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.preview.LargeHeightPreview import io.element.android.libraries.designsystem.theme.components.Divider import io.element.android.libraries.designsystem.theme.components.Text +import io.element.android.libraries.designsystem.utils.rememberSnackbarHostState import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.components.MatrixUserProvider import io.element.android.libraries.theme.ElementTheme @@ -55,11 +59,22 @@ fun PreferencesRootView( onOpenDeveloperSettings: () -> Unit, modifier: Modifier = Modifier, ) { + val snackbarHostState = rememberSnackbarHostState(snackbarMessage = state.snackbarMessage) + // Include pref from other modules PreferenceView( modifier = modifier, onBackPressed = onBackPressed, - title = stringResource(id = CommonStrings.common_settings) + title = stringResource(id = CommonStrings.common_settings), + snackbarHost = { + SnackbarHost(snackbarHostState) { data -> + Snackbar( + snackbarData = data, + containerColor = MaterialTheme.colorScheme.surfaceVariant, + contentColor = MaterialTheme.colorScheme.primary + ) + } + } ) { UserPreferences(state.myUser) if (state.showCompleteVerification) { diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceScreen.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceScreen.kt index 7a6eaf327d..5c44d48f24 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceScreen.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceScreen.kt @@ -50,6 +50,7 @@ fun PreferenceView( title: String, modifier: Modifier = Modifier, onBackPressed: () -> Unit = {}, + snackbarHost: @Composable () -> Unit = {}, content: @Composable ColumnScope.() -> Unit, ) { Scaffold( @@ -64,6 +65,7 @@ fun PreferenceView( onBackPressed = onBackPressed, ) }, + snackbarHost = snackbarHost, content = { Column( modifier = Modifier