Fixed
Status Update
Comments
vi...@google.com <vi...@google.com>
vi...@google.com <vi...@google.com>
em...@gmail.com <em...@gmail.com> #2
Project: platform/frameworks/support
Branch: androidx-main
commit c46d3e79b2ea8b839358f0215b0a432ef8fad7a2
Author: Clara Fok <clarafok@google.com>
Date: Fri Nov 04 15:23:25 2022
Convert androidx.activity.Cancellable to kotlin
Test: ./gradlew activity:activity:cC
Bug: 257291701
Change-Id: I057f3e54811e7399e40083ef5e3915adc4fa425d
M activity/activity/src/main/java/androidx/activity/Cancellable.kt
https://android-review.googlesource.com/2288554
Branch: androidx-main
commit c46d3e79b2ea8b839358f0215b0a432ef8fad7a2
Author: Clara Fok <clarafok@google.com>
Date: Fri Nov 04 15:23:25 2022
Convert androidx.activity.Cancellable to kotlin
Test: ./gradlew activity:activity:cC
Bug: 257291701
Change-Id: I057f3e54811e7399e40083ef5e3915adc4fa425d
M activity/activity/src/main/java/androidx/activity/Cancellable.kt
cu...@google.com <cu...@google.com>
ap...@google.com <ap...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-main
commit 7fd8a3206a49baefee8340f0839fcd4de7716788
Author: Clara Fok <clarafok@google.com>
Date: Fri Nov 04 15:13:23 2022
Rename androidx.activity.Cancellable from .java to .kt
Test: n/a
Bug:257291701
Change-Id: I7f2ff8ce79af41c6437fb9a0f1be90e8990495e8
M activity/activity/src/main/java/androidx/activity/Cancellable.kt
https://android-review.googlesource.com/2288553
Branch: androidx-main
commit 7fd8a3206a49baefee8340f0839fcd4de7716788
Author: Clara Fok <clarafok@google.com>
Date: Fri Nov 04 15:13:23 2022
Rename androidx.activity.Cancellable from .java to .kt
Test: n/a
Bug:257291701
Change-Id: I7f2ff8ce79af41c6437fb9a0f1be90e8990495e8
M activity/activity/src/main/java/androidx/activity/Cancellable.kt
ob...@gmail.com <ob...@gmail.com> #4
Project: platform/frameworks/support
Branch: androidx-main
commit 4d21e0a45f19ed238ef30756f576930af07449c2
Author: Clara Fok <clarafok@google.com>
Date: Fri Nov 04 13:25:08 2022
Convert ActivityResultCallback to kotlin
Including clean up in test usages of this interface
Test: ./gradlew activity:activity:cC
Bug: 257291701
Relnote: Converted ActvitiyResultCallback to kotlin. Maintains source and binary comptability.
Change-Id: Ifc5e5e1a9a7ed4e281007830fb8d4c74237c63ce
M activity/activity/api/current.txt
M activity/activity/api/public_plus_experimental_current.txt
M activity/activity/api/restricted_current.txt
M activity/activity/src/androidTest/java/androidx/activity/result/ActivityResultRegistryTest.kt
M activity/activity/src/main/java/androidx/activity/result/ActivityResultCallback.kt
https://android-review.googlesource.com/2288334
Branch: androidx-main
commit 4d21e0a45f19ed238ef30756f576930af07449c2
Author: Clara Fok <clarafok@google.com>
Date: Fri Nov 04 13:25:08 2022
Convert ActivityResultCallback to kotlin
Including clean up in test usages of this interface
Test: ./gradlew activity:activity:cC
Bug: 257291701
Relnote: Converted ActvitiyResultCallback to kotlin. Maintains source and binary comptability.
Change-Id: Ifc5e5e1a9a7ed4e281007830fb8d4c74237c63ce
M activity/activity/api/current.txt
M activity/activity/api/public_plus_experimental_current.txt
M activity/activity/api/restricted_current.txt
M activity/activity/src/androidTest/java/androidx/activity/result/ActivityResultRegistryTest.kt
M activity/activity/src/main/java/androidx/activity/result/ActivityResultCallback.kt
Description
Here is the if statement where the decision is made (line 716 of BiometricPrompt)
if (!shouldForceFingerprint && canUseBiometricFragment())
canUseBiometricFragment() only checks if the device is running API 28+ and shouldForceFingerprint is calculated mainly by shouldUseFingerprintforCrypto() . That method iterates through a list of devices that are considered not safe for crypto, all of them seem to be Samsung devices. The issue is that the code goes down the path of “I am running API 28 or grater so I am good to go” . This in turn tries to use the FingerprintManager class to get a string for the error during getErrorString(). This is null for our device since the hardware is not there. Devices that do not pass the if check from above (my Nexus 5 running API 23 for example) use the FingerprintHelperFragment and FingerprintDialogFragment classes to correctly handle not having a hardware sensor.
Here is the stacktrace of the issue:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.hardware.fingerprint.FingerprintManager.getErrorString(int, int)' on a null object reference
at android.hardware.biometrics.BiometricPrompt.lambda$sendError$0(BiometricPrompt.java:490)
at android.hardware.biometrics.-$$Lambda$BiometricPrompt$HqBGXtBUWNc-v8NoHYsj2gLfaRw.run(-.java:6)
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:6725)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
The code should not use BiometricFragment for this scenario or if it does, BiometricFragment should check internally before using the FingerprintManager. Probably, the best solution is to have the code handle this case to use FingerprintHelperFragment and FingerprintDialogFragment.
library version: androidx.biometric:biometric:1.0.1
device: ATT Radiant (running Android 9.0 Go)