From f112d19ff3d18d323e27498bb2edf2b6787048e5 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: I76becb6c51fad300a04c4b0a0309c3124909588f Merged-In: 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 233f3648aeb39..6da2f50aac27e 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java @@ -405,6 +405,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(); @@ -720,7 +729,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 2341928b2565d..52b5857a21067 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 = initializeContainer() + 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 = initializeContainer()