Fixed
Status Update
Comments
ve...@google.com <ve...@google.com>
ve...@google.com <ve...@google.com> #2
Even I'm also facing same exception issue. When user failed biometrics multiple times(5) and biometric is locked there is no way to find if biometrics can be shown or not. If user tries to enable again within the 30 sec time limit app is crashing. Please fix it ASAP.
Logs :
java.lang.IllegalStateException: Fragment already added: BiometricFragment{60be538 #2 BiometricFragment}
at androidx.fragment.app.FragmentManagerImpl.addFragment(FragmentManager.java:1916)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:765)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at androidx.fragment.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6680)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Logs :
java.lang.IllegalStateException: Fragment already added: BiometricFragment{60be538 #2 BiometricFragment}
at androidx.fragment.app.FragmentManagerImpl.addFragment(FragmentManager.java:1916)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:765)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at androidx.fragment.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6680)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
ev...@willowtreeapps.com <ev...@willowtreeapps.com> #3
We are unable to reproduce this issue with latest version of androidx.biometric (androidx.biometric:biometric:1.0.0-alpha03)
Re: comment #2 : Its similar to issue 117105236 (which is fixed).
Please check with latest version of the support libs & let us know the results.
If you are still able to reproduce this issue then provide the following info :
Provide sample project or apk to reproduce the issue. Also mention the steps to be followed for reproducing the issue with the given sample project or apk.
Android bug report
After reproducing the issue, press the volume up, volume down, and power button simultaneously. This will capture a bug report on your device in the “bug reports” directory. Attach the bug report file to this issue.
Alternate method:
After reproducing the issue, navigate to developer settings, ensure ‘USB debugging’ is enabled, then enable ‘Bug report shortcut’. To take bug report, hold the power button and select the ‘Take bug report’ option.
NOTE: Please upload the files to Google Drive and share the folder to android-bugreport@google.com, then share the link here.
Re:
Please check with latest version of the support libs & let us know the results.
If you are still able to reproduce this issue then provide the following info :
Provide sample project or apk to reproduce the issue. Also mention the steps to be followed for reproducing the issue with the given sample project or apk.
Android bug report
After reproducing the issue, press the volume up, volume down, and power button simultaneously. This will capture a bug report on your device in the “bug reports” directory. Attach the bug report file to this issue.
Alternate method:
After reproducing the issue, navigate to developer settings, ensure ‘USB debugging’ is enabled, then enable ‘Bug report shortcut’. To take bug report, hold the power button and select the ‘Take bug report’ option.
NOTE: Please upload the files to Google Drive and share the folder to android-bugreport@google.com, then share the link here.
ev...@willowtreeapps.com <ev...@willowtreeapps.com> #4
I think this issue needs to be fixed as a first priority. You can reproduce the error with opening app and calling biometricPrompt.authenticate() after that press home button and then, show your finger to sensor. It'll crash instantly. You can reproduce the issue easily. I can do that with my Oreo device. I think that cancelAuthenticate doesn't work properly.
ve...@google.com <ve...@google.com> #5
This issue looks like fixed with library -- androidx.biometric:biometric:1.0.0-alpha03
Q) Once user tries for 5 times, the popUp will not be visible for next 30 seconds. It is taking too much time to give errorCode=7 (ERROR_LOCKOUT) when tries to see the biometric popup again. Is there a way to see the errorCode faster than usual?
Thanks,
Q) Once user tries for 5 times, the popUp will not be visible for next 30 seconds. It is taking too much time to give errorCode=7 (ERROR_LOCKOUT) when tries to see the biometric popup again. Is there a way to see the errorCode faster than usual?
Thanks,
kc...@google.com <kc...@google.com> #6
I'm using alpha03 as well but the bug still remains. I'm facing it right now. You can check the problem when you open dialogfragment via authenticate() and press home button and then showing your finger to sensor.
jo...@google.com <jo...@google.com> #7
I'll attach a crash log to this, we're getting dozens of crashes per day, over 3% of our user sessions. Will try alpha03, and some of the reproduction notes here.
kc...@google.com <kc...@google.com> #8
Here's a recent crashlytics bug report on this, with alpha02.
kc...@google.com <kc...@google.com> #9
Tried alpha03, and I don't have exactly the same issue, a different one has now surfaced with #6's reproduction notes:
2018-12-20 16:54:19.708 9948-9948/com.varomoney.varo.dev E/AndroidRuntime: FATAL EXCEPTION: main
Process:com.varomoney.varo.dev , PID: 9948
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.varomoney.varo.dev/com.varomoney.varo.presentation.launcher.LauncherActivity }: java.lang.IllegalArgumentException: Executor must not be null
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.IllegalArgumentException: Executor must not be null
at android.hardware.biometrics.BiometricPrompt$Builder.setNegativeButton(BiometricPrompt.java:182)
at androidx.biometric.BiometricFragment.onCreate(BiometricFragment.java:201)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:2414)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1418)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1861)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
at androidx.fragment.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:3223)
at androidx.fragment.app.FragmentController.dispatchCreate(FragmentController.java:190)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:369)
at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:85)
at com.varomoney.varo.presentation.base.BaseActivity.onCreate(BaseActivity.kt:73)
at com.varomoney.varo.presentation.launcher.LauncherActivity.onCreate(LauncherActivity.kt:59)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
I've looked and I'm passing com.google.android.gms.tasks.TaskExecutors.MAIN_THREAD for the executor in my use of the API.
2018-12-20 16:54:19.708 9948-9948/
Process:
java.lang.RuntimeException: Unable to start activity ComponentInfo{
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.IllegalArgumentException: Executor must not be null
at android.hardware.biometrics.BiometricPrompt$Builder.setNegativeButton(BiometricPrompt.java:182)
at androidx.biometric.BiometricFragment.onCreate(BiometricFragment.java:201)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:2414)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1418)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1861)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
at androidx.fragment.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:3223)
at androidx.fragment.app.FragmentController.dispatchCreate(FragmentController.java:190)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:369)
at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:85)
at com.varomoney.varo.presentation.base.BaseActivity.onCreate(BaseActivity.kt:73)
at com.varomoney.varo.presentation.launcher.LauncherActivity.onCreate(LauncherActivity.kt:59)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
I've looked and I'm passing com.google.android.gms.tasks.TaskExecutors.MAIN_THREAD for the executor in my use of the API.
Description
Artifact used androidx.biometric:biometric
Version used: 1.0.0-alpha03
Devices/Android versions reproduced on: 26, 27, 28
Note: this is a followup to
When an error is triggered from too many incorrect fingerprint attempts, the behavior is different before and after api 28.
Before api 28:
The dialog is immediately closed, not allowing the user to see what when wrong.
After api 28:
The dialog is shown for a couple of seconds with the error message, then closes itself.
This inconsistency is an issue because we don't know if we should show the error to the user ourselves. If we do, then the user will see the error presented twice > api 28, and if we don't there will be no indication on why it didn't work < api 28.