From f2827c934b5663ee544ea030ca73db0b4dea416d Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 15 Sep 2026 16:57:12 -0400 Subject: [PATCH] Always use ACI for username when saving recovery key. --- .../ui/subscription/MessageBackupsKeyRecordScreen.kt | 10 ++++------ .../signal/passwordmanager/SignalCredentialManager.kt | 3 +++ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsKeyRecordScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsKeyRecordScreen.kt index cf4b576e88..2878ccfbff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsKeyRecordScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsKeyRecordScreen.kt @@ -219,7 +219,6 @@ fun MessageBackupsKeyRecordScreen( var displayConfirmKey by remember { mutableStateOf(false) } if (displayConfirmKey) { val context = LocalContext.current - val credentialId = stringResource(R.string.MessageBackupsKeyRecordScreen__backup_key_password_manager_id) val successMessage = stringResource(R.string.MessageBackupsKeyRecordScreen__recover_key_confirmed) ModalBottomSheet( sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true), @@ -229,7 +228,7 @@ fun MessageBackupsKeyRecordScreen( ConfirmRecoveryKeySheet( onConfirm = { coroutineScope.launch { - val retrieved = getKeyFromCredentialManager(context, credentialId) + val retrieved = getKeyFromCredentialManager(context) if (retrieved == backupKey) { Toast.makeText(context, successMessage, Toast.LENGTH_SHORT).show() (mode as? MessageBackupsKeyRecordMode.Passkey)?.onSaveSuccessful() @@ -764,16 +763,15 @@ private suspend fun saveKeyToCredentialManager( ): CredentialManagerResult { return SignalCredentialManager.saveCredential( activityContext = activityContext, - username = activityContext.getString(R.string.MessageBackupsKeyRecordScreen__backup_key_password_manager_id), + username = SignalStore.account.requireAci().toString().uppercase(), password = backupKey ) } private suspend fun getKeyFromCredentialManager( - @UiContext activityContext: Context, - id: String + @UiContext activityContext: Context ): String? { - return SignalCredentialManager.getCredential(activityContext, id)?.password + return SignalCredentialManager.getCredential(activityContext, SignalStore.account.requireAci().toString().uppercase())?.password } @DayNightPreviews diff --git a/lib/password-manager/src/main/java/org/signal/passwordmanager/SignalCredentialManager.kt b/lib/password-manager/src/main/java/org/signal/passwordmanager/SignalCredentialManager.kt index 65fcb39802..3c646fc4ea 100644 --- a/lib/password-manager/src/main/java/org/signal/passwordmanager/SignalCredentialManager.kt +++ b/lib/password-manager/src/main/java/org/signal/passwordmanager/SignalCredentialManager.kt @@ -56,6 +56,9 @@ object SignalCredentialManager { /** * Prompts the user to save a password credential to their password manager. Must be called with * an Activity context so the Credential Manager UI can be shown. + * + * [username] is always the local ACI, formatted the way it is displayed, so that everything we store + * is filed under the same account. */ suspend fun saveCredential( @UiContext activityContext: Context,