0bf8b57c3a19
restore passkey selection after unlock and bump version to 2.15.7
- time
- 2026-09-06 14:10 UTC · 1 month ago
- machine
- koh2
- agent
- claude-opus-5
- session
- credential search remember
- parent
- db5f9dcb07f7
↓ peach-android-0bf8b57c.tar.gzatlas at this save
files changed2 files
VERSION+1 −1app/src/main/java/com/peachpasswords/credentials/CredentialProviderUnlockActivity.kt+36 −5app/src/main/java/com/peachpasswords/credentials/CredentialProviderUnlockActivity.kt+36 −5
@@ -9,12 +9,17 @@99 import com.peachpasswords.ui.components.SecureWindowPolicy1010 import androidx.credentials.provider.BeginGetCredentialRequest1111 import androidx.credentials.provider.BeginGetPasswordOption12+import androidx.credentials.provider.BeginGetPublicKeyCredentialOption1213 import androidx.credentials.provider.BeginGetCredentialResponse14+import androidx.credentials.provider.CredentialEntry1315 import androidx.credentials.provider.PasswordCredentialEntry1416 import androidx.credentials.provider.PendingIntentHandler17+import androidx.credentials.provider.PublicKeyCredentialEntry1518 import androidx.fragment.app.FragmentActivity1619 import com.peachpasswords.R1720 import com.peachpasswords.passkeys.PasskeyCallerOrigin21+import com.peachpasswords.passkeys.PasskeyCredentialPlanner22+import com.peachpasswords.passkeys.PasskeyCredentialSelectionActivity1823 import com.peachpasswords.passkeys.PasskeyUnlockIntent1924 import com.peachpasswords.autofill.appLinkDomains2025 import com.peachpasswords.shared.extractDomain@@ -72,10 +77,13 @@7277 info?.let { appLinkDomains(this, it.packageName).toSet() }.orEmpty()7378 }7479 val packageName = info?.packageName?.takeIf { webOrigin.isNullOrBlank() }75- val entries = request.beginGetCredentialOptions76- .filterIsInstance<BeginGetPasswordOption>()77- .flatMap { option ->78- PasswordCredentialPlanner.candidates(80+ val icon = Icon.createWithResource(this, R.drawable.ic_peach_mark)81+ val callerOrigin = info?.let {82+ PasskeyCallerOrigin.resolve(it, allowlist)83+ }84+ val entries = request.beginGetCredentialOptions.flatMap { option ->85+ when (option) {86+ is BeginGetPasswordOption -> PasswordCredentialPlanner.candidates(7987 vault.getEntries(),8088 domains,8189 packageName = packageName,@@ -89,11 +97,34 @@8997 )9098 .setDisplayName(candidate.title)9199 .setLastUsedTime(Instant.ofEpochMilli(candidate.lastUsedAt ?: 0L))92- .setIcon(Icon.createWithResource(this, R.drawable.ic_peach_mark))100+ .setIcon(icon)93101 .setAutoSelectAllowed(false)94102 .build()95103 }104+ is BeginGetPublicKeyCredentialOption -> PasskeyCredentialPlanner.candidates(105+ vault.getEntries(),106+ option.requestJson,107+ callerOrigin,108+ ).map { candidate ->109+ PublicKeyCredentialEntry(110+ context = this,111+ username = candidate.username,112+ pendingIntent = PasskeyCredentialSelectionActivity.pendingIntent(113+ this,114+ candidate.entryId,115+ option.requestJson,116+ ),117+ beginGetPublicKeyCredentialOption = option,118+ displayName = candidate.displayName,119+ lastUsedTime = Instant.ofEpochMilli(candidate.lastUsedAt ?: 0L),120+ icon = icon,121+ isAutoSelectAllowed = false,122+ )123+ }124+ else -> emptyList<CredentialEntry>()96125 }126+ }127+97128 val result = Intent()98129 PendingIntentHandler.setBeginGetCredentialResponse(99130 result,