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

Commit 85d3edb7 authored by Beverly Tai's avatar Beverly Tai Committed by Android (Google) Code Review
Browse files

Merge "Don't request focus on PIN's passwordView unless view is visible" into main

parents bde539fd a72db652
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -17,11 +17,13 @@
package com.android.keyguard;

import static com.android.internal.widget.flags.Flags.FLAG_HIDE_LAST_CHAR_WITH_PHYSICAL_INPUT;
import static com.android.systemui.Flags.FLAG_BOUNCER_LIFECYCLE_FIX;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.when;
@@ -142,11 +144,20 @@ public class KeyguardPinBasedInputViewControllerTest extends SysuiTestCase {
    }

    @Test
    @EnableFlags(FLAG_BOUNCER_LIFECYCLE_FIX)
    public void onResume_requestsFocus() {
        when(mPinBasedInputView.isVisibleToUser()).thenReturn(true);
        mKeyguardPinViewController.onResume(KeyguardSecurityView.SCREEN_ON);
        verify(mPasswordEntry).requestFocus();
    }

    @Test
    public void onResume_doesNotRequestFocusIfNotVisible() {
        when(mPinBasedInputView.isVisibleToUser()).thenReturn(false);
        mKeyguardPinViewController.onResume(KeyguardSecurityView.SCREEN_ON);
        verify(mPasswordEntry, never()).requestFocus();
    }

    @Test
    public void testGetInitialMessageResId() {
        assertThat(mKeyguardPinViewController.getInitialMessageResId()).isNotEqualTo(0);
+7 −3
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_RESTART_FO
import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_TIMEOUT;
import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_TRUSTAGENT_EXPIRED;
import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_USER_REQUEST;
import static com.android.systemui.Flags.bouncerLifecycleFix;
import static com.android.systemui.Flags.pinInputFieldStyledFocusState;

import android.animation.Animator;
@@ -79,7 +80,8 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView
    protected void setPasswordEntryEnabled(boolean enabled) {
        mPasswordEntry.setEnabled(enabled);
        mOkButton.setEnabled(enabled);
        if (enabled && !mPasswordEntry.hasFocus()) {
        if (enabled && !mPasswordEntry.hasFocus()
                && (!bouncerLifecycleFix() || isVisibleToUser())) {
            mPasswordEntry.requestFocus();
        }
    }
@@ -88,7 +90,7 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView
    protected void setPasswordEntryInputEnabled(boolean enabled) {
        mPasswordEntry.setEnabled(enabled);
        mOkButton.setEnabled(enabled);
        if (enabled) {
        if (enabled && (!bouncerLifecycleFix() || isVisibleToUser())) {
            mPasswordEntry.requestFocus();
        }
    }
@@ -201,7 +203,9 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView
        mButtons[8] = findViewById(R.id.key8);
        mButtons[9] = findViewById(R.id.key9);

        if ((!bouncerLifecycleFix() || isVisibleToUser())) {
            mPasswordEntry.requestFocus();
        }
        super.onFinishInflate();
        reloadColors();
    }
+7 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.keyguard;
import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_FOCUSED;

import static com.android.internal.widget.flags.Flags.hideLastCharWithPhysicalInput;
import static com.android.systemui.Flags.bouncerLifecycleFix;
import static com.android.systemui.Flags.pinInputFieldStyledFocusState;
import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow;

@@ -262,6 +263,12 @@ public abstract class KeyguardPinBasedInputViewController<T extends KeyguardPinB
    @Override
    public void onResume(int reason) {
        super.onResume(reason);

        if (bouncerLifecycleFix() && !mView.isVisibleToUser()) {
            // don't request focus if view isn't visible
            return;
        }

        // It's possible to reach a state here where mPasswordEntry believes it is focused
        // but it is not actually focused. This state will prevent the view from gaining focus,
        // as requestFocus will no-op since the focus flag is already set. By clearing focus first,
+1 −23
Original line number Diff line number Diff line
@@ -429,30 +429,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard

                @Override
                public void onDevicePolicyManagerStateChanged() {
                    if (Flags.bouncerLifecycleFix()) {
                        // Update the current security mode without showing it
                        SecurityMode currSecurityMode = whitelistIpcs(
                                () -> mSecurityModel.getSecurityMode(
                                        mSelectedUserInteractor.getSelectedUserId())
                        );
                        if (DEBUG) {
                            Log.d(TAG, "onDevicePolicyManagerStateChanged("
                                    + currSecurityMode + ")");
                        }

                        if (currSecurityMode == SecurityMode.Invalid
                                || currSecurityMode == mCurrentSecurityMode
                                || currSecurityMode == SimPuk
                                || currSecurityMode == SimPin) {
                            return;
                        }

                        getCurrentSecurityController(oldView -> oldView.onPause());
                        mCurrentSecurityMode = currSecurityMode;
                    } else {
                    showPrimarySecurityScreen(false);
                }
                }
            };
    private final SelectedUserInteractor mSelectedUserInteractor;
    private final Provider<DeviceEntryInteractor> mDeviceEntryInteractor;