From c55e4b2e2b12b8154f45475a5a49cccd9d1fd6de Mon Sep 17 00:00:00 2001 From: Ilya Matyukhin Date: Sat, 11 Jun 2022 00:21:52 +0000 Subject: [PATCH] Dismiss BiometricPrompt if window focus is lost Bug: 233820283 Bug: 216743197 Test: atest AuthContainerViewTest Change-Id: I73a87a364a752154e0f96c018b5e5ee8eb505c03 --- .../systemui/biometrics/AuthContainerView.java | 11 ++++++++++- .../biometrics/AuthContainerViewTest.kt | 17 +++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java index 4ffea14a62b47..bc1c5f4baceb7 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java @@ -435,6 +435,15 @@ public class AuthContainerView extends LinearLayout maybeUpdatePositionForUdfps(true /* invalidate */); } + @Override + public void onWindowFocusChanged(boolean hasWindowFocus) { + super.onWindowFocusChanged(hasWindowFocus); + if (!hasWindowFocus) { + Log.v(TAG, "Lost window focus, dismissing the dialog"); + animateAway(AuthDialogCallback.DISMISSED_USER_CANCELED); + } + } + @Override public void onAttachedToWindow() { super.onAttachedToWindow(); @@ -795,7 +804,7 @@ public class AuthContainerView extends LinearLayout final WindowManager.LayoutParams lp = new WindowManager.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, - WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL, + WindowManager.LayoutParams.TYPE_STATUS_BAR_ADDITIONAL, windowFlags, PixelFormat.TRANSLUCENT); lp.privateFlags |= WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS; diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt index 31fe39a2a1703..bc5a4d3d274ec 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt @@ -105,6 +105,23 @@ class AuthContainerViewTest : SysuiTestCase() { verify(callback).onDialogAnimatedIn() } + @Test + fun testDismissesOnFocusLoss() { + val container = initializeFingerprintContainer() + waitForIdleSync() + + verify(callback).onDialogAnimatedIn() + + container.onWindowFocusChanged(false) + waitForIdleSync() + + verify(callback).onDismissed( + eq(AuthDialogCallback.DISMISSED_USER_CANCELED), + eq(null) /* credentialAttestation */ + ) + assertThat(container.parent).isNull() + } + @Test fun testActionAuthenticated_sendsDismissedAuthenticated() { val container = initializeFingerprintContainer()