Fixed
Status Update
Comments
cu...@google.com <cu...@google.com>
ap...@google.com <ap...@google.com> #2
For Samsung devices having iris sensor like S8, if the user sets iris as his preferred biometric, it works well with current biometricPrompt.
But, the error code delivered from onAuthenticationError callback is very weird.
E.g., if the sensor is hard to detect user's iris since the face is so close, then the ERROR_HW_NOT_PRESENT is returned.
So, this issue needs to be resolved also. Since I'm thinking that Samsung iris meets the CDD requirements, at least, the application can use iris properly.
But, the error code delivered from onAuthenticationError callback is very weird.
E.g., if the sensor is hard to detect user's iris since the face is so close, then the ERROR_HW_NOT_PRESENT is returned.
So, this issue needs to be resolved also. Since I'm thinking that Samsung iris meets the CDD requirements, at least, the application can use iris properly.
Description
While this version and 1.1.0-alpha01 solved many issues using ViewModels and LiveData, leaks are still happening.
In particular, the culprit seems to be FingerprintManager which holds a strong reference to the activity context.
Tested on BUILD INFO
STEPS TO REPRODUCE
NUMBER OF TIMES YOU WERE ABLE TO REPRODUCE - 10/10
Tracking the references to the context (LoginActivity) i found that FingerprintManager eventually receives the value through the BiometricManager.from(Context) method when BiometricManager.canAuthenticate(Int) is invoked, so i tried to use applicationContext to try and resolve the leak, but it happened anyway (file: LoginActivity.kt:190).
Eventually I found out that the possible cause may be the BiometricFragment class, specifically the BiometricFragment.authenticate(BiometricPromp.PromptInfo, BiometricPrompt.CryptoObject) method. The BiometricFragment instance uses the same method in the authenticate function, which gets the parent activity using getActivity() and then passes the value that will eventually reach FingerprintManager.
I don't believe there are any other places in the code where i pass an activity context, and I know that the value passed to create the BiometricPrompt object (file: LoginActivity.kt:195) is only used to get a BiometricViewModel instance and the FragmentActivity is never used again.
Leak results: