Fixed
Status Update
Comments
il...@google.com <il...@google.com> #2
Do you know what device(s) this is happening on? Looks like it's crashing in the framework code perhaps in autogenerated binder code.
android.hardware.fingerprint.IFingerprintService$Stub$Proxy.authenticate(IFingerprintService.java:341)
android.hardware.fingerprint.IFingerprintService$Stub$Proxy.authenticate(IFingerprintService.java:341)
ha...@googlemail.com <ha...@googlemail.com> #3
So far seeing on:
LGE LM-Q710(FGN)
LGE LM-X220
LGE LM-X410(FG)
BlackBerry BBB100-1
TCL REVVL 2
LGE LM-Q710(FGN)
LGE LM-X220
LGE LM-X410(FG)
BlackBerry BBB100-1
TCL REVVL 2
il...@google.com <il...@google.com> #4
We also observed similar crash in IFingerprintService.cancelAuthentication(IFingerprintService.java:320)
Caused by java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at android.os.Parcel.readException(Parcel.java:2019)
at android.os.Parcel.readException(Parcel.java:1959)
at android.hardware.fingerprint.IFingerprintService$Stub$Proxy.cancelAuthentication(IFingerprintService.java:320)
at android.hardware.fingerprint.FingerprintManager.cancelAuthentication(FingerprintManager.java:1020)
at android.hardware.fingerprint.FingerprintManager.-wrap2(FingerprintManager.java)
at android.hardware.fingerprint.FingerprintManager$OnAuthenticationCancelListener.onCancel(FingerprintManager.java:224)
at android.os.CancellationSignal.cancel(CancellationSignal.java:77)
at androidx.core.os.CancellationSignal.cancel(CancellationSignal.java:84)
at androidx.biometric.FingerprintHelperFragment.cancel(FingerprintHelperFragment.java:301)
at androidx.biometric.BiometricPrompt.dismissFingerprintFragments(BiometricPrompt.java:984)
at androidx.biometric.BiometricPrompt.access$800(BiometricPrompt.java:67)
at androidx.biometric.BiometricPrompt$2.onPause(BiometricPrompt.java:520)
at java.lang.reflect.Method.invoke(Method.java)
at androidx.lifecycle.ClassesInfoCache$MethodReference.invokeCallback(ClassesInfoCache.java:216)
at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeMethodsForEvent(ClassesInfoCache.java:194)
at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeCallbacks(ClassesInfoCache.java:185)
at androidx.lifecycle.ReflectiveGenericLifecycleObserver.onStateChanged(ReflectiveGenericLifecycleObserver.java:36)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:361)
at androidx.lifecycle.LifecycleRegistry.backwardPass(LifecycleRegistry.java:316)
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:334)
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:145)
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:131)
at androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:123)
at androidx.lifecycle.ReportFragment.onPause(ReportFragment.java:96)
at android.app.Fragment.performPause(Fragment.java:2709)
at android.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1334)
at android.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1557)
at android.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1618)
at android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManagerImpl.java:3027)
at android.app.FragmentManagerImpl.dispatchPause(FragmentManagerImpl.java:2993)
at android.app.FragmentController.dispatchPause(FragmentController.java:211)
at android.app.Activity.performPause(Activity.java:7170)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1409)
at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:4026)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:4003)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3977)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3951)
at android.app.ActivityThread.-wrap15(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1647)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:175)
at android.app.ActivityThread.main(ActivityThread.java:6724)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810)
BUILD INFO
- Device type: LG K11
- OS version: 8.1.0
- Biometric library version: androidx.biometric:biometric:1.0.1
bo...@gmail.com <bo...@gmail.com> #5
We're also seeing this occasionally - we've seen the FingerprintHelperFragment
stack trace reported above, as well as this slightly different one (they all have the same underlying cause):
Caused by java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at android.os.Parcel.createException(Parcel.java:1959)
at android.os.Parcel.readException(Parcel.java:1921)
at android.os.Parcel.readException(Parcel.java:1871)
at android.hardware.fingerprint.IFingerprintService$Stub$Proxy.authenticate(IFingerprintService.java:339)
at android.hardware.fingerprint.FingerprintManager.authenticate(FingerprintManager.java:480)
at android.hardware.fingerprint.FingerprintManager.authenticate(FingerprintManager.java:557)
at android.hardware.biometrics.BiometricPrompt.authenticate(BiometricPrompt.java:435)
at androidx.biometric.BiometricFragment.onCreateView(BiometricFragment.java:311)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
at androidx.fragment.app.FragmentManager.dispatchPause(FragmentManager.java:2593)
at androidx.fragment.app.FragmentController.dispatchPause(FragmentController.java:280)
at androidx.fragment.app.FragmentActivity.onPause(FragmentActivity.java:419)
at android.app.Activity.performPause(Activity.java:7663)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1536)
at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:4699)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:4664)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:4599)
at android.app.servertransaction.PauseActivityItem.execute(PauseActivityItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2185)
at android.os.Handler.dispatchMessage(Handler.java:112)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7593)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
We've only rolled this out to 10% of our user base so far, but here's our current list of affected devices:
Count | Device |
---|---|
4 | INFINIX MOBILITY LIMITED Infinix X606D (Android 8.1.0) |
2 | Sony G8441 (Android 9) |
2 | Xiaomi Mi A1 (Android 9) |
2 | HUAWEI LLD-L21 (Android 9) |
2 | samsung SM-G935F (Android 8.0.0) |
2 | vivo vivo 1904 (Android 9) |
2 | HUAWEI FIG-LX1 (Android 9) |
1 | HUAWEI LDN-L01 (Android 8.0.0) |
1 | HUAWEI ANE-LX1 (Android 9) |
There's some discussion of the underlying framework bug in
il...@google.com <il...@google.com>
il...@google.com <il...@google.com> #6
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 7e9dd629009e348407a00e936f7b0927dbee7c30
Author: Grace Cheng <graciecheng@google.com>
Date: Tue Oct 06 11:52:41 2020
Address uncaught NPE during fingerprint authentication
Updates androidx.biometric.BiometricFragment to catch potential NullPointerException in autogenerated binder code from FingerprintManagerCompat authenticate call
Test: ./gradlew biometric:biometric:test
Test: ./gradlew biometric:biometric:connectedAndroidTest
Test: ./gradlew biometric:integration-tests:testapp:connectedAndroidTest
Bug: 151316421
Change-Id: I713d529fecd08a396e998f8ccf6a3d83e46bf508
M biometric/biometric/src/main/java/androidx/biometric/BiometricFragment.java
M biometric/biometric/src/test/java/androidx/biometric/BiometricFragmentTest.java
https://android-review.googlesource.com/1453556
Branch: androidx-master-dev
commit 7e9dd629009e348407a00e936f7b0927dbee7c30
Author: Grace Cheng <graciecheng@google.com>
Date: Tue Oct 06 11:52:41 2020
Address uncaught NPE during fingerprint authentication
Updates androidx.biometric.BiometricFragment to catch potential NullPointerException in autogenerated binder code from FingerprintManagerCompat authenticate call
Test: ./gradlew biometric:biometric:test
Test: ./gradlew biometric:biometric:connectedAndroidTest
Test: ./gradlew biometric:integration-tests:testapp:connectedAndroidTest
Bug: 151316421
Change-Id: I713d529fecd08a396e998f8ccf6a3d83e46bf508
M biometric/biometric/src/main/java/androidx/biometric/BiometricFragment.java
M biometric/biometric/src/test/java/androidx/biometric/BiometricFragmentTest.java
lb...@gmail.com <lb...@gmail.com> #7
Re-assigning to curtis, since Grace merged a fix for the original bug. I think Curtis is adding some additional NPE checks before closing
Description
Library version: 1.0.0-alpha03
When setting a new NavGraph to NavController, the back stack is not resetted.
From the documentation, "Any current navigation graph data will be replaced."
If a NavGraph is already setted then the back stack containts the default destination. In calling NavGraph.setGraph(NavGraph) and in the new graph, the destination is different, then the new destination is not displayed because back stack is not resetted.
Is it expected feature or not?