@ -16,18 +16,27 @@
@@ -16,18 +16,27 @@
package io.element.android.features.securebackup.impl.root
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.PreviewParameter
import io.element.android.features.securebackup.impl.R
import io.element.android.libraries.architecture.Async
import io.element.android.libraries.designsystem.components.async.AsyncLoading
import io.element.android.libraries.designsystem.components.list.ListItemContent
import io.element.android.libraries.designsystem.components.preferences.PreferenceDivider
import io.element.android.libraries.designsystem.components.preferences.PreferencePage
import io.element.android.libraries.designsystem.components.preferences.PreferenceText
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.text.buildAnnotatedStringWithStyledPart
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
import io.element.android.libraries.designsystem.theme.components.ListItem
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TextButton
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarHost
import io.element.android.libraries.designsystem.utils.snackbar.rememberSnackbarHostState
import io.element.android.libraries.matrix.api.encryption.BackupState
@ -73,23 +82,55 @@ fun SecureBackupRootView(
@@ -73,23 +82,55 @@ fun SecureBackupRootView(
BackupState . WAITING _FOR _SYNC -> Unit
BackupState . UNKNOWN -> {
when ( state . doesBackupExistOnServer ) {
true -> {
// Should not happen, we will have the state BackupState.ENABLED
PreferenceText (
title = stringResource ( id = R . string . screen _chat _backup _key _backup _action _disable ) ,
tintColor = ElementTheme . colors . textCriticalPrimary ,
onClick = onDisableClicked ,
)
is Async . Success -> when ( state . doesBackupExistOnServer . data ) {
true -> {
// Should not happen, we will have the state BackupState.ENABLED
PreferenceText (
title = stringResource ( id = R . string . screen _chat _backup _key _backup _action _disable ) ,
tintColor = ElementTheme . colors . textCriticalPrimary ,
onClick = onDisableClicked ,
)
}
false -> {
PreferenceText (
title = stringResource ( id = R . string . screen _chat _backup _key _backup _action _enable ) ,
onClick = onEnableClicked ,
)
}
}
is Async . Loading ,
Async . Uninitialized -> {
ListItem ( headlineContent = {
Row (
modifier = Modifier . fillMaxWidth ( ) ,
horizontalArrangement = Arrangement . Center ,
) {
CircularProgressIndicator ( )
}
} )
}
false -> {
is Async . Failure -> {
ListItem (
headlineContent = {
Text (
text = stringResource ( id = CommonStrings . error _unknown ) ,
)
} ,
trailingContent = ListItemContent . Custom {
TextButton (
text = stringResource (
id = CommonStrings . action _retry
) ,
onClick = { state . eventSink . invoke ( SecureBackupRootEvents . RetryKeyBackupState ) }
)
}
)
PreferenceText (
title = stringResource ( id = R . string . screen _chat _backup _key _backup _action _enable ) ,
onClick = onEnableClicked ,
)
}
null -> {
AsyncLoading ( )
}
}
}
BackupState . CREATING ,