Resolve ANR when deleting local backup.

This commit is contained in:
Alex Hart
2026-03-16 10:06:12 -03:00
committed by Michelle Tang
parent 6ee14d5e7c
commit 6877b9163b
5 changed files with 25 additions and 9 deletions

View File

@@ -16,8 +16,6 @@ import com.google.android.material.timepicker.TimeFormat
import org.signal.core.ui.permissions.Permissions
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.jobs.LocalBackupJob
import org.thoughtcrime.securesms.jobs.LocalBackupJob.enqueueArchive
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.service.LocalBackupListener
@@ -144,11 +142,6 @@ class DefaultLocalBackupsSettingsCallback(
}
override fun onTurnOffAndDeleteConfirmed() {
SignalStore.backup.newLocalBackupsEnabled = false
val path = SignalStore.backup.newLocalBackupsDirectory
SignalStore.backup.newLocalBackupsDirectory = null
AppDependencies.jobManager.cancelAllInQueue(LocalBackupJob.QUEUE)
BackupUtil.deleteUnifiedBackups(fragment.requireContext(), path)
viewModel.turnOffAndDelete(fragment.requireContext())
}
}

View File

@@ -228,6 +228,10 @@ internal fun LocalBackupsSettingsScreen(
onDismiss = { showTurnOffAndDeleteDialog = false }
)
}
if (state.isDeleting) {
Dialogs.IndeterminateProgressDialog(message = stringResource(id = R.string.BackupDialog_deleting_local_backup))
}
}
@DayNightPreview

View File

@@ -18,5 +18,6 @@ data class LocalBackupsSettingsState(
val lastBackupLabel: String? = null,
val folderDisplayName: String? = null,
val scheduleTimeLabel: String? = null,
val progress: BackupCreationProgress = BackupCreationProgress.Idle
val progress: BackupCreationProgress = BackupCreationProgress.Idle,
val isDeleting: Boolean = false
)

View File

@@ -122,6 +122,22 @@ class LocalBackupsViewModel : ViewModel(), BackupKeyCredentialManagerHandler {
internalSettingsState.update { it.copy(progress = event.progress) }
}
fun turnOffAndDelete(context: Context) {
internalSettingsState.update { it.copy(isDeleting = true) }
viewModelScope.launch {
withContext(Dispatchers.IO) {
SignalStore.backup.newLocalBackupsEnabled = false
val path = SignalStore.backup.newLocalBackupsDirectory
SignalStore.backup.newLocalBackupsDirectory = null
AppDependencies.jobManager.cancelAllInQueue(LocalBackupJob.QUEUE)
BackupUtil.deleteUnifiedBackups(context, path)
}
internalSettingsState.update { it.copy(isDeleting = false) }
}
}
override fun updateBackupKeySaveState(newState: BackupKeySaveState?) {
internalBackupState.update { it.copy(keySaveState = newState) }
}

View File

@@ -4894,6 +4894,8 @@
<string name="BackupDialog_delete_backups">Delete backups?</string>
<string name="BackupDialog_disable_and_delete_all_local_backups">Disable and delete all local backups?</string>
<string name="BackupDialog_delete_backups_statement">Delete backups</string>
<!-- Progress dialog message shown while local backup files are being deleted -->
<string name="BackupDialog_deleting_local_backup">Deleting local backup…</string>
<string name="BackupDialog_to_enable_backups_choose_a_folder">To enable backups, choose a folder. Backups will be saved to this location.</string>
<!-- Button shown in dialog to choose a folder for backups -->
<string name="BackupDialog_choose_folder">Choose folder</string>