Fix backup message job cancel and start bugs.

This commit is contained in:
Cody Henthorne
2025-07-16 14:21:59 -04:00
committed by GitHub
parent 141faf3fb6
commit 8ee80b0d27
11 changed files with 135 additions and 17 deletions

View File

@@ -511,6 +511,7 @@ private fun RemoteBackupsSettingsContent(
canViewBackupKey = state.canViewBackupKey,
backupRestoreState = backupRestoreState,
backupProgress = backupProgress,
canBackupMessagesRun = state.canBackupMessagesJobRun,
lastBackupTimestamp = state.lastBackupTimestamp,
backupMediaSize = state.backupMediaSize,
backupsFrequency = state.backupsFrequency,
@@ -815,6 +816,7 @@ private fun LazyListScope.appendBackupDetailsItems(
canViewBackupKey: Boolean,
backupRestoreState: BackupRestoreState,
backupProgress: ArchiveUploadProgressState?,
canBackupMessagesRun: Boolean,
lastBackupTimestamp: Long,
backupMediaSize: Long,
backupsFrequency: BackupFrequency,
@@ -868,6 +870,8 @@ private fun LazyListScope.appendBackupDetailsItems(
item {
InProgressBackupRow(
archiveUploadProgressState = backupProgress,
canBackupMessagesRun = canBackupMessagesRun,
canBackupUsingCellular = canBackUpUsingCellular,
cancelArchiveUpload = contentCallbacks::onCancelUploadClick
)
}
@@ -1326,6 +1330,8 @@ private fun SubscriptionMismatchMissingGooglePlayCard(
@Composable
private fun InProgressBackupRow(
archiveUploadProgressState: ArchiveUploadProgressState,
canBackupMessagesRun: Boolean = true,
canBackupUsingCellular: Boolean = true,
cancelArchiveUpload: () -> Unit = {}
) {
Row(
@@ -1361,7 +1367,7 @@ private fun InProgressBackupRow(
}
Text(
text = getProgressStateMessage(archiveUploadProgressState),
text = getProgressStateMessage(archiveUploadProgressState, canBackupMessagesRun, canBackupUsingCellular),
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant
)
@@ -1399,18 +1405,26 @@ private fun ArchiveProgressIndicator(
}
@Composable
private fun getProgressStateMessage(archiveUploadProgressState: ArchiveUploadProgressState): String {
private fun getProgressStateMessage(archiveUploadProgressState: ArchiveUploadProgressState, canBackupMessagesRun: Boolean, canBackupUsingCellular: Boolean): String {
return when (archiveUploadProgressState.state) {
ArchiveUploadProgressState.State.None, ArchiveUploadProgressState.State.UserCanceled -> stringResource(R.string.RemoteBackupsSettingsFragment__processing_backup)
ArchiveUploadProgressState.State.Export -> getBackupExportPhaseProgressString(archiveUploadProgressState)
ArchiveUploadProgressState.State.Export -> getBackupExportPhaseProgressString(archiveUploadProgressState, canBackupMessagesRun, canBackupUsingCellular)
ArchiveUploadProgressState.State.UploadBackupFile, ArchiveUploadProgressState.State.UploadMedia -> getBackupUploadPhaseProgressString(archiveUploadProgressState)
}
}
@Composable
private fun getBackupExportPhaseProgressString(state: ArchiveUploadProgressState): String {
private fun getBackupExportPhaseProgressString(state: ArchiveUploadProgressState, canBackupMessagesRun: Boolean, canBackupUsingCellular: Boolean): String {
return when (state.backupPhase) {
ArchiveUploadProgressState.BackupPhase.BackupPhaseNone -> stringResource(R.string.RemoteBackupsSettingsFragment__processing_backup)
ArchiveUploadProgressState.BackupPhase.BackupPhaseNone -> {
if (canBackupMessagesRun) {
stringResource(R.string.RemoteBackupsSettingsFragment__processing_backup)
} else if (canBackupUsingCellular) {
stringResource(R.string.RemoteBackupsSettingsFragment__Waiting_for_internet_connection)
} else {
stringResource(R.string.RemoteBackupsSettingsFragment__Waiting_for_Wifi)
}
}
ArchiveUploadProgressState.BackupPhase.Message -> {
pluralStringResource(
R.plurals.RemoteBackupsSettingsFragment__processing_messages_progress_text,

View File

@@ -27,7 +27,8 @@ data class RemoteBackupsSettingsState(
val lastBackupTimestamp: Long = 0,
val dialog: Dialog = Dialog.NONE,
val snackbar: Snackbar = Snackbar.NONE,
val includeDebuglog: Boolean? = null
val includeDebuglog: Boolean? = null,
val canBackupMessagesJobRun: Boolean = false
) {
enum class Dialog {

View File

@@ -39,6 +39,7 @@ import org.thoughtcrime.securesms.database.InAppPaymentTable
import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.database.attachmentUpdates
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.jobmanager.impl.BackupMessagesConstraint
import org.thoughtcrime.securesms.jobs.BackupMessagesJob
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.keyvalue.protos.ArchiveUploadProgressState
@@ -62,6 +63,7 @@ class RemoteBackupsSettingsViewModel : ViewModel() {
RemoteBackupsSettingsState(
tier = SignalStore.backup.backupTier,
backupsEnabled = SignalStore.backup.areBackupsEnabled,
canBackupMessagesJobRun = BackupMessagesConstraint.isMet(AppDependencies.application),
canViewBackupKey = !TextSecurePreferences.isUnauthorizedReceived(AppDependencies.application),
lastBackupTimestamp = SignalStore.backup.lastBackupTime,
backupsFrequency = SignalStore.backup.backupFrequency,
@@ -152,7 +154,12 @@ class RemoteBackupsSettingsViewModel : ViewModel() {
fun setCanBackUpUsingCellular(canBackUpUsingCellular: Boolean) {
SignalStore.backup.backupWithCellular = canBackUpUsingCellular
_state.update { it.copy(canBackUpUsingCellular = canBackUpUsingCellular) }
_state.update {
it.copy(
canBackupMessagesJobRun = BackupMessagesConstraint.isMet(AppDependencies.application),
canBackUpUsingCellular = canBackUpUsingCellular
)
}
}
fun setCanRestoreUsingCellular() {
@@ -257,6 +264,7 @@ class RemoteBackupsSettingsViewModel : ViewModel() {
tier = SignalStore.backup.backupTier,
backupsEnabled = SignalStore.backup.areBackupsEnabled,
lastBackupTimestamp = SignalStore.backup.lastBackupTime,
canBackupMessagesJobRun = BackupMessagesConstraint.isMet(AppDependencies.application),
backupMediaSize = SignalDatabase.attachments.getEstimatedArchiveMediaSize(),
backupsFrequency = SignalStore.backup.backupFrequency,
canBackUpUsingCellular = SignalStore.backup.backupWithCellular,