diff options
| author | 2022-11-02 19:05:34 +0000 | |
|---|---|---|
| committer | 2022-11-02 19:05:34 +0000 | |
| commit | 52244d0657d0df1019e503472ba2d28774813ad5 (patch) | |
| tree | a74f5a60cb8ac683f41cf62d4b02b7184f1c79ac | |
| parent | ad23a83ccfc96513d046bc812d90aea604169557 (diff) | |
| parent | ef36c5f99700dc1dc6c24e8498fa37afafa081db (diff) | |
Merge "Request hiding IME before starting dismiss biometric UI animation" into tm-qpr-dev
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java | 6 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt | 31 |
2 files changed, 37 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java index 37da2c7d3379..0a2d8ec97ba6 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java @@ -762,6 +762,12 @@ public class AuthContainerView extends LinearLayout } mContainerState = STATE_ANIMATING_OUT; + // Request hiding soft-keyboard before animating away credential UI, in case IME insets + // animation get delayed by dismissing animation. + if (isAttachedToWindow() && getRootWindowInsets().isVisible(WindowInsets.Type.ime())) { + getWindowInsetsController().hide(WindowInsets.Type.ime()); + } + if (sendReason) { mPendingCallbackReason = reason; } else { 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 e8c760c3e140..d1107c612977 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt @@ -35,6 +35,8 @@ import android.view.WindowInsets import android.view.WindowManager import android.widget.ScrollView import androidx.test.filters.SmallTest +import com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn +import com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn import com.android.internal.jank.InteractionJankMonitor import com.android.internal.widget.LockPatternUtils import com.android.systemui.R @@ -159,6 +161,35 @@ class AuthContainerViewTest : SysuiTestCase() { } @Test + fun testDismissesOnFocusLoss_hidesKeyboardWhenVisible() { + val container = initializeFingerprintContainer( + authenticators = BiometricManager.Authenticators.DEVICE_CREDENTIAL + ) + waitForIdleSync() + + val requestID = authContainer?.requestId ?: 0L + + // Simulate keyboard was shown on the credential view + val windowInsetsController = container.windowInsetsController + spyOn(windowInsetsController) + spyOn(container.rootWindowInsets) + doReturn(true).`when`(container.rootWindowInsets).isVisible(WindowInsets.Type.ime()) + + container.onWindowFocusChanged(false) + waitForIdleSync() + + // Expect hiding IME request will be invoked when dismissing the view + verify(windowInsetsController)?.hide(WindowInsets.Type.ime()) + + verify(callback).onDismissed( + eq(AuthDialogCallback.DISMISSED_USER_CANCELED), + eq<ByteArray?>(null), /* credentialAttestation */ + eq(requestID) + ) + assertThat(container.parent).isNull() + } + + @Test fun testActionAuthenticated_sendsDismissedAuthenticated() { val container = initializeFingerprintContainer() container.mBiometricCallback.onAction( |