Loading packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java +6 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading @@ -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; Loading @@ -191,6 +194,7 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView> mEmergencyButtonControllerFactory = emergencyButtonControllerFactory; mFalsingCollector = falsingCollector; mDevicePostureController = devicePostureController; mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; } /** Create a new {@link KeyguardInputViewController}. */ Loading @@ -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, Loading packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java +9 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -205,6 +209,10 @@ public class KeyguardPasswordViewController } private void showInput() { if (!mStatusBarKeyguardViewManager.isBouncerShowing()) { return; } mView.post(() -> { if (mView.isShown()) { mPasswordEntry.requestFocus(); Loading packages/SystemUI/tests/src/com/android/keyguard/KeyguardPasswordViewControllerTest.kt 0 → 100644 +114 −0 Original line number Diff line number Diff line /* * 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() } } No newline at end of file packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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, Loading Loading
packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java +6 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading @@ -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; Loading @@ -191,6 +194,7 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView> mEmergencyButtonControllerFactory = emergencyButtonControllerFactory; mFalsingCollector = falsingCollector; mDevicePostureController = devicePostureController; mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; } /** Create a new {@link KeyguardInputViewController}. */ Loading @@ -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, Loading
packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java +9 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -205,6 +209,10 @@ public class KeyguardPasswordViewController } private void showInput() { if (!mStatusBarKeyguardViewManager.isBouncerShowing()) { return; } mView.post(() -> { if (mView.isShown()) { mPasswordEntry.requestFocus(); Loading
packages/SystemUI/tests/src/com/android/keyguard/KeyguardPasswordViewControllerTest.kt 0 → 100644 +114 −0 Original line number Diff line number Diff line /* * 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() } } No newline at end of file
packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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, Loading