From 148cf63a92f83c5cfadb72ed6ccf2c6fc114c598 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Wed, 10 Sep 2025 16:05:12 -0400 Subject: [PATCH] Fix bugs around showing 0 bytes for backup size. --- .../components/settings/app/backups/BackupState.kt | 8 +++++++- .../settings/app/backups/BackupStateObserver.kt | 4 ++-- .../settings/app/backups/BackupsSettingsFragment.kt | 4 ++-- .../app/backups/remote/RemoteBackupsSettingsFragment.kt | 2 +- .../app/backups/remote/RemoteBackupsSettingsViewModel.kt | 3 +-- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupState.kt index 70c9bc0cb7..20169134dc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupState.kt @@ -100,5 +100,11 @@ sealed interface BackupState { /** * An error occurred retrieving the network state */ - data object Error : BackupState + data class Error(val localState: BackupState) : BackupState + + fun isLikelyPaidTier(): Boolean { + return (this is WithTypeAndRenewalTime && this.messageBackupsType is MessageBackupsType.Paid) || + (this is LocalStore && this.tier == MessageBackupTier.PAID) || + (this is Error && this.localState.isLikelyPaidTier()) + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupStateObserver.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupStateObserver.kt index 320e59d57f..0d1d87f6b2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupStateObserver.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupStateObserver.kt @@ -121,7 +121,7 @@ class BackupStateObserver( scope.launch(SignalDispatchers.IO) { InternetConnectionObserver.observe().asFlow() .collect { - if (backupState.value == BackupState.Error) { + if (backupState.value is BackupState.Error) { requestBackupStateRefresh() } } @@ -347,7 +347,7 @@ class BackupStateObserver( getDatabaseBackupState() } else { Log.d(TAG, "[getStateOnError] Displaying error without database.") - BackupState.Error + BackupState.Error(getDatabaseBackupState()) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupsSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupsSettingsFragment.kt index 5723b894b2..93f8f9102c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupsSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupsSettingsFragment.kt @@ -88,7 +88,7 @@ class BackupsSettingsFragment : ComposeFragment() { onNavigationClick = { requireActivity().onNavigateUp() }, onBackupsRowClick = { when (state.backupState) { - BackupState.Error, BackupState.NotAvailable -> Unit + is BackupState.Error, BackupState.NotAvailable -> Unit BackupState.None -> { checkoutLauncher.launch(null) @@ -185,7 +185,7 @@ private fun BackupsSettingsContent( OtherWaysToBackUpHeading() } - BackupState.Error -> { + is BackupState.Error -> { WaitingForNetworkRow( onBackupsRowClick = onBackupsRowClick ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsFragment.kt index 14793e22ed..8b81da3808 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsFragment.kt @@ -907,7 +907,7 @@ private fun LazyListScope.appendBackupDetailsItems( } } - if (state.backupState !is BackupState.ActiveFree) { + if (state.backupState.isLikelyPaidTier()) { item { val sizeText = if (state.backupMediaSize < 0L) { stringResource(R.string.RemoteBackupsSettingsFragment__calculating) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsViewModel.kt index beccdcdf1f..ee9eebb2ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsViewModel.kt @@ -33,7 +33,6 @@ import org.thoughtcrime.securesms.backup.DeletionState import org.thoughtcrime.securesms.backup.v2.ArchiveRestoreProgress import org.thoughtcrime.securesms.backup.v2.ArchiveRestoreProgressState.RestoreStatus import org.thoughtcrime.securesms.backup.v2.BackupRepository -import org.thoughtcrime.securesms.backup.v2.MessageBackupTier import org.thoughtcrime.securesms.components.settings.app.backups.BackupStateObserver import org.thoughtcrime.securesms.components.settings.app.subscription.InAppPaymentsRepository import org.thoughtcrime.securesms.database.InAppPaymentTable @@ -321,7 +320,7 @@ class RemoteBackupsSettingsViewModel : ViewModel() { } private fun getBackupMediaSize(): Long { - return if (SignalStore.backup.backupTier == MessageBackupTier.PAID && SignalStore.backup.hasBackupBeenUploaded) { + return if (SignalStore.backup.hasBackupBeenUploaded || SignalStore.backup.lastBackupTime > 0L) { SignalDatabase.attachments.getEstimatedArchiveMediaSize() } else { 0L