diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt index b17007b882..d78263f58e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt @@ -105,6 +105,20 @@ object BackupRepository { } } + @WorkerThread + fun canAccessRemoteBackupSettings(): Boolean { + // TODO [message-backups] + + // We need to check whether the user can access remote backup settings. + + // 1. Do they have a receipt they need to be able to view? + // 2. Do they have a backup they need to be able to manage? + + // The easy thing to do here would actually be to set a ui hint. + + return SignalStore.backup.areBackupsEnabled + } + @WorkerThread fun turnOffAndDeleteBackup() { RecurringInAppPaymentRepository.cancelActiveSubscriptionSync(InAppPaymentSubscriberRecord.Type.BACKUP) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsFragment.kt index a516587487..df0d427b4a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsFragment.kt @@ -84,12 +84,12 @@ class ChatsSettingsFragment : DSLSettingsFragment(R.string.preferences_chats__ch sectionHeaderPref(R.string.preferences_chats__backups) - if (RemoteConfig.messageBackups || state.remoteBackupsEnabled) { + if (RemoteConfig.messageBackups || state.canAccessRemoteBackupsSettings) { clickPref( title = DSLSettingsText.from(R.string.RemoteBackupsSettingsFragment__signal_backups), - summary = DSLSettingsText.from(if (state.remoteBackupsEnabled) R.string.arrays__enabled else R.string.arrays__disabled), + summary = DSLSettingsText.from(if (state.canAccessRemoteBackupsSettings) R.string.arrays__enabled else R.string.arrays__disabled), onClick = { - if (state.remoteBackupsEnabled) { + if (state.canAccessRemoteBackupsSettings) { Navigation.findNavController(requireView()).safeNavigate(R.id.action_chatsSettingsFragment_to_remoteBackupsSettingsFragment) } else { startActivity(CheckoutFlowActivity.createIntent(requireContext(), InAppPaymentType.RECURRING_BACKUP)) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsState.kt index 8429a69eb8..2f54a9a73f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsState.kt @@ -7,5 +7,5 @@ data class ChatsSettingsState( val useSystemEmoji: Boolean, val enterKeySends: Boolean, val localBackupsEnabled: Boolean, - val remoteBackupsEnabled: Boolean + val canAccessRemoteBackupsSettings: Boolean, ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsViewModel.kt index 3ec136e1f8..c0765af6a4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsViewModel.kt @@ -2,6 +2,11 @@ package org.thoughtcrime.securesms.components.settings.app.chats import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.core.Single +import io.reactivex.rxjava3.kotlin.subscribeBy +import io.reactivex.rxjava3.schedulers.Schedulers +import org.thoughtcrime.securesms.backup.v2.BackupRepository import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.util.BackupUtil @@ -23,12 +28,23 @@ class ChatsSettingsViewModel @JvmOverloads constructor( useSystemEmoji = SignalStore.settings.isPreferSystemEmoji, enterKeySends = SignalStore.settings.isEnterKeySends, localBackupsEnabled = SignalStore.settings.isBackupEnabled && BackupUtil.canUserAccessBackupDirectory(AppDependencies.application), - remoteBackupsEnabled = SignalStore.backup.areBackupsEnabled + canAccessRemoteBackupsSettings = SignalStore.backup.areBackupsEnabled ) ) val state: LiveData = store.stateLiveData + private val disposable = Single.fromCallable { BackupRepository.canAccessRemoteBackupSettings() } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeBy { canAccessRemoteBackupSettings -> + store.update { it.copy(canAccessRemoteBackupsSettings = canAccessRemoteBackupSettings) } + } + + override fun onCleared() { + disposable.dispose() + } + fun setGenerateLinkPreviewsEnabled(enabled: Boolean) { store.update { it.copy(generateLinkPreviews = enabled) } SignalStore.settings.isLinkPreviewsEnabled = enabled @@ -63,9 +79,9 @@ class ChatsSettingsViewModel @JvmOverloads constructor( val remoteBackupsEnabled = SignalStore.backup.areBackupsEnabled if (store.state.localBackupsEnabled != backupsEnabled || - store.state.remoteBackupsEnabled != remoteBackupsEnabled + store.state.canAccessRemoteBackupsSettings != remoteBackupsEnabled ) { - store.update { it.copy(localBackupsEnabled = backupsEnabled, remoteBackupsEnabled = remoteBackupsEnabled) } + store.update { it.copy(localBackupsEnabled = backupsEnabled, canAccessRemoteBackupsSettings = remoteBackupsEnabled) } } } }