From 35b80be8c80679b79025953d5991e01c34c6acae Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Wed, 6 Nov 2024 12:46:41 -0400 Subject: [PATCH] Pass in days since last backup to alert sheet. --- .../backup/v2/ui/BackupAlertBottomSheet.kt | 35 ++++++++++++------- .../backup/v2/ui/BackupAlertDelegate.kt | 3 +- .../InAppPaymentsBottomSheetDelegate.kt | 2 +- .../securesms/keyvalue/BackupValues.kt | 2 ++ 4 files changed, 27 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/BackupAlertBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/BackupAlertBottomSheet.kt index 699cf15b56..ffa96440c7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/BackupAlertBottomSheet.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/BackupAlertBottomSheet.kt @@ -5,6 +5,7 @@ package org.thoughtcrime.securesms.backup.v2.ui +import android.content.DialogInterface import android.os.Parcelable import androidx.appcompat.app.AlertDialog import androidx.compose.foundation.Image @@ -97,7 +98,7 @@ class BackupAlertBottomSheet : ComposeBottomSheetDialogFragment() { @Stable private fun performPrimaryAction() { when (backupAlert) { - BackupAlert.CouldNotCompleteBackup -> { + is BackupAlert.CouldNotCompleteBackup -> { BackupMessagesJob.enqueue() startActivity(AppSettingsActivity.remoteBackups(requireContext())) } @@ -116,10 +117,7 @@ class BackupAlertBottomSheet : ComposeBottomSheetDialogFragment() { @Stable private fun performSecondaryAction() { when (backupAlert) { - BackupAlert.CouldNotCompleteBackup -> { - // TODO [backups] - Dismiss and notify later - } - + is BackupAlert.CouldNotCompleteBackup -> Unit BackupAlert.FailedToRenew -> Unit BackupAlert.MediaBackupsAreOff -> { // TODO [backups] - Silence and remind on last day @@ -137,6 +135,15 @@ class BackupAlertBottomSheet : ComposeBottomSheetDialogFragment() { dismissAllowingStateLoss() } + override fun onDismiss(dialog: DialogInterface) { + super.onDismiss(dialog) + + when (backupAlert) { + is BackupAlert.CouldNotCompleteBackup -> BackupRepository.markBackupFailedSheetDismissed() + else -> Unit + } + } + private fun displayLastChanceDialog() { MaterialAlertDialogBuilder(requireContext()) .setTitle(R.string.BackupAlertBottomSheet__media_will_be_deleted) @@ -229,8 +236,8 @@ private fun BackupAlertSheetContent( ) when (backupAlert) { - BackupAlert.CouldNotCompleteBackup -> CouldNotCompleteBackup( - daysSinceLastBackup = 7 // TODO [backups] + is BackupAlert.CouldNotCompleteBackup -> CouldNotCompleteBackup( + daysSinceLastBackup = backupAlert.daysSinceLastBackup ) BackupAlert.FailedToRenew -> PaymentProcessingBody() @@ -339,7 +346,7 @@ private fun rememberBackupsIconColors(backupAlert: BackupAlert): BackupsIconColo return remember(backupAlert) { when (backupAlert) { BackupAlert.FailedToRenew, BackupAlert.MediaBackupsAreOff -> error("Not icon-based options.") - BackupAlert.CouldNotCompleteBackup, is BackupAlert.DiskFull -> BackupsIconColors.Warning + is BackupAlert.CouldNotCompleteBackup, is BackupAlert.DiskFull -> BackupsIconColors.Warning BackupAlert.MediaWillBeDeletedToday -> BackupsIconColors.Error } } @@ -348,7 +355,7 @@ private fun rememberBackupsIconColors(backupAlert: BackupAlert): BackupsIconColo @Composable private fun titleString(backupAlert: BackupAlert): String { return when (backupAlert) { - BackupAlert.CouldNotCompleteBackup -> stringResource(R.string.BackupAlertBottomSheet__couldnt_complete_backup) + is BackupAlert.CouldNotCompleteBackup -> stringResource(R.string.BackupAlertBottomSheet__couldnt_complete_backup) BackupAlert.FailedToRenew -> stringResource(R.string.BackupAlertBottomSheet__your_backups_subscription_failed_to_renew) BackupAlert.MediaBackupsAreOff -> stringResource(R.string.BackupAlertBottomSheet__your_backups_subscription_expired) BackupAlert.MediaWillBeDeletedToday -> stringResource(R.string.BackupAlertBottomSheet__your_media_will_be_deleted_today) @@ -362,7 +369,7 @@ private fun primaryActionString( pricePerMonth: String ): String { return when (backupAlert) { - BackupAlert.CouldNotCompleteBackup -> stringResource(R.string.BackupAlertBottomSheet__back_up_now) + is BackupAlert.CouldNotCompleteBackup -> stringResource(R.string.BackupAlertBottomSheet__back_up_now) BackupAlert.FailedToRenew -> stringResource(R.string.BackupAlertBottomSheet__manage_subscription) BackupAlert.MediaBackupsAreOff -> stringResource(R.string.BackupAlertBottomSheet__subscribe_for_s_month, pricePerMonth) BackupAlert.MediaWillBeDeletedToday -> stringResource(R.string.BackupAlertBottomSheet__download_media_now) @@ -374,7 +381,7 @@ private fun primaryActionString( private fun rememberSecondaryActionResource(backupAlert: BackupAlert): Int { return remember(backupAlert) { when (backupAlert) { - BackupAlert.CouldNotCompleteBackup -> R.string.BackupAlertBottomSheet__try_later + is BackupAlert.CouldNotCompleteBackup -> R.string.BackupAlertBottomSheet__try_later BackupAlert.FailedToRenew -> R.string.BackupAlertBottomSheet__not_now BackupAlert.MediaBackupsAreOff -> R.string.BackupAlertBottomSheet__not_now BackupAlert.MediaWillBeDeletedToday -> R.string.BackupAlertBottomSheet__dont_download_media @@ -388,7 +395,7 @@ private fun rememberSecondaryActionResource(backupAlert: BackupAlert): Int { private fun BackupAlertSheetContentPreviewGeneric() { Previews.BottomSheetPreview { BackupAlertSheetContent( - backupAlert = BackupAlert.CouldNotCompleteBackup + backupAlert = BackupAlert.CouldNotCompleteBackup(daysSinceLastBackup = 7) ) } } @@ -440,7 +447,9 @@ private fun BackupAlertSheetContentPreviewDiskFull() { @Parcelize sealed class BackupAlert : Parcelable { - data object CouldNotCompleteBackup : BackupAlert() + data class CouldNotCompleteBackup( + val daysSinceLastBackup: Int + ) : BackupAlert() data object FailedToRenew : BackupAlert() diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/BackupAlertDelegate.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/BackupAlertDelegate.kt index fccba6773b..7076f16386 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/BackupAlertDelegate.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/BackupAlertDelegate.kt @@ -11,6 +11,7 @@ import androidx.lifecycle.coroutineScope import androidx.lifecycle.repeatOnLifecycle import kotlinx.coroutines.launch import org.thoughtcrime.securesms.backup.v2.BackupRepository +import org.thoughtcrime.securesms.keyvalue.SignalStore /** * Delegate that controls whether and which backup alert sheet is displayed. @@ -21,7 +22,7 @@ object BackupAlertDelegate { lifecycle.coroutineScope.launch { lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED) { if (BackupRepository.shouldDisplayBackupFailedSheet()) { - BackupAlertBottomSheet.create(BackupAlert.CouldNotCompleteBackup).show(fragmentManager, null) + BackupAlertBottomSheet.create(BackupAlert.CouldNotCompleteBackup(daysSinceLastBackup = SignalStore.backup.daysSinceLastBackup)).show(fragmentManager, null) } // TODO [backups] diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/completed/InAppPaymentsBottomSheetDelegate.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/completed/InAppPaymentsBottomSheetDelegate.kt index d846a2e492..25be2682f3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/completed/InAppPaymentsBottomSheetDelegate.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/completed/InAppPaymentsBottomSheetDelegate.kt @@ -134,7 +134,7 @@ class InAppPaymentsBottomSheetDelegate( }.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribeBy { inAppPayments -> for (payment in inAppPayments) { if (isPaymentProcessingError(payment.state, payment.data)) { - BackupAlertBottomSheet.create(BackupAlert.CouldNotCompleteBackup).show(fragmentManager, null) + BackupAlertBottomSheet.create(BackupAlert.CouldNotCompleteBackup(daysSinceLastBackup = SignalStore.backup.daysSinceLastBackup)).show(fragmentManager, null) } else if (isUnexpectedCancellation(payment.state, payment.data)) { BackupAlertBottomSheet.create(BackupAlert.MediaBackupsAreOff).show(fragmentManager, null) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt index 9295a148be..9320355b1c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt @@ -84,6 +84,8 @@ class BackupValues(store: KeyValueStore) : SignalStoreValues(store) { clearMessageBackupFailureSheetWatermark() } + val daysSinceLastBackup: Int get() = (System.currentTimeMillis().milliseconds - lastBackupTime.milliseconds).inWholeDays.toInt() + var lastMediaSyncTime: Long by longValue(KEY_LAST_BACKUP_MEDIA_SYNC_TIME, -1) var backupFrequency: BackupFrequency by enumValue(KEY_BACKUP_FREQUENCY, BackupFrequency.MANUAL, BackupFrequency.Serializer)