Merge "Request hiding IME before starting dismiss biometric UI animation" into tm-qpr-dev am: 52244d0657
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20080175 Change-Id: I50a1db7377e91547e9340e3609fa91a309151023 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user