diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java index c31d45ff0b830..4aa985b509672 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java @@ -198,32 +198,36 @@ public class AuthController implements CoreStartable, CommandQueue.Callbacks, final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - if (mCurrentDialog != null - && Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) { + if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) { String reason = intent.getStringExtra("reason"); reason = (reason != null) ? reason : "unknown"; - Log.d(TAG, "ACTION_CLOSE_SYSTEM_DIALOGS received, reason: " + reason); - - mCurrentDialog.dismissWithoutCallback(true /* animate */); - mCurrentDialog = null; - - for (Callback cb : mCallbacks) { - cb.onBiometricPromptDismissed(); - } - - try { - if (mReceiver != null) { - mReceiver.onDialogDismissed(BiometricPrompt.DISMISSED_REASON_USER_CANCEL, - null /* credentialAttestation */); - mReceiver = null; - } - } catch (RemoteException e) { - Log.e(TAG, "Remote exception", e); - } + closeDioalog(reason); } } }; + private void closeDioalog(String reason) { + if (isShowing()) { + Log.i(TAG, "Close BP, reason :" + reason); + mCurrentDialog.dismissWithoutCallback(true /* animate */); + mCurrentDialog = null; + + for (Callback cb : mCallbacks) { + cb.onBiometricPromptDismissed(); + } + + try { + if (mReceiver != null) { + mReceiver.onDialogDismissed(BiometricPrompt.DISMISSED_REASON_USER_CANCEL, + null /* credentialAttestation */); + mReceiver = null; + } + } catch (RemoteException e) { + Log.e(TAG, "Remote exception", e); + } + } + } + private void cancelIfOwnerIsNotInForeground() { mExecution.assertIsMainThread(); if (mCurrentDialog != null) { @@ -546,6 +550,11 @@ public class AuthController implements CoreStartable, CommandQueue.Callbacks, } } + @Override + public void handleShowGlobalActionsMenu() { + closeDioalog("PowerMenu shown"); + } + /** * @return where the UDFPS exists on the screen in pixels in portrait mode. */ 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 e1c74170a43f9..c068efb1b5d42 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java @@ -35,7 +35,6 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; @@ -930,6 +929,15 @@ public class AuthControllerTest extends SysuiTestCase { assertNotSame(firstFpLocation, mAuthController.getFingerprintSensorLocation()); } + @Test + public void testCloseDialog_whenGlobalActionsMenuShown() throws Exception { + showDialog(new int[]{1} /* sensorIds */, false /* credentialAllowed */); + mAuthController.handleShowGlobalActionsMenu(); + verify(mReceiver).onDialogDismissed( + eq(BiometricPrompt.DISMISSED_REASON_USER_CANCEL), + eq(null) /* credentialAttestation */); + } + private void showDialog(int[] sensorIds, boolean credentialAllowed) { mAuthController.showAuthenticationDialog(createTestPromptInfo(), mReceiver /* receiver */,