Status Update
Comments
mi...@gmail.com <mi...@gmail.com> #2
ko...@gmail.com <ko...@gmail.com> #3
Project: platform/frameworks/support
Branch: androidx-main
Author: Hao Dong <
Link:
Apply workaround of forcing strong bio to combined authenticators.
Expand for full commit details
Apply workaround of forcing strong bio to combined authenticators.
Bug: 257670132
Test: ./gradlew :biometric:biometric:test
Change-Id: Ibb8532b5210407cfb530020f67d77210f58cfbc7
Files:
- M
biometric/biometric/src/main/java/androidx/biometric/AuthenticatorUtils.java
- M
biometric/biometric/src/main/java/androidx/biometric/BiometricViewModel.java
Hash: 90159701331b69ec3d0977c37ca3600e1f08e41b
Date: Thu Mar 06 01:19:14 2025
cu...@gmail.com <cu...@gmail.com> #4
Project: platform/frameworks/support
Branch: androidx-main
Author: Hao Dong <
Link:
Fix workaround of forcing strong biometrics
Expand for full commit details
Fix workaround of forcing strong biometrics
1. Use mPromptInfo.getAllowedAuthenticators() to decide whether to use
fake crypto object to force strong biometric, instead of the
consolidated authenticators.
2. Replace isStrongBiometricAllowed() with isAtLeastStrength().
Bug: 402158770
Bug: 257670132
Test: ./gradlew :biometric:biometric:test
Test: manually check b/402158770 on integration test app
Change-Id: I5cfb3b659781a1570ccd6aa607df3da61a559ebf
Files:
- M
biometric/biometric/src/main/java/androidx/biometric/AuthenticatorUtils.java
- M
biometric/biometric/src/main/java/androidx/biometric/BiometricManager.java
- M
biometric/biometric/src/main/java/androidx/biometric/BiometricViewModel.java
- M
biometric/biometric/src/test/java/androidx/biometric/AuthenticatorUtilsTest.java
Hash: cb2115ab72c5c98b53d26fb33a2c0bbc153d6aea
Date: Tue Mar 11 22:35:37 2025
yt...@gmail.com <yt...@gmail.com> #5
da...@gmail.com <da...@gmail.com> #6
da...@gmail.com <da...@gmail.com> #7
androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment androidx.biometric.FingerprintDialogFragment: could not find Fragment constructor
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4754)
at android.app.ActivityThread.-wrap18(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1599)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment androidx.biometric.FingerprintDialogFragment: could not find Fragment constructor
at androidx.fragment.app.Fragment.instantiate(Fragment.java:563)
at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:390)
at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:74)
at androidx.fragment.app.FragmentManager.restoreSaveState(FragmentManager.java:2466)
at androidx.fragment.app.FragmentController.restoreSaveState(FragmentController.java:196)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:287)
[...]
yt...@gmail.com <yt...@gmail.com> #8
na...@cybercom.com <na...@cybercom.com> #9
bi...@nagarro.com <bi...@nagarro.com> #10
bi...@nagarro.com <bi...@nagarro.com> #11
Is there any way to handle it besides letting app crash?
gs...@gmail.com <gs...@gmail.com> #12
gs...@gmail.com <gs...@gmail.com> #13
This is literally a one liner to fix:
That line must read:
public FingerprintDialogFragment() {}
(plus the bogus comment above removed)
ma...@bokhorst.biz <ma...@bokhorst.biz> #14
It seems Google doesn't work on this library anymore :-(
A workaround is to put this in the activity's onCreate:
Fragment bfragment = getSupportFragmentManager()
.findFragmentByTag("androidx.biometric.BiometricFragment");
if (bfragment != null)
getSupportFragmentManager()
.beginTransaction()
.remove(bfragment)
.commitNowAllowingStateLoss();
ph...@monzo.com <ph...@monzo.com> #15
ph...@monzo.com <ph...@monzo.com> #16
ph...@monzo.com <ph...@monzo.com> #17
Making the constructor public will fix the crash (you can hack around this yourself by special casing androidx.biometric.FingerprintDialogFragment
in a FragmentFactory
), but unfortunately this code makes a bunch of lifecycle/ordering assumptions that break after state restoration. The fingerprint dialog is shown without an icon, pressing back shows the dialog again in an even more broken state, and then if you call BiometricPrompt.authenticate(...)
again after cancellation you get a crash.
In the attached video I'm killing the process between backgrounding the app and returning to the task.
Stack trace:
java.lang.IllegalStateException: Fragment BiometricFragment{8fade1d} (ea16f32c-420c-47af-965c-813eba1f5a7a) not attached to a context.
at androidx.fragment.app.Fragment.requireContext(Fragment.java:919)
at androidx.fragment.app.Fragment.getResources(Fragment.java:983)
at androidx.fragment.app.Fragment.getString(Fragment.java:1005)
at androidx.biometric.BiometricFragment.authenticate(BiometricFragment.java:390)
at androidx.biometric.BiometricPrompt.authenticateInternal(BiometricPrompt.java:1033)
at androidx.biometric.BiometricPrompt.authenticate(BiometricPrompt.java:1013)
at com.monzo.challenge.biometric.BiometricPromptWrapper.showForAuthentication(BiometricPromptWrapper.kt:106)
at com.monzo.challenge.biometric.BiometricPromptWrapper.showForAuthentication$default(BiometricPromptWrapper.kt:89)
at com.monzo.applock.biometric.BiometricAppLockActivity$onCreate$3.invoke(BiometricAppLockActivity.kt:54)
at com.monzo.applock.biometric.BiometricAppLockActivity$onCreate$3.invoke(BiometricAppLockActivity.kt:51)
at com.monzo.commonui.mvvm.LiveDatasKt$observeEvent$1.invoke(LiveDatas.kt:16)
at com.monzo.commonui.mvvm.LiveDatasKt$observeEvent$1.invoke(LiveDatas.kt:15)
at com.monzo.commonui.mvvm.LiveDatasKt.observeNotNull$lambda-0(LiveDatas.kt:25)
at com.monzo.commonui.mvvm.LiveDatasKt.$r8$lambda$G9HM89ZUMSptDJuoT0k5RrHqKP4(LiveDatas.kt)
at com.monzo.commonui.mvvm.LiveDatasKt$$ExternalSyntheticLambda0.onChanged(D8$$SyntheticClass)
at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133)
at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151)
at androidx.lifecycle.LiveData.setValue(LiveData.java:309)
at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
at com.monzo.applock.biometric.BiometricAppLockViewModel.sendViewEvent(BiometricAppLockViewModel.kt:86)
at com.monzo.applock.biometric.BiometricAppLockViewModel.showPrompt(BiometricAppLockViewModel.kt:62)
at com.monzo.applock.biometric.BiometricAppLockViewModel.onTryAgainClicked(BiometricAppLockViewModel.kt:75)
at com.monzo.applock.biometric.BiometricAppLockActivity.onCreate$lambda-0(BiometricAppLockActivity.kt:48)
at com.monzo.applock.biometric.BiometricAppLockActivity.$r8$lambda$xqcfadO653FSOEqH_5rMoZrTVTo(BiometricAppLockActivity.kt)
at com.monzo.applock.biometric.BiometricAppLockActivity$$ExternalSyntheticLambda0.onClick(D8$$SyntheticClass)
at android.view.View.performClick(View.java:5198)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1131)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
(Not sure what's going on with Comment has been deleted. above, the issue tracker seems unhappy)
[Deleted User] <[Deleted User]> #18
yt...@gmail.com <yt...@gmail.com> #19
ra...@gmail.com <ra...@gmail.com> #20
ra...@gmail.com <ra...@gmail.com> #21
al...@thr1ve.app <al...@thr1ve.app> #22
ra...@gmail.com <ra...@gmail.com> #23
ap...@google.com <ap...@google.com> #24
Branch: androidx-main
commit 75f8091934d05958f344f70914151af3dd24abb8
Author: Hao Dong <spdonghao@google.com>
Date: Wed Sep 04 21:46:50 2024
Fix FingerprintDialogFragment crash when rotation
Bug: 181805603
Test: Biometric integration test app on Pixel 8a API 26
Change-Id: I51c4a339887a885fbe3d4e11bc75784aabde6957
M biometric/biometric/src/main/java/androidx/biometric/FingerprintDialogFragment.java
sp...@google.com <sp...@google.com>
ma...@bokhorst.biz <ma...@bokhorst.biz> #25
How when what where is it fixed? And why did this take over 4 years?
sp...@google.com <sp...@google.com> #26
The fix will be included in the next release. We recently revived this library and are working to address outstanding issues and improve its functionality. We understand this issue has been around for a while, and we apologize for the inconvenience it has caused.
Description
BUILD INFO