mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-23 18:30:20 +01:00
Add initial flag / watermark system for backup failure UX.
This commit is contained in:
committed by
Greyson Parrelli
parent
4446510916
commit
4282d88191
@@ -64,6 +64,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.net.SignalNetwork
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.util.RemoteConfig
|
||||
import org.thoughtcrime.securesms.util.toMillis
|
||||
import org.whispersystems.signalservice.api.NetworkResult
|
||||
import org.whispersystems.signalservice.api.StatusCodeErrorAction
|
||||
@@ -91,6 +92,7 @@ import java.io.OutputStream
|
||||
import java.time.ZonedDateTime
|
||||
import java.util.Locale
|
||||
import java.util.concurrent.atomic.AtomicLong
|
||||
import kotlin.time.Duration.Companion.days
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
|
||||
object BackupRepository {
|
||||
@@ -119,6 +121,64 @@ object BackupRepository {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the yellow dot should be displayed on the conversation list avatar.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun shouldDisplayBackupFailedIndicator(): Boolean {
|
||||
if (shouldNotDisplayBackupFailedMessaging() || !SignalStore.backup.hasBackupFailure) {
|
||||
return false
|
||||
}
|
||||
|
||||
val now = System.currentTimeMillis().milliseconds
|
||||
val alertAfter = SignalStore.backup.nextBackupFailureSnoozeTime
|
||||
|
||||
return alertAfter <= now
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the "Could not complete backup" row should be displayed in settings.
|
||||
*/
|
||||
fun shouldDisplayBackupFailedSettingsRow(): Boolean {
|
||||
if (shouldNotDisplayBackupFailedMessaging()) {
|
||||
return false
|
||||
}
|
||||
|
||||
return SignalStore.backup.hasBackupFailure
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the watermark for the indicator display.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun markBackupFailedIndicatorClicked() {
|
||||
SignalStore.backup.updateMessageBackupFailureWatermark()
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether or not the "Could not complete backup" sheet should be displayed.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun shouldDisplayBackupFailedSheet(): Boolean {
|
||||
if (shouldNotDisplayBackupFailedMessaging()) {
|
||||
return false
|
||||
}
|
||||
|
||||
val lastBackupTime = SignalStore.backup.lastBackupTime.milliseconds
|
||||
val isTimeoutElapsed = when (SignalStore.backup.backupFrequency) {
|
||||
BackupFrequency.DAILY -> lastBackupTime > 7.days
|
||||
BackupFrequency.WEEKLY -> lastBackupTime > 14.days
|
||||
BackupFrequency.MONTHLY -> lastBackupTime > 44.days
|
||||
BackupFrequency.MANUAL -> false
|
||||
}
|
||||
|
||||
return isTimeoutElapsed && false // TODO [backups] -- watermarking necessary, otherwise this'll show up on every resume.
|
||||
}
|
||||
|
||||
private fun shouldNotDisplayBackupFailedMessaging(): Boolean {
|
||||
return !RemoteConfig.messageBackups || !SignalStore.backup.areBackupsEnabled || !SignalStore.backup.hasBackupBeenUploaded
|
||||
}
|
||||
|
||||
/**
|
||||
* If the user is on a paid tier, this method will unsubscribe them from that tier.
|
||||
* It will then disable backups.
|
||||
|
||||
Reference in New Issue
Block a user