Merge "[Bouncer] Add condition to keep keyboard hidden" into tm-dev am: 3600867ca9 am: c1c9101832 am: c0c7760e6f
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17968372 Change-Id: I9bb9d5648a4648786af3edca16183276bd3100a7 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -28,6 +28,7 @@ import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
|
|||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.classifier.FalsingCollector;
|
import com.android.systemui.classifier.FalsingCollector;
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
|
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||||
import com.android.systemui.statusbar.policy.DevicePostureController;
|
import com.android.systemui.statusbar.policy.DevicePostureController;
|
||||||
import com.android.systemui.util.ViewController;
|
import com.android.systemui.util.ViewController;
|
||||||
import com.android.systemui.util.concurrency.DelayableExecutor;
|
import com.android.systemui.util.concurrency.DelayableExecutor;
|
||||||
@@ -168,6 +169,7 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView>
|
|||||||
private final EmergencyButtonController.Factory mEmergencyButtonControllerFactory;
|
private final EmergencyButtonController.Factory mEmergencyButtonControllerFactory;
|
||||||
private final FalsingCollector mFalsingCollector;
|
private final FalsingCollector mFalsingCollector;
|
||||||
private final DevicePostureController mDevicePostureController;
|
private final DevicePostureController mDevicePostureController;
|
||||||
|
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public Factory(KeyguardUpdateMonitor keyguardUpdateMonitor,
|
public Factory(KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||||
@@ -178,7 +180,8 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView>
|
|||||||
@Main Resources resources, LiftToActivateListener liftToActivateListener,
|
@Main Resources resources, LiftToActivateListener liftToActivateListener,
|
||||||
TelephonyManager telephonyManager, FalsingCollector falsingCollector,
|
TelephonyManager telephonyManager, FalsingCollector falsingCollector,
|
||||||
EmergencyButtonController.Factory emergencyButtonControllerFactory,
|
EmergencyButtonController.Factory emergencyButtonControllerFactory,
|
||||||
DevicePostureController devicePostureController) {
|
DevicePostureController devicePostureController,
|
||||||
|
StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
|
||||||
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
||||||
mLockPatternUtils = lockPatternUtils;
|
mLockPatternUtils = lockPatternUtils;
|
||||||
mLatencyTracker = latencyTracker;
|
mLatencyTracker = latencyTracker;
|
||||||
@@ -191,6 +194,7 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView>
|
|||||||
mEmergencyButtonControllerFactory = emergencyButtonControllerFactory;
|
mEmergencyButtonControllerFactory = emergencyButtonControllerFactory;
|
||||||
mFalsingCollector = falsingCollector;
|
mFalsingCollector = falsingCollector;
|
||||||
mDevicePostureController = devicePostureController;
|
mDevicePostureController = devicePostureController;
|
||||||
|
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Create a new {@link KeyguardInputViewController}. */
|
/** Create a new {@link KeyguardInputViewController}. */
|
||||||
@@ -211,7 +215,7 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView>
|
|||||||
mKeyguardUpdateMonitor, securityMode, mLockPatternUtils,
|
mKeyguardUpdateMonitor, securityMode, mLockPatternUtils,
|
||||||
keyguardSecurityCallback, mMessageAreaControllerFactory, mLatencyTracker,
|
keyguardSecurityCallback, mMessageAreaControllerFactory, mLatencyTracker,
|
||||||
mInputMethodManager, emergencyButtonController, mMainExecutor, mResources,
|
mInputMethodManager, emergencyButtonController, mMainExecutor, mResources,
|
||||||
mFalsingCollector);
|
mFalsingCollector, mStatusBarKeyguardViewManager);
|
||||||
|
|
||||||
} else if (keyguardInputView instanceof KeyguardPINView) {
|
} else if (keyguardInputView instanceof KeyguardPINView) {
|
||||||
return new KeyguardPinViewController((KeyguardPINView) keyguardInputView,
|
return new KeyguardPinViewController((KeyguardPINView) keyguardInputView,
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ import com.android.settingslib.Utils;
|
|||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.classifier.FalsingCollector;
|
import com.android.systemui.classifier.FalsingCollector;
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
|
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||||
import com.android.systemui.util.concurrency.DelayableExecutor;
|
import com.android.systemui.util.concurrency.DelayableExecutor;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -55,6 +56,7 @@ public class KeyguardPasswordViewController
|
|||||||
private final KeyguardSecurityCallback mKeyguardSecurityCallback;
|
private final KeyguardSecurityCallback mKeyguardSecurityCallback;
|
||||||
private final InputMethodManager mInputMethodManager;
|
private final InputMethodManager mInputMethodManager;
|
||||||
private final DelayableExecutor mMainExecutor;
|
private final DelayableExecutor mMainExecutor;
|
||||||
|
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||||
private final boolean mShowImeAtScreenOn;
|
private final boolean mShowImeAtScreenOn;
|
||||||
private EditText mPasswordEntry;
|
private EditText mPasswordEntry;
|
||||||
private ImageView mSwitchImeButton;
|
private ImageView mSwitchImeButton;
|
||||||
@@ -116,13 +118,15 @@ public class KeyguardPasswordViewController
|
|||||||
EmergencyButtonController emergencyButtonController,
|
EmergencyButtonController emergencyButtonController,
|
||||||
@Main DelayableExecutor mainExecutor,
|
@Main DelayableExecutor mainExecutor,
|
||||||
@Main Resources resources,
|
@Main Resources resources,
|
||||||
FalsingCollector falsingCollector) {
|
FalsingCollector falsingCollector,
|
||||||
|
StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
|
||||||
super(view, keyguardUpdateMonitor, securityMode, lockPatternUtils, keyguardSecurityCallback,
|
super(view, keyguardUpdateMonitor, securityMode, lockPatternUtils, keyguardSecurityCallback,
|
||||||
messageAreaControllerFactory, latencyTracker, falsingCollector,
|
messageAreaControllerFactory, latencyTracker, falsingCollector,
|
||||||
emergencyButtonController);
|
emergencyButtonController);
|
||||||
mKeyguardSecurityCallback = keyguardSecurityCallback;
|
mKeyguardSecurityCallback = keyguardSecurityCallback;
|
||||||
mInputMethodManager = inputMethodManager;
|
mInputMethodManager = inputMethodManager;
|
||||||
mMainExecutor = mainExecutor;
|
mMainExecutor = mainExecutor;
|
||||||
|
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
|
||||||
mShowImeAtScreenOn = resources.getBoolean(R.bool.kg_show_ime_at_screen_on);
|
mShowImeAtScreenOn = resources.getBoolean(R.bool.kg_show_ime_at_screen_on);
|
||||||
mPasswordEntry = mView.findViewById(mView.getPasswordTextViewId());
|
mPasswordEntry = mView.findViewById(mView.getPasswordTextViewId());
|
||||||
mSwitchImeButton = mView.findViewById(R.id.switch_ime_button);
|
mSwitchImeButton = mView.findViewById(R.id.switch_ime_button);
|
||||||
@@ -205,6 +209,10 @@ public class KeyguardPasswordViewController
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void showInput() {
|
private void showInput() {
|
||||||
|
if (!mStatusBarKeyguardViewManager.isBouncerShowing()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
mView.post(() -> {
|
mView.post(() -> {
|
||||||
if (mView.isShown()) {
|
if (mView.isShown()) {
|
||||||
mPasswordEntry.requestFocus();
|
mPasswordEntry.requestFocus();
|
||||||
|
|||||||
@@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.keyguard
|
||||||
|
|
||||||
|
import android.testing.AndroidTestingRunner
|
||||||
|
import android.testing.TestableLooper
|
||||||
|
import android.view.inputmethod.InputMethodManager
|
||||||
|
import androidx.test.filters.SmallTest
|
||||||
|
import com.android.internal.util.LatencyTracker
|
||||||
|
import com.android.internal.widget.LockPatternUtils
|
||||||
|
import com.android.systemui.R
|
||||||
|
import com.android.systemui.SysuiTestCase
|
||||||
|
import com.android.systemui.classifier.FalsingCollector
|
||||||
|
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
|
||||||
|
import com.android.systemui.util.concurrency.DelayableExecutor
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.mockito.Mock
|
||||||
|
import org.mockito.Mockito
|
||||||
|
import org.mockito.Mockito.never
|
||||||
|
import org.mockito.Mockito.verify
|
||||||
|
import org.mockito.MockitoAnnotations
|
||||||
|
|
||||||
|
@SmallTest
|
||||||
|
@RunWith(AndroidTestingRunner::class)
|
||||||
|
@TestableLooper.RunWithLooper
|
||||||
|
class KeyguardPasswordViewControllerTest : SysuiTestCase() {
|
||||||
|
@Mock
|
||||||
|
private lateinit var keyguardPasswordView: KeyguardPasswordView
|
||||||
|
@Mock
|
||||||
|
lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor
|
||||||
|
@Mock
|
||||||
|
lateinit var securityMode: KeyguardSecurityModel.SecurityMode
|
||||||
|
@Mock
|
||||||
|
lateinit var lockPatternUtils: LockPatternUtils
|
||||||
|
@Mock
|
||||||
|
lateinit var keyguardSecurityCallback: KeyguardSecurityCallback
|
||||||
|
@Mock
|
||||||
|
lateinit var messageAreaControllerFactory: KeyguardMessageAreaController.Factory
|
||||||
|
@Mock
|
||||||
|
lateinit var latencyTracker: LatencyTracker
|
||||||
|
@Mock
|
||||||
|
lateinit var inputMethodManager: InputMethodManager
|
||||||
|
@Mock
|
||||||
|
lateinit var emergencyButtonController: EmergencyButtonController
|
||||||
|
@Mock
|
||||||
|
lateinit var mainExecutor: DelayableExecutor
|
||||||
|
@Mock
|
||||||
|
lateinit var falsingCollector: FalsingCollector
|
||||||
|
@Mock
|
||||||
|
lateinit var statusBarKeyguardViewManager: StatusBarKeyguardViewManager
|
||||||
|
@Mock
|
||||||
|
private lateinit var mKeyguardMessageArea: KeyguardMessageArea
|
||||||
|
@Mock
|
||||||
|
private lateinit var mKeyguardMessageAreaController: KeyguardMessageAreaController
|
||||||
|
|
||||||
|
private lateinit var keyguardPasswordViewController: KeyguardPasswordViewController
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setup() {
|
||||||
|
MockitoAnnotations.initMocks(this)
|
||||||
|
Mockito.`when`(keyguardPasswordView
|
||||||
|
.findViewById<KeyguardMessageArea>(R.id.keyguard_message_area))
|
||||||
|
.thenReturn(mKeyguardMessageArea)
|
||||||
|
Mockito.`when`(messageAreaControllerFactory.create(mKeyguardMessageArea))
|
||||||
|
.thenReturn(mKeyguardMessageAreaController)
|
||||||
|
keyguardPasswordViewController = KeyguardPasswordViewController(
|
||||||
|
keyguardPasswordView,
|
||||||
|
keyguardUpdateMonitor,
|
||||||
|
securityMode,
|
||||||
|
lockPatternUtils,
|
||||||
|
keyguardSecurityCallback,
|
||||||
|
messageAreaControllerFactory,
|
||||||
|
latencyTracker,
|
||||||
|
inputMethodManager,
|
||||||
|
emergencyButtonController,
|
||||||
|
mainExecutor,
|
||||||
|
mContext.resources,
|
||||||
|
falsingCollector,
|
||||||
|
statusBarKeyguardViewManager
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testFocusWhenBouncerIsShown() {
|
||||||
|
Mockito.`when`(statusBarKeyguardViewManager.isBouncerShowing).thenReturn(true)
|
||||||
|
Mockito.`when`(keyguardPasswordView.isShown).thenReturn(true)
|
||||||
|
keyguardPasswordViewController.onResume(KeyguardSecurityView.VIEW_REVEALED)
|
||||||
|
keyguardPasswordView.post { verify(keyguardPasswordView).requestFocus() }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDoNotFocusWhenBouncerIsHidden() {
|
||||||
|
Mockito.`when`(statusBarKeyguardViewManager.isBouncerShowing).thenReturn(false)
|
||||||
|
Mockito.`when`(keyguardPasswordView.isShown).thenReturn(true)
|
||||||
|
keyguardPasswordViewController.onResume(KeyguardSecurityView.VIEW_REVEALED)
|
||||||
|
verify(keyguardPasswordView, never()).requestFocus()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -51,6 +51,7 @@ import com.android.systemui.classifier.FalsingCollector;
|
|||||||
import com.android.systemui.flags.FeatureFlags;
|
import com.android.systemui.flags.FeatureFlags;
|
||||||
import com.android.systemui.log.SessionTracker;
|
import com.android.systemui.log.SessionTracker;
|
||||||
import com.android.systemui.plugins.FalsingManager;
|
import com.android.systemui.plugins.FalsingManager;
|
||||||
|
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||||
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
||||||
@@ -123,6 +124,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
|||||||
private UserSwitcherController mUserSwitcherController;
|
private UserSwitcherController mUserSwitcherController;
|
||||||
@Mock
|
@Mock
|
||||||
private SessionTracker mSessionTracker;
|
private SessionTracker mSessionTracker;
|
||||||
|
@Mock
|
||||||
|
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||||
private Configuration mConfiguration;
|
private Configuration mConfiguration;
|
||||||
|
|
||||||
private KeyguardSecurityContainerController mKeyguardSecurityContainerController;
|
private KeyguardSecurityContainerController mKeyguardSecurityContainerController;
|
||||||
@@ -150,7 +153,7 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
|||||||
(KeyguardPasswordView) mKeyguardPasswordView, mKeyguardUpdateMonitor,
|
(KeyguardPasswordView) mKeyguardPasswordView, mKeyguardUpdateMonitor,
|
||||||
SecurityMode.Password, mLockPatternUtils, null,
|
SecurityMode.Password, mLockPatternUtils, null,
|
||||||
mKeyguardMessageAreaControllerFactory, null, null, mEmergencyButtonController,
|
mKeyguardMessageAreaControllerFactory, null, null, mEmergencyButtonController,
|
||||||
null, mock(Resources.class), null);
|
null, mock(Resources.class), null, mStatusBarKeyguardViewManager);
|
||||||
|
|
||||||
mKeyguardSecurityContainerController = new KeyguardSecurityContainerController.Factory(
|
mKeyguardSecurityContainerController = new KeyguardSecurityContainerController.Factory(
|
||||||
mView, mAdminSecondaryLockScreenControllerFactory, mLockPatternUtils,
|
mView, mAdminSecondaryLockScreenControllerFactory, mLockPatternUtils,
|
||||||
|
|||||||
Reference in New Issue
Block a user