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) }
}