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

Commit 4debf56a authored by Aaron Liu's avatar Aaron Liu Committed by Android (Google) Code Review
Browse files

Merge changes Ia1128b9d,I018e067e into udc-dev

* changes:
  Fix lockout state for auto pin confirm
  Fix pin error scenario for talkback.
parents 2b9dbdfc a2614f20
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -179,10 +179,10 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
                    handleAttemptLockout(deadline);
                }
            }
            mView.resetPasswordText(true /* animate */, false /* announce deletion if no match */);
            if (timeoutMs == 0) {
                mMessageAreaController.setMessage(mView.getWrongPasswordStringId());
            }
            mView.resetPasswordText(true /* animate */, false /* announce deletion if no match */);
            startErrorAnimation();
        }
    }
+29 −6
Original line number Diff line number Diff line
@@ -18,7 +18,9 @@ package com.android.keyguard;

import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;

import androidx.annotation.VisibleForTesting;
@@ -45,6 +47,31 @@ public class KeyguardMessageAreaController<T extends KeyguardMessageArea>
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private final ConfigurationController mConfigurationController;
    private final AnnounceRunnable mAnnounceRunnable;
    private final TextWatcher mTextWatcher = new TextWatcher() {
        @Override
        public void afterTextChanged(Editable editable) {
            CharSequence msg = editable;
            if (!TextUtils.isEmpty(msg)) {
                mView.removeCallbacks(mAnnounceRunnable);
                mAnnounceRunnable.setTextToAnnounce(msg);
                mView.postDelayed(() -> {
                    if (msg == mView.getText()) {
                        mAnnounceRunnable.run();
                    }
                }, ANNOUNCEMENT_DELAY);
            }
        }

        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            /* no-op */
        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            /* no-op */
        }
    };

    private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
        public void onFinishedGoingToSleep(int why) {
@@ -89,12 +116,14 @@ public class KeyguardMessageAreaController<T extends KeyguardMessageArea>
        mKeyguardUpdateMonitor.registerCallback(mInfoCallback);
        mView.setSelected(mKeyguardUpdateMonitor.isDeviceInteractive());
        mView.onThemeChanged();
        mView.addTextChangedListener(mTextWatcher);
    }

    @Override
    protected void onViewDetached() {
        mConfigurationController.removeCallback(mConfigurationListener);
        mKeyguardUpdateMonitor.removeCallback(mInfoCallback);
        mView.removeTextChangedListener(mTextWatcher);
    }

    /**
@@ -113,12 +142,6 @@ public class KeyguardMessageAreaController<T extends KeyguardMessageArea>
     */
    public void setMessage(CharSequence s, boolean animate) {
        mView.setMessage(s, animate);
        CharSequence msg = mView.getText();
        if (!TextUtils.isEmpty(msg)) {
            mView.removeCallbacks(mAnnounceRunnable);
            mAnnounceRunnable.setTextToAnnounce(msg);
            mView.postDelayed(mAnnounceRunnable, ANNOUNCEMENT_DELAY);
        }
    }

    public void setMessage(int resId) {
+0 −3
Original line number Diff line number Diff line
@@ -82,9 +82,6 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView
    protected void setPasswordEntryInputEnabled(boolean enabled) {
        mPasswordEntry.setEnabled(enabled);
        mOkButton.setEnabled(enabled);
        if (enabled && !mPasswordEntry.hasFocus()) {
            mPasswordEntry.requestFocus();
        }
    }

    @Override
+41 −29
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.keyguard;

import static com.android.systemui.keyguard.shared.constants.KeyguardBouncerConstants.DEFAULT_PIN_LENGTH;

import android.view.View;

import com.android.internal.util.LatencyTracker;
@@ -42,10 +40,9 @@ public class KeyguardPinViewController
    private NumPadButton mBackspaceKey;
    private View mOkButton = mView.findViewById(R.id.key_enter);

    private int mUserId;
    private long mPinLength;

    private int mPasswordFailedAttempts;
    private boolean mDisabledAutoConfirmation;

    protected KeyguardPinViewController(KeyguardPINView view,
            KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -84,9 +81,8 @@ public class KeyguardPinViewController

    protected void onUserInput() {
        super.onUserInput();
        if (isAutoConfirmation()) {
            updateOKButtonVisibility();
            updateBackSpaceVisibility();
        if (isAutoPinConfirmEnabledInSettings()) {
            updateAutoConfirmationState();
            if (mPasswordEntry.getText().length() == mPinLength
                    && mOkButton.getVisibility() == View.INVISIBLE) {
                verifyPasswordAndUnlock();
@@ -103,13 +99,9 @@ public class KeyguardPinViewController
    @Override
    public void startAppearAnimation() {
        if (mFeatureFlags.isEnabled(Flags.AUTO_PIN_CONFIRMATION)) {
            mUserId = KeyguardUpdateMonitor.getCurrentUser();
            mPinLength = mLockPatternUtils.getPinLength(mUserId);
            mBackspaceKey.setTransparentMode(/* isTransparentMode= */ isAutoConfirmation());
            updateOKButtonVisibility();
            updateBackSpaceVisibility();
            mPinLength = mLockPatternUtils.getPinLength(KeyguardUpdateMonitor.getCurrentUser());
            mPasswordEntry.setUsePinShapes(true);
            mPasswordEntry.setIsPinHinting(isAutoConfirmation() && isPinHinting());
            updateAutoConfirmationState();
        }
        super.startAppearAnimation();
    }
@@ -120,13 +112,25 @@ public class KeyguardPinViewController
                mKeyguardUpdateMonitor.needsSlowUnlockTransition(), finishRunnable);
    }

    @Override
    protected void handleAttemptLockout(long elapsedRealtimeDeadline) {
        super.handleAttemptLockout(elapsedRealtimeDeadline);
        updateAutoConfirmationState();
    }

    private void updateAutoConfirmationState() {
        mDisabledAutoConfirmation = mLockPatternUtils.getCurrentFailedPasswordAttempts(
                KeyguardUpdateMonitor.getCurrentUser()) >= MIN_FAILED_PIN_ATTEMPTS;
        updateOKButtonVisibility();
        updateBackSpaceVisibility();
        updatePinHinting();
    }

    /**
     * Updates the visibility of the OK button for auto confirm feature
     */
    private void updateOKButtonVisibility() {
        mPasswordFailedAttempts = mLockPatternUtils.getCurrentFailedPasswordAttempts(mUserId);
        if (isAutoConfirmation() && mPasswordFailedAttempts < MIN_FAILED_PIN_ATTEMPTS) {
        if (isAutoPinConfirmEnabledInSettings() && !mDisabledAutoConfirmation) {
            mOkButton.setVisibility(View.INVISIBLE);
        } else {
            mOkButton.setVisibility(View.VISIBLE);
@@ -138,29 +142,37 @@ public class KeyguardPinViewController
     * Visibility changes are only for auto confirmation configuration.
     */
    private void updateBackSpaceVisibility() {
        if (!isAutoConfirmation()) {
            return;
        }

        if (mPasswordEntry.getText().length() > 0) {
        boolean isAutoConfirmation = isAutoPinConfirmEnabledInSettings();
        mBackspaceKey.setTransparentMode(/* isTransparentMode= */
                isAutoConfirmation && !mDisabledAutoConfirmation);
        if (isAutoConfirmation) {
            if (mPasswordEntry.getText().length() > 0
                    || mDisabledAutoConfirmation) {
                mBackspaceKey.setVisibility(View.VISIBLE);
            } else {
                mBackspaceKey.setVisibility(View.INVISIBLE);
            }
        }
    }
    /** Updates whether to use pin hinting or not. */
    void updatePinHinting() {
        mPasswordEntry.setIsPinHinting(isAutoPinConfirmEnabledInSettings() && isPinHinting()
                && !mDisabledAutoConfirmation);
    }

    /**
     * Responsible for identifying if PIN hinting is to be enabled or not
     */
    private boolean isPinHinting() {
        return mLockPatternUtils.getPinLength(mUserId) == DEFAULT_PIN_LENGTH;
        return mLockPatternUtils.getPinLength(KeyguardUpdateMonitor.getCurrentUser())
                == DEFAULT_PIN_LENGTH;
    }

    /**
     * Responsible for identifying if auto confirm is enabled or not in Settings
     */
    private boolean isAutoConfirmation() {
    private boolean isAutoPinConfirmEnabledInSettings() {
        //Checks if user has enabled the auto confirm in Settings
        return mLockPatternUtils.isAutoPinConfirmEnabled(mUserId);
        return mLockPatternUtils.isAutoPinConfirmEnabled(KeyguardUpdateMonitor.getCurrentUser());
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -116,7 +116,12 @@ public class NumPadButton extends AlphaOptimizedImageButton implements NumPadAni
     * @param isTransparentMode
     */
    public void setTransparentMode(boolean isTransparentMode) {
        if (mIsTransparentMode == isTransparentMode) {
            return;
        }

        mIsTransparentMode = isTransparentMode;

        if (isTransparentMode) {
            setBackgroundColor(getResources().getColor(android.R.color.transparent));
        } else {
Loading