Merge "Request hiding IME before starting dismiss biometric UI animation" into tm-qpr-dev
This commit is contained in:
@@ -762,6 +762,12 @@ public class AuthContainerView extends LinearLayout
|
|||||||
}
|
}
|
||||||
mContainerState = STATE_ANIMATING_OUT;
|
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) {
|
if (sendReason) {
|
||||||
mPendingCallbackReason = reason;
|
mPendingCallbackReason = reason;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ import android.view.WindowInsets
|
|||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import android.widget.ScrollView
|
import android.widget.ScrollView
|
||||||
import androidx.test.filters.SmallTest
|
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.jank.InteractionJankMonitor
|
||||||
import com.android.internal.widget.LockPatternUtils
|
import com.android.internal.widget.LockPatternUtils
|
||||||
import com.android.systemui.R
|
import com.android.systemui.R
|
||||||
@@ -158,6 +160,35 @@ class AuthContainerViewTest : SysuiTestCase() {
|
|||||||
assertThat(container.parent).isNull()
|
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
|
@Test
|
||||||
fun testActionAuthenticated_sendsDismissedAuthenticated() {
|
fun testActionAuthenticated_sendsDismissedAuthenticated() {
|
||||||
val container = initializeFingerprintContainer()
|
val container = initializeFingerprintContainer()
|
||||||
|
|||||||
Reference in New Issue
Block a user