diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt index c4fcad990f..274d4d5837 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt @@ -107,6 +107,15 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter sectionHeaderPref(R.string.preferences__internal_storage_service) + switchPref( + title = DSLSettingsText.from(R.string.preferences__internal_disable_storage_service), + summary = DSLSettingsText.from(R.string.preferences__internal_disable_storage_service_description), + isChecked = state.disableStorageService, + onClick = { + viewModel.setDisableStorageService(!state.disableStorageService) + } + ) + clickPref( title = DSLSettingsText.from(R.string.preferences__internal_force_storage_service_sync), summary = DSLSettingsText.from(R.string.preferences__internal_force_storage_service_sync_description), diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt index 416a154150..e17e9f5a77 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt @@ -17,4 +17,5 @@ data class InternalSettingsState( val emojiVersion: EmojiFiles.Version?, val removeSenderKeyMinimium: Boolean, val delayResends: Boolean, + val disableStorageService: Boolean, ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt index 7c57d8d61b..b026d8a1d1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt @@ -30,6 +30,11 @@ class InternalSettingsViewModel(private val repository: InternalSettingsReposito refresh() } + fun setDisableStorageService(enabled: Boolean) { + preferenceDataStore.putBoolean(InternalValues.DISABLE_STORAGE_SERVICE, enabled) + refresh() + } + fun setGv2DoNotCreateGv2Groups(enabled: Boolean) { preferenceDataStore.putBoolean(InternalValues.GV2_DO_NOT_CREATE_GV2, enabled) refresh() @@ -103,7 +108,8 @@ class InternalSettingsViewModel(private val repository: InternalSettingsReposito useBuiltInEmojiSet = SignalStore.internalValues().forceBuiltInEmoji(), emojiVersion = null, removeSenderKeyMinimium = SignalStore.internalValues().removeSenderKeyMinimum(), - delayResends = SignalStore.internalValues().delayResends() + delayResends = SignalStore.internalValues().delayResends(), + disableStorageService = SignalStore.internalValues().storageServiceDisabled() ) class Factory(private val repository: InternalSettingsRepository) : ViewModelProvider.Factory { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java index ee22ef846a..2b09adfae1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java @@ -171,6 +171,11 @@ public class StorageSyncJob extends BaseJob { return; } + if (SignalStore.internalValues().storageServiceDisabled()) { + Log.w(TAG, "Storage service has been manually disabled. Skipping."); + return; + } + try { boolean needsMultiDeviceSync = performSync(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java index dde99495b6..0f7aa0cfde 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java @@ -24,6 +24,7 @@ public final class InternalValues extends SignalStoreValues { public static final String DELAY_RESENDS = "internal.delay_resends"; public static final String CALLING_SERVER = "internal.calling_server"; public static final String SHAKE_TO_REPORT = "internal.shake_to_report"; + public static final String DISABLE_STORAGE_SERVICE = "internal.disable_storage_service"; InternalValues(KeyValueStore store) { super(store); @@ -131,6 +132,13 @@ public final class InternalValues extends SignalStoreValues { return FeatureFlags.internalUser() && getBoolean(SHAKE_TO_REPORT, true); } + /** + * Whether or not storage service is manually disabled. + */ + public synchronized boolean storageServiceDisabled() { + return FeatureFlags.internalUser() && getBoolean(DISABLE_STORAGE_SERVICE, false); + } + /** * The selected group calling server to use. *

diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fc7df1139a..7af81bb569 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2505,6 +2505,8 @@ Shake to Report Shake your phone to easily submit and share a debug log. Storage service + Disable syncing + Prevent syncing any data to/from storage service. Overwrite remote data Forces remote storage to match the local device state. Network