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 4868a2a4ff..2571f2c2b5 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 @@ -836,7 +836,7 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter AdvancedPrivacySettingsRepository.DisablePushMessagesResult.SUCCESS -> { SignalStore.account.setRegistered(false) SignalStore.registration.clearRegistrationComplete() - SignalStore.registration.clearHasUploadedProfile() + SignalStore.registration.hasUploadedProfile = false SignalStore.registration.debugClearSkippedTransferOrRestore() Toast.makeText(context, "Unregistered!", Toast.LENGTH_SHORT).show() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/newdevice/NewDeviceTransferViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/newdevice/NewDeviceTransferViewModel.kt index b745654053..fab0b6961b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/newdevice/NewDeviceTransferViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/newdevice/NewDeviceTransferViewModel.kt @@ -20,7 +20,7 @@ class NewDeviceTransferViewModel : ViewModel() { viewModelScope.launch { SignalStore.registration.localRegistrationMetadata?.let { metadata -> RegistrationRepository.registerAccountLocally(context, metadata) - SignalStore.registration.clearLocalRegistrationMetadata() + SignalStore.registration.localRegistrationMetadata = null RegistrationUtil.maybeMarkRegistrationComplete() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AccountConsistencyWorkerJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/AccountConsistencyWorkerJob.kt index 3f1b9a2ad1..c18d7a5e3c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AccountConsistencyWorkerJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AccountConsistencyWorkerJob.kt @@ -64,7 +64,7 @@ class AccountConsistencyWorkerJob private constructor(parameters: Parameters) : SignalStore.account.setRegistered(false) SignalStore.registration.clearRegistrationComplete() - SignalStore.registration.clearHasUploadedProfile() + SignalStore.registration.hasUploadedProfile = false SignalStore.misc.lastConsistencyCheckTime = System.currentTimeMillis() return @@ -78,7 +78,7 @@ class AccountConsistencyWorkerJob private constructor(parameters: Parameters) : SignalStore.account.setRegistered(false) SignalStore.registration.clearRegistrationComplete() - SignalStore.registration.clearHasUploadedProfile() + SignalStore.registration.hasUploadedProfile = false return } diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/LocalRegistrationMetadataSerializer.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/LocalRegistrationMetadataSerializer.kt deleted file mode 100644 index 9106bc20cc..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/LocalRegistrationMetadataSerializer.kt +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2024 Signal Messenger, LLC - * SPDX-License-Identifier: AGPL-3.0-only - */ - -package org.thoughtcrime.securesms.keyvalue - -import org.signal.core.util.ByteSerializer -import org.thoughtcrime.securesms.database.model.databaseprotos.LocalRegistrationMetadata - -/** - * Serialize [LocalRegistrationMetadata] - */ -object LocalRegistrationMetadataSerializer : ByteSerializer { - override fun serialize(data: LocalRegistrationMetadata): ByteArray = data.encode() - override fun deserialize(data: ByteArray): LocalRegistrationMetadata = LocalRegistrationMetadata.ADAPTER.decode(data) -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/RegistrationValues.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/RegistrationValues.java deleted file mode 100644 index 22959c07f6..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/RegistrationValues.java +++ /dev/null @@ -1,124 +0,0 @@ -package org.thoughtcrime.securesms.keyvalue; - -import androidx.annotation.CheckResult; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import org.thoughtcrime.securesms.database.model.databaseprotos.LocalRegistrationMetadata; - -import java.util.Collections; -import java.util.List; - -public final class RegistrationValues extends SignalStoreValues { - - private static final String REGISTRATION_COMPLETE = "registration.complete"; - private static final String PIN_REQUIRED = "registration.pin_required"; - private static final String HAS_UPLOADED_PROFILE = "registration.has_uploaded_profile"; - private static final String SESSION_E164 = "registration.session_e164"; - private static final String SESSION_ID = "registration.session_id"; - private static final String SKIPPED_TRANSFER_OR_RESTORE = "registration.has_skipped_transfer_or_restore"; - private static final String LOCAL_REGISTRATION_DATA = "registration.local_registration_data"; - private static final String RESTORE_COMPLETED = "registration.backup_restore_completed"; - - RegistrationValues(@NonNull KeyValueStore store) { - super(store); - } - - public synchronized void onFirstEverAppLaunch() { - getStore().beginWrite() - .putBoolean(HAS_UPLOADED_PROFILE, false) - .putBoolean(REGISTRATION_COMPLETE, false) - .putBoolean(PIN_REQUIRED, true) - .putBoolean(SKIPPED_TRANSFER_OR_RESTORE, false) - .commit(); - } - - @Override - @NonNull List getKeysToIncludeInBackup() { - return Collections.emptyList(); - } - - public synchronized void clearRegistrationComplete() { - onFirstEverAppLaunch(); - } - - public synchronized void setRegistrationComplete() { - getStore().beginWrite() - .putBoolean(REGISTRATION_COMPLETE, true) - .commit(); - } - - @CheckResult - public synchronized boolean pinWasRequiredAtRegistration() { - return getStore().getBoolean(PIN_REQUIRED, false); - } - - @CheckResult - public synchronized boolean isRegistrationComplete() { - return getStore().getBoolean(REGISTRATION_COMPLETE, true); - } - - - public void setLocalRegistrationMetadata(LocalRegistrationMetadata data) { - putObject(LOCAL_REGISTRATION_DATA, data, LocalRegistrationMetadataSerializer.INSTANCE); - } - - @Nullable - public LocalRegistrationMetadata getLocalRegistrationMetadata() { - return getObject(LOCAL_REGISTRATION_DATA, null, LocalRegistrationMetadataSerializer.INSTANCE); - } - - public void clearLocalRegistrationMetadata() { - remove(LOCAL_REGISTRATION_DATA); - } - - public boolean hasUploadedProfile() { - return getBoolean(HAS_UPLOADED_PROFILE, true); - } - - public void markHasUploadedProfile() { - putBoolean(HAS_UPLOADED_PROFILE, true); - } - - public void clearHasUploadedProfile() { - putBoolean(HAS_UPLOADED_PROFILE, false); - } - - public void setSessionId(String sessionId) { - putString(SESSION_ID, sessionId); - } - - public boolean hasSkippedTransferOrRestore() { - return getBoolean(SKIPPED_TRANSFER_OR_RESTORE, false); - } - - public void markSkippedTransferOrRestore() { - putBoolean(SKIPPED_TRANSFER_OR_RESTORE, true); - } - - public void debugClearSkippedTransferOrRestore() { - putBoolean(SKIPPED_TRANSFER_OR_RESTORE, false); - } - - @Nullable - public String getSessionId() { - return getString(SESSION_ID, null); - } - - public void setSessionE164(String sessionE164) { - putString(SESSION_E164, sessionE164); - } - - @Nullable - public String getSessionE164() { - return getString(SESSION_E164, null); - } - - public boolean hasCompletedRestore() { - return getBoolean(RESTORE_COMPLETED, false); - } - - public void markRestoreCompleted() { - putBoolean(RESTORE_COMPLETED, true); - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/RegistrationValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/RegistrationValues.kt new file mode 100644 index 0000000000..f2694c620e --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/RegistrationValues.kt @@ -0,0 +1,81 @@ +package org.thoughtcrime.securesms.keyvalue + +import androidx.annotation.CheckResult +import org.thoughtcrime.securesms.database.model.databaseprotos.LocalRegistrationMetadata + +class RegistrationValues internal constructor(store: KeyValueStore) : SignalStoreValues(store) { + + companion object { + private const val REGISTRATION_COMPLETE = "registration.complete" + private const val PIN_REQUIRED = "registration.pin_required" + private const val HAS_UPLOADED_PROFILE = "registration.has_uploaded_profile" + private const val SESSION_E164 = "registration.session_e164" + private const val SESSION_ID = "registration.session_id" + private const val SKIPPED_TRANSFER_OR_RESTORE = "registration.has_skipped_transfer_or_restore" + private const val LOCAL_REGISTRATION_DATA = "registration.local_registration_data" + private const val RESTORE_COMPLETED = "registration.backup_restore_completed" + } + + @Synchronized + public override fun onFirstEverAppLaunch() { + store + .beginWrite() + .putBoolean(HAS_UPLOADED_PROFILE, false) + .putBoolean(REGISTRATION_COMPLETE, false) + .putBoolean(PIN_REQUIRED, true) + .putBoolean(SKIPPED_TRANSFER_OR_RESTORE, false) + .commit() + } + + public override fun getKeysToIncludeInBackup(): List = emptyList() + + @Synchronized + fun clearRegistrationComplete() { + onFirstEverAppLaunch() + } + + @Synchronized + fun markRegistrationComplete() { + store + .beginWrite() + .putBoolean(REGISTRATION_COMPLETE, true) + .commit() + } + + @CheckResult + @Synchronized + fun pinWasRequiredAtRegistration(): Boolean { + return store.getBoolean(PIN_REQUIRED, false) + } + + @get:Synchronized + @get:CheckResult + val isRegistrationComplete: Boolean by booleanValue(REGISTRATION_COMPLETE, true) + + var localRegistrationMetadata: LocalRegistrationMetadata? by protoValue(LOCAL_REGISTRATION_DATA, LocalRegistrationMetadata.ADAPTER) + + @get:JvmName("hasUploadedProfile") + var hasUploadedProfile: Boolean by booleanValue(HAS_UPLOADED_PROFILE, true) + var sessionId: String? by stringValue(SESSION_ID, null) + var sessionE164: String? by stringValue(SESSION_E164, null) + + fun hasSkippedTransferOrRestore(): Boolean { + return getBoolean(SKIPPED_TRANSFER_OR_RESTORE, false) + } + + fun markSkippedTransferOrRestore() { + putBoolean(SKIPPED_TRANSFER_OR_RESTORE, true) + } + + fun debugClearSkippedTransferOrRestore() { + putBoolean(SKIPPED_TRANSFER_OR_RESTORE, false) + } + + fun hasCompletedRestore(): Boolean { + return getBoolean(RESTORE_COMPLETED, false) + } + + fun markRestoreCompleted() { + putBoolean(RESTORE_COMPLETED, true) + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/util/RegistrationUtil.java b/app/src/main/java/org/thoughtcrime/securesms/registration/util/RegistrationUtil.java index 3512214778..530e201dd0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/util/RegistrationUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/util/RegistrationUtil.java @@ -34,8 +34,8 @@ public final class RegistrationUtil { (RemoteConfig.restoreAfterRegistration() && (SignalStore.registration().hasSkippedTransferOrRestore() || SignalStore.registration().hasCompletedRestore()))) { Log.i(TAG, "Marking registration completed.", new Throwable()); - SignalStore.registration().setRegistrationComplete(); - SignalStore.registration().clearLocalRegistrationMetadata(); + SignalStore.registration().markRegistrationComplete(); + SignalStore.registration().setLocalRegistrationMetadata(null); if (SignalStore.phoneNumberPrivacy().getPhoneNumberDiscoverabilityMode() == PhoneNumberDiscoverabilityMode.UNDECIDED) { Log.w(TAG, "Phone number discoverability mode is still UNDECIDED. Setting to DISCOVERABLE."); diff --git a/app/src/main/java/org/thoughtcrime/securesms/restore/restorelocalbackup/RestoreLocalBackupViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/restore/restorelocalbackup/RestoreLocalBackupViewModel.kt index db358d1e8c..03673def0b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/restore/restorelocalbackup/RestoreLocalBackupViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/restore/restorelocalbackup/RestoreLocalBackupViewModel.kt @@ -90,7 +90,7 @@ class RestoreLocalBackupViewModel(fileBackupUri: Uri) : ViewModel() { if (importResult == RestoreRepository.BackupImportResult.SUCCESS) { SignalStore.registration.localRegistrationMetadata?.let { RegistrationRepository.registerAccountLocally(context, it) - SignalStore.registration.clearLocalRegistrationMetadata() + SignalStore.registration.localRegistrationMetadata = null RegistrationUtil.maybeMarkRegistrationComplete() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java index f34781d546..aa711fb594 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java @@ -376,7 +376,7 @@ public final class ProfileUtil { avatar, badgeIds, SignalStore.phoneNumberPrivacy().isPhoneNumberSharingEnabled()).orElse(null); - SignalStore.registration().markHasUploadedProfile(); + SignalStore.registration().setHasUploadedProfile(true); if (!avatar.keepTheSame) { SignalDatabase.recipients().setProfileAvatar(Recipient.self().getId(), avatarPath); }