[Bouncer] Add condition to keep keyboard hidden
Ensure that keyboard remains hidden unless bouncer is showing completely. Fixes: 199679635 Test: Manual Change-Id: If9f18f4c85d890f7acff2382d379251a5679c3e5
This commit is contained in:
@@ -28,6 +28,7 @@ import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.classifier.FalsingCollector;
|
||||
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.util.ViewController;
|
||||
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 FalsingCollector mFalsingCollector;
|
||||
private final DevicePostureController mDevicePostureController;
|
||||
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
|
||||
@Inject
|
||||
public Factory(KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||
@@ -178,7 +180,8 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView>
|
||||
@Main Resources resources, LiftToActivateListener liftToActivateListener,
|
||||
TelephonyManager telephonyManager, FalsingCollector falsingCollector,
|
||||
EmergencyButtonController.Factory emergencyButtonControllerFactory,
|
||||
DevicePostureController devicePostureController) {
|
||||
DevicePostureController devicePostureController,
|
||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
|
||||
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
||||
mLockPatternUtils = lockPatternUtils;
|
||||
mLatencyTracker = latencyTracker;
|
||||
@@ -191,6 +194,7 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView>
|
||||
mEmergencyButtonControllerFactory = emergencyButtonControllerFactory;
|
||||
mFalsingCollector = falsingCollector;
|
||||
mDevicePostureController = devicePostureController;
|
||||
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
|
||||
}
|
||||
|
||||
/** Create a new {@link KeyguardInputViewController}. */
|
||||
@@ -211,7 +215,7 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView>
|
||||
mKeyguardUpdateMonitor, securityMode, mLockPatternUtils,
|
||||
keyguardSecurityCallback, mMessageAreaControllerFactory, mLatencyTracker,
|
||||
mInputMethodManager, emergencyButtonController, mMainExecutor, mResources,
|
||||
mFalsingCollector);
|
||||
mFalsingCollector, mStatusBarKeyguardViewManager);
|
||||
|
||||
} else if (keyguardInputView instanceof KeyguardPINView) {
|
||||
return new KeyguardPinViewController((KeyguardPINView) keyguardInputView,
|
||||
|
||||
@@ -43,6 +43,7 @@ import com.android.settingslib.Utils;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.classifier.FalsingCollector;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||
import com.android.systemui.util.concurrency.DelayableExecutor;
|
||||
|
||||
import java.util.List;
|
||||
@@ -55,6 +56,7 @@ public class KeyguardPasswordViewController
|
||||
private final KeyguardSecurityCallback mKeyguardSecurityCallback;
|
||||
private final InputMethodManager mInputMethodManager;
|
||||
private final DelayableExecutor mMainExecutor;
|
||||
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
private final boolean mShowImeAtScreenOn;
|
||||
private EditText mPasswordEntry;
|
||||
private ImageView mSwitchImeButton;
|
||||
@@ -116,13 +118,15 @@ public class KeyguardPasswordViewController
|
||||
EmergencyButtonController emergencyButtonController,
|
||||
@Main DelayableExecutor mainExecutor,
|
||||
@Main Resources resources,
|
||||
FalsingCollector falsingCollector) {
|
||||
FalsingCollector falsingCollector,
|
||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
|
||||
super(view, keyguardUpdateMonitor, securityMode, lockPatternUtils, keyguardSecurityCallback,
|
||||
messageAreaControllerFactory, latencyTracker, falsingCollector,
|
||||
emergencyButtonController);
|
||||
mKeyguardSecurityCallback = keyguardSecurityCallback;
|
||||
mInputMethodManager = inputMethodManager;
|
||||
mMainExecutor = mainExecutor;
|
||||
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
|
||||
mShowImeAtScreenOn = resources.getBoolean(R.bool.kg_show_ime_at_screen_on);
|
||||
mPasswordEntry = mView.findViewById(mView.getPasswordTextViewId());
|
||||
mSwitchImeButton = mView.findViewById(R.id.switch_ime_button);
|
||||
@@ -205,6 +209,10 @@ public class KeyguardPasswordViewController
|
||||
}
|
||||
|
||||
private void showInput() {
|
||||
if (!mStatusBarKeyguardViewManager.isBouncerShowing()) {
|
||||
return;
|
||||
}
|
||||
|
||||
mView.post(() -> {
|
||||
if (mView.isShown()) {
|
||||
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.log.SessionTracker;
|
||||
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.KeyguardStateController;
|
||||
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
||||
@@ -123,6 +124,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
||||
private UserSwitcherController mUserSwitcherController;
|
||||
@Mock
|
||||
private SessionTracker mSessionTracker;
|
||||
@Mock
|
||||
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
private Configuration mConfiguration;
|
||||
|
||||
private KeyguardSecurityContainerController mKeyguardSecurityContainerController;
|
||||
@@ -150,7 +153,7 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
||||
(KeyguardPasswordView) mKeyguardPasswordView, mKeyguardUpdateMonitor,
|
||||
SecurityMode.Password, mLockPatternUtils, null,
|
||||
mKeyguardMessageAreaControllerFactory, null, null, mEmergencyButtonController,
|
||||
null, mock(Resources.class), null);
|
||||
null, mock(Resources.class), null, mStatusBarKeyguardViewManager);
|
||||
|
||||
mKeyguardSecurityContainerController = new KeyguardSecurityContainerController.Factory(
|
||||
mView, mAdminSecondaryLockScreenControllerFactory, mLockPatternUtils,
|
||||
|
||||
Reference in New Issue
Block a user