Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0c7760e authored by Aaron Liu's avatar Aaron Liu Committed by Automerger Merge Worker
Browse files

Merge "[Bouncer] Add condition to keep keyboard hidden" into tm-dev am: 3600867c am: c1c91018

parents e8359c64 c1c91018
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -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,
+9 −1
Original line number Diff line number Diff line
@@ -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();
+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
+4 −1
Original line number Diff line number Diff line
@@ -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,