Merge "[Bouncer] hide/show keyboard when focus is..." into tm-qpr-dev am: 28bd55410a
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20599101 Change-Id: Ic50b685ce33c16929aa960e285c6773914340853 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -34,6 +34,7 @@ import android.graphics.Insets;
|
|||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.os.Trace;
|
import android.os.Trace;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
|
import android.view.WindowInsets;
|
||||||
import android.view.WindowInsetsAnimationControlListener;
|
import android.view.WindowInsetsAnimationControlListener;
|
||||||
import android.view.WindowInsetsAnimationController;
|
import android.view.WindowInsetsAnimationController;
|
||||||
import android.view.animation.AnimationUtils;
|
import android.view.animation.AnimationUtils;
|
||||||
@@ -236,4 +237,50 @@ public class KeyguardPasswordView extends KeyguardAbsKeyInputView {
|
|||||||
return getResources().getString(
|
return getResources().getString(
|
||||||
com.android.internal.R.string.keyguard_accessibility_password_unlock);
|
com.android.internal.R.string.keyguard_accessibility_password_unlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WindowInsets onApplyWindowInsets(WindowInsets insets) {
|
||||||
|
if (!mPasswordEntry.isFocused() && isVisibleToUser()) {
|
||||||
|
mPasswordEntry.requestFocus();
|
||||||
|
}
|
||||||
|
return super.onApplyWindowInsets(insets);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onWindowFocusChanged(boolean hasWindowFocus) {
|
||||||
|
super.onWindowFocusChanged(hasWindowFocus);
|
||||||
|
if (hasWindowFocus) {
|
||||||
|
if (isVisibleToUser()) {
|
||||||
|
showKeyboard();
|
||||||
|
} else {
|
||||||
|
hideKeyboard();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends signal to the focused window to show the keyboard.
|
||||||
|
*/
|
||||||
|
public void showKeyboard() {
|
||||||
|
post(() -> {
|
||||||
|
if (mPasswordEntry.isAttachedToWindow()
|
||||||
|
&& !mPasswordEntry.getRootWindowInsets().isVisible(WindowInsets.Type.ime())) {
|
||||||
|
mPasswordEntry.requestFocus();
|
||||||
|
mPasswordEntry.getWindowInsetsController().show(WindowInsets.Type.ime());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends signal to the focused window to hide the keyboard.
|
||||||
|
*/
|
||||||
|
public void hideKeyboard() {
|
||||||
|
post(() -> {
|
||||||
|
if (mPasswordEntry.isAttachedToWindow()
|
||||||
|
&& mPasswordEntry.getRootWindowInsets().isVisible(WindowInsets.Type.ime())) {
|
||||||
|
mPasswordEntry.clearFocus();
|
||||||
|
mPasswordEntry.getWindowInsetsController().hide(WindowInsets.Type.ime());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import android.text.method.TextKeyListener;
|
|||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup.MarginLayoutParams;
|
import android.view.ViewGroup.MarginLayoutParams;
|
||||||
import android.view.WindowInsets;
|
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
import android.view.inputmethod.InputMethodInfo;
|
import android.view.inputmethod.InputMethodInfo;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
@@ -200,12 +199,9 @@ public class KeyguardPasswordViewController
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mView.post(() -> {
|
|
||||||
if (mView.isShown()) {
|
if (mView.isShown()) {
|
||||||
mPasswordEntry.requestFocus();
|
mView.showKeyboard();
|
||||||
mPasswordEntry.getWindowInsetsController().show(WindowInsets.Type.ime());
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -227,16 +223,12 @@ public class KeyguardPasswordViewController
|
|||||||
super.onPause();
|
super.onPause();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (mPasswordEntry.isAttachedToWindow()) {
|
mView.hideKeyboard();
|
||||||
mPasswordEntry.getWindowInsetsController().hide(WindowInsets.Type.ime());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStartingToHide() {
|
public void onStartingToHide() {
|
||||||
if (mPasswordEntry.isAttachedToWindow()) {
|
mView.hideKeyboard();
|
||||||
mPasswordEntry.getWindowInsetsController().hide(WindowInsets.Type.ime());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateSwitchImeButton() {
|
private void updateSwitchImeButton() {
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package com.android.keyguard
|
|||||||
import android.testing.AndroidTestingRunner
|
import android.testing.AndroidTestingRunner
|
||||||
import android.testing.TestableLooper
|
import android.testing.TestableLooper
|
||||||
import android.view.inputmethod.InputMethodManager
|
import android.view.inputmethod.InputMethodManager
|
||||||
|
import android.widget.EditText
|
||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.internal.util.LatencyTracker
|
import com.android.internal.util.LatencyTracker
|
||||||
import com.android.internal.widget.LockPatternUtils
|
import com.android.internal.widget.LockPatternUtils
|
||||||
@@ -43,6 +44,8 @@ class KeyguardPasswordViewControllerTest : SysuiTestCase() {
|
|||||||
@Mock
|
@Mock
|
||||||
private lateinit var keyguardPasswordView: KeyguardPasswordView
|
private lateinit var keyguardPasswordView: KeyguardPasswordView
|
||||||
@Mock
|
@Mock
|
||||||
|
private lateinit var passwordEntry: EditText
|
||||||
|
@Mock
|
||||||
lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor
|
lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor
|
||||||
@Mock
|
@Mock
|
||||||
lateinit var securityMode: KeyguardSecurityModel.SecurityMode
|
lateinit var securityMode: KeyguardSecurityModel.SecurityMode
|
||||||
@@ -81,6 +84,9 @@ class KeyguardPasswordViewControllerTest : SysuiTestCase() {
|
|||||||
).thenReturn(mKeyguardMessageArea)
|
).thenReturn(mKeyguardMessageArea)
|
||||||
Mockito.`when`(messageAreaControllerFactory.create(mKeyguardMessageArea))
|
Mockito.`when`(messageAreaControllerFactory.create(mKeyguardMessageArea))
|
||||||
.thenReturn(mKeyguardMessageAreaController)
|
.thenReturn(mKeyguardMessageAreaController)
|
||||||
|
Mockito.`when`(keyguardPasswordView.passwordTextViewId).thenReturn(R.id.passwordEntry)
|
||||||
|
Mockito.`when`(keyguardPasswordView.findViewById<EditText>(R.id.passwordEntry)
|
||||||
|
).thenReturn(passwordEntry)
|
||||||
keyguardPasswordViewController = KeyguardPasswordViewController(
|
keyguardPasswordViewController = KeyguardPasswordViewController(
|
||||||
keyguardPasswordView,
|
keyguardPasswordView,
|
||||||
keyguardUpdateMonitor,
|
keyguardUpdateMonitor,
|
||||||
@@ -103,7 +109,10 @@ class KeyguardPasswordViewControllerTest : SysuiTestCase() {
|
|||||||
Mockito.`when`(keyguardViewController.isBouncerShowing).thenReturn(true)
|
Mockito.`when`(keyguardViewController.isBouncerShowing).thenReturn(true)
|
||||||
Mockito.`when`(keyguardPasswordView.isShown).thenReturn(true)
|
Mockito.`when`(keyguardPasswordView.isShown).thenReturn(true)
|
||||||
keyguardPasswordViewController.onResume(KeyguardSecurityView.VIEW_REVEALED)
|
keyguardPasswordViewController.onResume(KeyguardSecurityView.VIEW_REVEALED)
|
||||||
keyguardPasswordView.post { verify(keyguardPasswordView).requestFocus() }
|
keyguardPasswordView.post {
|
||||||
|
verify(keyguardPasswordView).requestFocus()
|
||||||
|
verify(keyguardPasswordView).showKeyboard()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -114,6 +123,15 @@ class KeyguardPasswordViewControllerTest : SysuiTestCase() {
|
|||||||
verify(keyguardPasswordView, never()).requestFocus()
|
verify(keyguardPasswordView, never()).requestFocus()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testHideKeyboardWhenOnPause() {
|
||||||
|
keyguardPasswordViewController.onPause()
|
||||||
|
keyguardPasswordView.post {
|
||||||
|
verify(keyguardPasswordView).clearFocus()
|
||||||
|
verify(keyguardPasswordView).hideKeyboard()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun startAppearAnimation() {
|
fun startAppearAnimation() {
|
||||||
keyguardPasswordViewController.startAppearAnimation()
|
keyguardPasswordViewController.startAppearAnimation()
|
||||||
|
|||||||
Reference in New Issue
Block a user