mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-22 01:40:07 +01:00
Fix crash when saving backup key to credential manager on Android 13 and earlier.
This commit is contained in:
@@ -41,6 +41,7 @@ import androidx.credentials.CredentialManager
|
||||
import androidx.credentials.exceptions.CreateCredentialCancellationException
|
||||
import androidx.credentials.exceptions.CreateCredentialInterruptedException
|
||||
import androidx.credentials.exceptions.CreateCredentialNoCreateOptionException
|
||||
import androidx.credentials.exceptions.CreateCredentialUnknownException
|
||||
import org.signal.core.ui.compose.Buttons
|
||||
import org.signal.core.ui.compose.Dialogs
|
||||
import org.signal.core.ui.compose.Previews
|
||||
@@ -48,6 +49,7 @@ import org.signal.core.ui.compose.Scaffolds
|
||||
import org.signal.core.ui.compose.SignalPreview
|
||||
import org.signal.core.ui.compose.Snackbars
|
||||
import org.signal.core.ui.compose.theme.SignalTheme
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.settings.app.backups.remote.BackupKeySaveState
|
||||
import org.thoughtcrime.securesms.components.settings.app.backups.remote.CredentialManagerError
|
||||
@@ -55,6 +57,8 @@ import org.thoughtcrime.securesms.components.settings.app.backups.remote.Credent
|
||||
import org.thoughtcrime.securesms.fonts.MonoTypeface
|
||||
import org.signal.core.ui.R as CoreUiR
|
||||
|
||||
private const val TAG = "MessageBackupsKeyRecordScreen"
|
||||
|
||||
/**
|
||||
* Screen displaying the backup key allowing the user to write it down
|
||||
* or copy it.
|
||||
@@ -253,6 +257,24 @@ private suspend fun saveKeyToCredentialManager(
|
||||
is CreateCredentialCancellationException -> CredentialManagerResult.UserCanceled
|
||||
is CreateCredentialInterruptedException -> CredentialManagerResult.Interrupted(e)
|
||||
is CreateCredentialNoCreateOptionException -> CredentialManagerError.MissingCredentialManager(e)
|
||||
is CreateCredentialUnknownException -> {
|
||||
when {
|
||||
Build.VERSION.SDK_INT <= 33 && e.message?.contains("[28431]") == true -> {
|
||||
// This error only impacts Android 13 and earlier, when Google is the designated autofill provider. The error can be safely disregarded, since users
|
||||
// will receive a save prompt from autofill and the password will be stored in Google Password Manager, which syncs with the Credential Manager API.
|
||||
Log.d(TAG, "Disregarding CreateCredentialUnknownException and treating credential creation as success: \"${e.message}\".")
|
||||
CredentialManagerResult.Success
|
||||
}
|
||||
|
||||
e.message?.contains("[28434]") == true -> {
|
||||
Log.w(TAG, "Detected MissingCredentialManager error based on CreateCredentialUnknownException message: \"${e.message}\"")
|
||||
CredentialManagerError.MissingCredentialManager(e)
|
||||
}
|
||||
|
||||
else -> CredentialManagerError.Unexpected(e)
|
||||
}
|
||||
}
|
||||
|
||||
else -> CredentialManagerError.Unexpected(e)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user