Loading packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java +6 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt +31 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -158,6 +160,35 @@ class AuthContainerViewTest : SysuiTestCase() { assertThat(container.parent).isNull() } @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() Loading Loading
packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java +6 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading
packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt +31 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -158,6 +160,35 @@ class AuthContainerViewTest : SysuiTestCase() { assertThat(container.parent).isNull() } @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() Loading