mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-25 19:29:54 +01:00
Add optimize storage infrastructure for backupsv2.
This commit is contained in:
@@ -383,7 +383,7 @@ class InternalBackupPlaygroundViewModel : ViewModel() {
|
||||
)
|
||||
} else {
|
||||
AppDependencies.jobManager.add(
|
||||
RestoreAttachmentJob(
|
||||
RestoreAttachmentJob.forInitialRestore(
|
||||
messageId = insertMessage.messageId,
|
||||
attachmentId = archivedAttachment.attachmentId
|
||||
)
|
||||
|
||||
@@ -106,11 +106,11 @@ class ManageStorageSettingsFragment : ComposeFragment() {
|
||||
onSetChatLengthLimit = { navController.navigate("set-chat-length-limit") },
|
||||
onSyncTrimThreadDeletes = { viewModel.setSyncTrimDeletes(it) },
|
||||
onDeleteChatHistory = { navController.navigate("confirm-delete-chat-history") },
|
||||
onToggleOnDeviceStorageOptimization = {
|
||||
onToggleOnDeviceStorageOptimization = { enabled ->
|
||||
if (state.onDeviceStorageOptimizationState == ManageStorageSettingsViewModel.OnDeviceStorageOptimizationState.REQUIRES_PAID_TIER) {
|
||||
UpgradeToEnableOptimizedStorageSheet().show(parentFragmentManager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG)
|
||||
} else {
|
||||
viewModel.setOptimizeStorage(it)
|
||||
viewModel.setOptimizeStorage(enabled)
|
||||
}
|
||||
}
|
||||
)
|
||||
@@ -535,6 +535,7 @@ private fun ManageStorageSettingsScreenPreview() {
|
||||
state = ManageStorageSettingsViewModel.ManageStorageState(
|
||||
keepMessagesDuration = KeepMessagesDuration.FOREVER,
|
||||
lengthLimit = ManageStorageSettingsViewModel.ManageStorageState.NO_LIMIT,
|
||||
syncTrimDeletes = true,
|
||||
onDeviceStorageOptimizationState = ManageStorageSettingsViewModel.OnDeviceStorageOptimizationState.DISABLED
|
||||
)
|
||||
)
|
||||
|
||||
@@ -19,6 +19,8 @@ import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase.Companion.media
|
||||
import org.thoughtcrime.securesms.database.ThreadTable
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies
|
||||
import org.thoughtcrime.securesms.jobs.OptimizeMediaJob
|
||||
import org.thoughtcrime.securesms.jobs.RestoreOptimizedMediaJob
|
||||
import org.thoughtcrime.securesms.keyvalue.KeepMessagesDuration
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.util.RemoteConfig
|
||||
@@ -95,7 +97,12 @@ class ManageStorageSettingsViewModel : ViewModel() {
|
||||
val storageState = getOnDeviceStorageOptimizationState()
|
||||
if (storageState >= OnDeviceStorageOptimizationState.DISABLED) {
|
||||
SignalStore.backup.optimizeStorage = enabled
|
||||
store.update { it.copy(onDeviceStorageOptimizationState = if (enabled) OnDeviceStorageOptimizationState.ENABLED else OnDeviceStorageOptimizationState.DISABLED) }
|
||||
store.update {
|
||||
it.copy(
|
||||
onDeviceStorageOptimizationState = if (enabled) OnDeviceStorageOptimizationState.ENABLED else OnDeviceStorageOptimizationState.DISABLED,
|
||||
storageOptimizationStateChanged = true
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,6 +119,16 @@ class ManageStorageSettingsViewModel : ViewModel() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
if (state.value.storageOptimizationStateChanged) {
|
||||
when (state.value.onDeviceStorageOptimizationState) {
|
||||
OnDeviceStorageOptimizationState.DISABLED -> RestoreOptimizedMediaJob.enqueue()
|
||||
OnDeviceStorageOptimizationState.ENABLED -> OptimizeMediaJob.enqueue()
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum class OnDeviceStorageOptimizationState {
|
||||
/**
|
||||
* The entire feature is not available and the option should not be displayed to the user.
|
||||
@@ -136,11 +153,12 @@ class ManageStorageSettingsViewModel : ViewModel() {
|
||||
|
||||
@Immutable
|
||||
data class ManageStorageState(
|
||||
val keepMessagesDuration: KeepMessagesDuration = KeepMessagesDuration.FOREVER,
|
||||
val lengthLimit: Int = NO_LIMIT,
|
||||
val syncTrimDeletes: Boolean = true,
|
||||
val keepMessagesDuration: KeepMessagesDuration,
|
||||
val lengthLimit: Int,
|
||||
val syncTrimDeletes: Boolean,
|
||||
val breakdown: MediaTable.StorageBreakdown? = null,
|
||||
val onDeviceStorageOptimizationState: OnDeviceStorageOptimizationState
|
||||
val onDeviceStorageOptimizationState: OnDeviceStorageOptimizationState,
|
||||
val storageOptimizationStateChanged: Boolean = false
|
||||
) {
|
||||
companion object {
|
||||
const val NO_LIMIT = 0
|
||||
|
||||
Reference in New Issue
Block a user