mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-22 18:00:02 +01:00
Add support for cancelling an in-progress archive upload.
Co-authored-by: Jeffrey Starke <jeffrey@signal.org>
This commit is contained in:
@@ -639,7 +639,7 @@ private fun LazyListScope.appendBackupDetailsItems(
|
||||
}
|
||||
}
|
||||
|
||||
if (backupProgress == null || backupProgress.state == ArchiveUploadProgressState.State.None) {
|
||||
if (backupProgress == null || backupProgress.state == ArchiveUploadProgressState.State.None || backupProgress.state == ArchiveUploadProgressState.State.UserCanceled) {
|
||||
item {
|
||||
LastBackupRow(
|
||||
lastBackupTimestamp = lastBackupTimestamp,
|
||||
@@ -1074,16 +1074,19 @@ private fun InProgressBackupRow(
|
||||
.padding(top = 16.dp, bottom = 14.dp)
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier.weight(1f),
|
||||
verticalArrangement = spacedBy(12.dp)
|
||||
modifier = Modifier.weight(1f)
|
||||
) {
|
||||
when (archiveUploadProgressState.state) {
|
||||
ArchiveUploadProgressState.State.None -> {
|
||||
ArchiveUploadProgressState.State.None, ArchiveUploadProgressState.State.UserCanceled -> {
|
||||
ArchiveProgressIndicator()
|
||||
}
|
||||
ArchiveUploadProgressState.State.Export -> {
|
||||
val progressValue by animateFloatAsState(targetValue = archiveUploadProgressState.frameExportProgress(), animationSpec = tween(durationMillis = 250))
|
||||
ArchiveProgressIndicator(progress = { progressValue })
|
||||
ArchiveProgressIndicator(
|
||||
progress = { progressValue },
|
||||
isCancelable = true,
|
||||
cancel = cancelArchiveUpload
|
||||
)
|
||||
}
|
||||
ArchiveUploadProgressState.State.UploadBackupFile, ArchiveUploadProgressState.State.UploadMedia -> {
|
||||
val progressValue by animateFloatAsState(targetValue = archiveUploadProgressState.uploadProgress(), animationSpec = tween(durationMillis = 250))
|
||||
@@ -1110,12 +1113,14 @@ private fun ArchiveProgressIndicator(
|
||||
isCancelable: Boolean = false,
|
||||
cancel: () -> Unit = {}
|
||||
) {
|
||||
Row {
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
LinearProgressIndicator(
|
||||
trackColor = MaterialTheme.colorScheme.secondaryContainer,
|
||||
progress = progress,
|
||||
drawStopIndicator = {},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
modifier = Modifier.weight(1f).padding(vertical = 12.dp)
|
||||
)
|
||||
|
||||
if (isCancelable) {
|
||||
@@ -1132,7 +1137,7 @@ private fun ArchiveProgressIndicator(
|
||||
@Composable
|
||||
private fun getProgressStateMessage(archiveUploadProgressState: ArchiveUploadProgressState): String {
|
||||
return when (archiveUploadProgressState.state) {
|
||||
ArchiveUploadProgressState.State.None -> stringResource(R.string.RemoteBackupsSettingsFragment__processing_backup)
|
||||
ArchiveUploadProgressState.State.None, ArchiveUploadProgressState.State.UserCanceled -> stringResource(R.string.RemoteBackupsSettingsFragment__processing_backup)
|
||||
ArchiveUploadProgressState.State.Export -> getBackupExportPhaseProgressString(archiveUploadProgressState)
|
||||
ArchiveUploadProgressState.State.UploadBackupFile, ArchiveUploadProgressState.State.UploadMedia -> getBackupUploadPhaseProgressString(archiveUploadProgressState)
|
||||
}
|
||||
@@ -1628,30 +1633,6 @@ private fun InProgressRowPreview() {
|
||||
backupPhase = ArchiveUploadProgressState.BackupPhase.Account
|
||||
)
|
||||
)
|
||||
InProgressBackupRow(
|
||||
archiveUploadProgressState = ArchiveUploadProgressState(
|
||||
state = ArchiveUploadProgressState.State.Export,
|
||||
backupPhase = ArchiveUploadProgressState.BackupPhase.Call
|
||||
)
|
||||
)
|
||||
InProgressBackupRow(
|
||||
archiveUploadProgressState = ArchiveUploadProgressState(
|
||||
state = ArchiveUploadProgressState.State.Export,
|
||||
backupPhase = ArchiveUploadProgressState.BackupPhase.Sticker
|
||||
)
|
||||
)
|
||||
InProgressBackupRow(
|
||||
archiveUploadProgressState = ArchiveUploadProgressState(
|
||||
state = ArchiveUploadProgressState.State.Export,
|
||||
backupPhase = ArchiveUploadProgressState.BackupPhase.Recipient
|
||||
)
|
||||
)
|
||||
InProgressBackupRow(
|
||||
archiveUploadProgressState = ArchiveUploadProgressState(
|
||||
state = ArchiveUploadProgressState.State.Export,
|
||||
backupPhase = ArchiveUploadProgressState.BackupPhase.Thread
|
||||
)
|
||||
)
|
||||
InProgressBackupRow(
|
||||
archiveUploadProgressState = ArchiveUploadProgressState(
|
||||
state = ArchiveUploadProgressState.State.Export,
|
||||
|
||||
@@ -214,7 +214,7 @@ class RemoteBackupsSettingsViewModel : ViewModel() {
|
||||
}
|
||||
|
||||
fun cancelUpload() {
|
||||
// TODO [message-backups] -- Perform cancel of media upload.
|
||||
ArchiveUploadProgress.cancel()
|
||||
}
|
||||
|
||||
private suspend fun refreshState(lastPurchase: InAppPaymentTable.InAppPayment?) {
|
||||
|
||||
@@ -31,6 +31,7 @@ import org.signal.core.util.stream.LimitedInputStream
|
||||
import org.signal.libsignal.zkgroup.profiles.ProfileKey
|
||||
import org.thoughtcrime.securesms.attachments.AttachmentId
|
||||
import org.thoughtcrime.securesms.attachments.DatabaseAttachment
|
||||
import org.thoughtcrime.securesms.backup.ArchiveUploadProgress
|
||||
import org.thoughtcrime.securesms.backup.v2.ArchiveValidator
|
||||
import org.thoughtcrime.securesms.backup.v2.BackupMetadata
|
||||
import org.thoughtcrime.securesms.backup.v2.BackupRepository
|
||||
@@ -46,7 +47,6 @@ import org.thoughtcrime.securesms.database.MessageType
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies
|
||||
import org.thoughtcrime.securesms.jobs.AttachmentUploadJob
|
||||
import org.thoughtcrime.securesms.jobs.BackfillDigestJob
|
||||
import org.thoughtcrime.securesms.jobs.BackupMessagesJob
|
||||
import org.thoughtcrime.securesms.jobs.BackupRestoreJob
|
||||
import org.thoughtcrime.securesms.jobs.BackupRestoreMediaJob
|
||||
@@ -218,10 +218,8 @@ class InternalBackupPlaygroundViewModel : ViewModel() {
|
||||
}
|
||||
|
||||
fun haltAllJobs() {
|
||||
AppDependencies.jobManager.cancelAllInQueue(BackfillDigestJob.QUEUE)
|
||||
AppDependencies.jobManager.cancelAllInQueue("ArchiveAttachmentJobs_0")
|
||||
AppDependencies.jobManager.cancelAllInQueue("ArchiveAttachmentJobs_1")
|
||||
AppDependencies.jobManager.cancelAllInQueue("ArchiveThumbnailUploadJob")
|
||||
ArchiveUploadProgress.cancel()
|
||||
|
||||
AppDependencies.jobManager.cancelAllInQueue("BackupRestoreJob")
|
||||
AppDependencies.jobManager.cancelAllInQueue("__LOCAL_BACKUP__")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user