Fix account inconsistency reset causing restore flow to show bug.

This commit is contained in:
Cody Henthorne
2025-11-04 10:55:16 -05:00
parent 6d5bb65c19
commit 2b2e3e1d02
4 changed files with 18 additions and 14 deletions

View File

@@ -44,7 +44,12 @@ class RegistrationValues internal constructor(store: KeyValueStore) : SignalStor
@Synchronized @Synchronized
fun clearRegistrationComplete() { fun clearRegistrationComplete() {
onFirstEverAppLaunch() store
.beginWrite()
.putBoolean(HAS_UPLOADED_PROFILE, false)
.putBoolean(REGISTRATION_COMPLETE, false)
.putBoolean(PIN_REQUIRED, true)
.commit()
} }
@Synchronized @Synchronized
@@ -86,8 +91,8 @@ class RegistrationValues internal constructor(store: KeyValueStore) : SignalStor
var restoreDecisionState: RestoreDecisionState var restoreDecisionState: RestoreDecisionState
get() = store.getBlob(RESTORE_DECISION_STATE, null)?.let { RestoreDecisionState.ADAPTER.decode(it) } ?: RestoreDecisionState.Skipped get() = store.getBlob(RESTORE_DECISION_STATE, null)?.let { RestoreDecisionState.ADAPTER.decode(it) } ?: RestoreDecisionState.Skipped
set(newValue) { set(newValue) {
if (isRegistrationComplete) { if (isRegistrationComplete || restoreDecisionState.isTerminal) {
Log.w(TAG, "Registration was completed, cannot change initial restore decision state") Log.w(TAG, "Cannot change initial restore decision state. complete: $isRegistrationComplete terminal: ${restoreDecisionState.isTerminal}")
} else { } else {
Log.v(TAG, "Restore decision set: $newValue", Throwable()) Log.v(TAG, "Restore decision set: $newValue", Throwable())
store.beginWrite() store.beginWrite()

View File

@@ -65,7 +65,6 @@ import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Dialogs import org.signal.core.ui.compose.Dialogs
import org.signal.core.ui.compose.Previews import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.theme.SignalTheme import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.AppUtil
import org.signal.core.util.ThreadUtil import org.signal.core.util.ThreadUtil
import org.signal.core.util.bytes import org.signal.core.util.bytes
import org.thoughtcrime.securesms.BaseActivity import org.thoughtcrime.securesms.BaseActivity
@@ -248,7 +247,11 @@ class RemoteRestoreActivity : BaseActivity() {
.setTitle(R.string.RestoreActivity__no_longer_registered_title) .setTitle(R.string.RestoreActivity__no_longer_registered_title)
.setMessage(R.string.RestoreActivity__no_longer_registered_message) .setMessage(R.string.RestoreActivity__no_longer_registered_message)
.setCancelable(false) .setCancelable(false)
.setPositiveButton(android.R.string.ok) { _, _ -> AppUtil.clearData(this) } .setPositiveButton(android.R.string.ok) { _, _ ->
viewModel.skipRestore()
startActivity(MainActivity.clearTop(this))
supportFinishAfterTransition()
}
.show() .show()
} }

View File

@@ -20,7 +20,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.signal.core.util.AppUtil
import org.signal.core.util.ThreadUtil import org.signal.core.util.ThreadUtil
import org.signal.core.util.getParcelableExtraCompat import org.signal.core.util.getParcelableExtraCompat
import org.signal.core.util.logging.Log import org.signal.core.util.logging.Log
@@ -153,7 +152,11 @@ class RestoreActivity : BaseActivity() {
.setTitle(R.string.RestoreActivity__no_longer_registered_title) .setTitle(R.string.RestoreActivity__no_longer_registered_title)
.setMessage(R.string.RestoreActivity__no_longer_registered_message) .setMessage(R.string.RestoreActivity__no_longer_registered_message)
.setCancelable(false) .setCancelable(false)
.setPositiveButton(android.R.string.ok) { _, _ -> AppUtil.clearData(this) } .setPositiveButton(android.R.string.ok) { _, _ ->
sharedViewModel.skipRestore()
startActivity(MainActivity.clearTop(this))
supportFinishAfterTransition()
}
.show() .show()
} }

View File

@@ -23,11 +23,4 @@ public final class AppUtil {
context.startActivity(defaultIntent); context.startActivity(defaultIntent);
Runtime.getRuntime().exit(0); Runtime.getRuntime().exit(0);
} }
/**
* Clears all app data, will cause the app to stop running.
*/
public static void clearData(@NonNull Context context) {
ContextCompat.getSystemService(context, ActivityManager.class).clearApplicationUserData();
}
} }