Add initial flag / watermark system for backup failure UX.

This commit is contained in:
Alex Hart
2024-11-01 10:59:50 -03:00
committed by Greyson Parrelli
parent 4446510916
commit 4282d88191
12 changed files with 221 additions and 34 deletions

View File

@@ -55,6 +55,7 @@ import org.signal.core.ui.horizontalGutters
import org.signal.core.ui.theme.SignalTheme
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.avatar.AvatarImage
import org.thoughtcrime.securesms.backup.v2.BackupRepository
import org.thoughtcrime.securesms.banner.Banner
import org.thoughtcrime.securesms.banner.BannerManager
import org.thoughtcrime.securesms.banner.banners.DeprecatedBuildBanner
@@ -187,42 +188,39 @@ private fun AppSettingsContent(
)
}
if (state.backupFailureState != BackupFailureState.NONE) {
item {
Dividers.Default()
}
when (state.backupFailureState) {
BackupFailureState.SUBSCRIPTION_STATE_MISMATCH -> {
item {
Dividers.Default()
item {
Rows.TextRow(
text = {
Text(text = stringResource(R.string.AppSettingsFragment__renew_your_signal_backups_subscription))
},
icon = {
Box {
Icon(
painter = painterResource(R.drawable.symbol_backup_24),
tint = MaterialTheme.colorScheme.onSurface,
contentDescription = null
)
Box(
modifier = Modifier
.absoluteOffset(3.dp, (-2).dp)
.background(color = Color(0xFFFFCC00), shape = CircleShape)
.size(12.dp)
.align(Alignment.TopEnd)
)
BackupsWarningRow(
text = stringResource(R.string.AppSettingsFragment__renew_your_signal_backups_subscription),
onClick = {
callbacks.navigate(R.id.action_appSettingsFragment_to_remoteBackupsSettingsFragment)
}
},
onClick = {
callbacks.navigate(R.id.action_appSettingsFragment_to_remoteBackupsSettingsFragment)
}
)
)
Dividers.Default()
}
}
item {
Dividers.Default()
BackupFailureState.COULD_NOT_COMPLETE_BACKUP -> {
item {
Dividers.Default()
BackupsWarningRow(
text = stringResource(R.string.AppSettingsFragment__couldnt_complete_backup),
onClick = {
BackupRepository.markBackupFailedIndicatorClicked()
callbacks.navigate(R.id.action_appSettingsFragment_to_remoteBackupsSettingsFragment)
}
)
Dividers.Default()
}
}
BackupFailureState.NONE -> Unit
}
item {
@@ -467,6 +465,36 @@ private fun AppSettingsContent(
}
}
@Composable
private fun BackupsWarningRow(
text: String,
onClick: () -> Unit
) {
Rows.TextRow(
text = {
Text(text = text)
},
icon = {
Box {
Icon(
painter = painterResource(R.drawable.symbol_backup_24),
tint = MaterialTheme.colorScheme.onSurface,
contentDescription = null
)
Box(
modifier = Modifier
.absoluteOffset(3.dp, (-2).dp)
.background(color = Color(0xFFFFCC00), shape = CircleShape)
.size(12.dp)
.align(Alignment.TopEnd)
)
}
},
onClick = onClick
)
}
@Composable
private fun BioRow(
self: BioRecipientState,

View File

@@ -6,6 +6,7 @@ import androidx.lifecycle.map
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import io.reactivex.rxjava3.kotlin.subscribeBy
import org.thoughtcrime.securesms.backup.v2.BackupRepository
import org.thoughtcrime.securesms.components.settings.app.subscription.InAppDonations
import org.thoughtcrime.securesms.components.settings.app.subscription.RecurringInAppPaymentRepository
import org.thoughtcrime.securesms.conversationlist.model.UnreadPaymentsLiveData
@@ -70,7 +71,9 @@ class AppSettingsViewModel : ViewModel() {
}
private fun getBackupFailureState(): BackupFailureState {
return if (SignalStore.backup.subscriptionStateMismatchDetected) {
return if (BackupRepository.shouldDisplayBackupFailedSettingsRow()) {
BackupFailureState.COULD_NOT_COMPLETE_BACKUP
} else if (SignalStore.backup.subscriptionStateMismatchDetected) {
BackupFailureState.SUBSCRIPTION_STATE_MISMATCH
} else {
BackupFailureState.NONE

View File

@@ -10,5 +10,6 @@ package org.thoughtcrime.securesms.components.settings.app
*/
enum class BackupFailureState {
NONE,
COULD_NOT_COMPLETE_BACKUP,
SUBSCRIPTION_STATE_MISMATCH
}

View File

@@ -28,6 +28,7 @@ import org.signal.donations.InAppPaymentType
import org.thoughtcrime.securesms.backup.v2.BackupFrequency
import org.thoughtcrime.securesms.backup.v2.BackupRepository
import org.thoughtcrime.securesms.backup.v2.MessageBackupTier
import org.thoughtcrime.securesms.backup.v2.ui.status.BackupStatusData
import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsType
import org.thoughtcrime.securesms.banner.banners.MediaRestoreProgressBanner
import org.thoughtcrime.securesms.components.settings.app.subscription.DonationSerializationHelper.toFiatMoney
@@ -90,6 +91,8 @@ class RemoteBackupsSettingsViewModel : ViewModel() {
}
} else if (SignalStore.backup.totalRestorableAttachmentSize > 0L) {
_restoreState.update { BackupRestoreState.Ready(SignalStore.backup.totalRestorableAttachmentSize.bytes.toUnitString()) }
} else if (BackupRepository.shouldDisplayBackupFailedSettingsRow()) {
_restoreState.update { BackupRestoreState.FromBackupStatusData(BackupStatusData.CouldNotCompleteBackup) }
} else {
_restoreState.update { BackupRestoreState.None }
}