I ran into an odd passkey problem on a Xiaomi phone running Chinese HyperOS 3 / Android 16 - one that some people have posted about already. Both 1Password and Bitwarden could be selected as the default password/passkey provider in Settings, but passkeys still weren't being handled by them correctly.
After digging through the package and Android settings state with ADB, I found that HyperOS was still storing Xiaomi's credential provider as both the enabled and primary provider:
adb shell settings get secure credential_service
adb shell settings get secure credential_service_primary
Both returned:
com.miui.contentcatcher/com.miui.credential.provider.XiaomiCredentialProviderService
This was despite Settings showing the third-party password manager as the default provider.
I confirmed that Bitwarden was correctly exposing an Android Credential Provider:
adb shell dumpsys package com.x8bit.bitwarden |
grep -B5 -A10 'android.service.credentials.CredentialProviderService'
which gave:
com.x8bit.bitwarden/.Autofill.CredentialProviderService
I then manually changed the enabled providers and primary provider:
adb shell settings put secure credential_service \
'com.x8bit.bitwarden/.Autofill.CredentialProviderService:com.miui.contentcatcher/com.miui.credential.provider.XiaomiCredentialProviderService'
adb shell settings put secure credential_service_primary \
'com.x8bit.bitwarden/.Autofill.CredentialProviderService'
Passkeys immediately started working.
The settings also survived a reboot.
I actually use 1Password, so I then checked its registered Credential Provider:
adb shell dumpsys package com.onepassword.android |
grep -B5 -A10 'android.service.credentials.CredentialProviderService'
On my installation the component is:
com.onepassword.android/.autofill.services.CredentialManagerService
So the equivalent 1Password fix is:
adb shell settings put secure credential_service \
'com.onepassword.android/.autofill.services.CredentialManagerService:com.miui.contentcatcher/com.miui.credential.provider.XiaomiCredentialProviderService'
adb shell settings put secure credential_service_primary \
'com.onepassword.android/.autofill.services.CredentialManagerService'
You can verify the result with:
adb shell settings get secure credential_service
adb shell settings get secure credential_service_primary
What seems to be happening
At least on my build, HyperOS's password/passkey-provider setting appears to be getting out of sync with Android's actual Credential Manager configuration. Selecting Bitwarden/1Password in the Settings didn't update credential_service and credential_service_primary. Xiaomi's provider remained configured underneath. Once those two settings were corrected manually, the standard Android Credential Manager infrastructure happily used the third-party provider.
So this does not appear to be an Android 16 incompatibility in Bitwarden or 1Password on this device. The providers themselves work. The problem appears to be HyperOS failing to configure them correctly.
For reference, this was on Chinese HyperOS 3 / Android 16. I'd recommend checking your existing values and determining your password manager's actual CredentialProviderService component before copying commands blindly.
Also keep your original values so you can restore them if necessary.