Merge "Check for null receiver in biometric AuthController"
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
index b758731..446ed25 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
@@ -93,8 +93,11 @@
Log.w(TAG, "Evicting client due to: " + topPackage);
mCurrentDialog.dismissWithoutCallback(true /* animate */);
mCurrentDialog = null;
- mReceiver.onDialogDismissed(BiometricPrompt.DISMISSED_REASON_USER_CANCEL);
- mReceiver = null;
+ if (mReceiver != null) {
+ mReceiver.onDialogDismissed(
+ BiometricPrompt.DISMISSED_REASON_USER_CANCEL);
+ mReceiver = null;
+ }
}
}
} catch (RemoteException e) {
@@ -105,6 +108,10 @@
@Override
public void onTryAgainPressed() {
+ if (mReceiver == null) {
+ Log.e(TAG, "onTryAgainPressed: Receiver is null");
+ return;
+ }
try {
mReceiver.onTryAgainPressed();
} catch (RemoteException e) {
@@ -114,6 +121,10 @@
@Override
public void onDeviceCredentialPressed() {
+ if (mReceiver == null) {
+ Log.e(TAG, "onDeviceCredentialPressed: Receiver is null");
+ return;
+ }
try {
mReceiver.onDeviceCredentialPressed();
} catch (RemoteException e) {
@@ -161,7 +172,7 @@
private void sendResultAndCleanUp(@DismissedReason int reason) {
if (mReceiver == null) {
- Log.e(TAG, "Receiver is null");
+ Log.e(TAG, "sendResultAndCleanUp: Receiver is null");
return;
}
try {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java
index b089b74..85d818a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java
@@ -389,6 +389,20 @@
verify(mReceiver).onDialogDismissed(eq(BiometricPrompt.DISMISSED_REASON_USER_CANCEL));
}
+ @Test
+ public void testDoesNotCrash_whenTryAgainPressedAfterDismissal() {
+ showDialog(Authenticator.TYPE_BIOMETRIC, BiometricPrompt.TYPE_FACE);
+ mAuthController.onDismissed(AuthDialogCallback.DISMISSED_USER_CANCELED);
+ mAuthController.onTryAgainPressed();
+ }
+
+ @Test
+ public void testDoesNotCrash_whenDeviceCredentialPressedAfterDismissal() {
+ showDialog(Authenticator.TYPE_BIOMETRIC, BiometricPrompt.TYPE_FACE);
+ mAuthController.onDismissed(AuthDialogCallback.DISMISSED_USER_CANCELED);
+ mAuthController.onDeviceCredentialPressed();
+ }
+
// Helpers
private void showDialog(int authenticators, int biometricModality) {