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

Commit 4a057a18 authored by Beverly's avatar Beverly Committed by Beverly Tai
Browse files

Update co-ex error logic

KeyguardIndication (bottom text area on LS)
- show transient messages for a minimum of 2000ms not including animation
time
- if dual auth is enrolled: only show face auth errors if the user
explicitly requested face auth

In general, don't request face auth on the global actions menu
(likely left over from when the power menu had affordances for
components requiring authentication)

Test: atest SystemUITest
Fixes: 186302245
Bug: 183698582
Change-Id: I0290c66addc9981bf3fe20de24110e2d35e1f8eb
parent 328ba5dc
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -173,7 +173,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
        @Override
        public void onSwipeUp() {
            if (!mUpdateMonitor.isFaceDetectionRunning()) {
                mUpdateMonitor.requestFaceAuth();
                mUpdateMonitor.requestFaceAuth(true);
                mKeyguardSecurityCallback.userActivity();
                showMessage(null, null);
            }
+10 −2
Original line number Diff line number Diff line
@@ -309,6 +309,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
    private RingerModeTracker mRingerModeTracker;
    private int mFingerprintRunningState = BIOMETRIC_STATE_STOPPED;
    private int mFaceRunningState = BIOMETRIC_STATE_STOPPED;
    private boolean mIsFaceAuthUserRequested;
    private LockPatternUtils mLockPatternUtils;
    private final IDreamManager mDreamManager;
    private boolean mIsDreaming;
@@ -2057,12 +2058,18 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
    /**
     * Requests face authentication if we're on a state where it's allowed.
     * This will re-trigger auth in case it fails.
     * @param userInitiatedRequest true if the user explicitly requested face auth
     */
    public void requestFaceAuth() {
        if (DEBUG) Log.d(TAG, "requestFaceAuth()");
    public void requestFaceAuth(boolean userInitiatedRequest) {
        if (DEBUG) Log.d(TAG, "requestFaceAuth() userInitiated=" + userInitiatedRequest);
        mIsFaceAuthUserRequested |= userInitiatedRequest;
        updateFaceListeningState();
    }

    public boolean isFaceAuthUserRequested() {
        return mIsFaceAuthUserRequested;
    }

    /**
     * In case face auth is running, cancel it.
     */
@@ -2079,6 +2086,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        mHandler.removeCallbacks(mRetryFaceAuthentication);
        boolean shouldListenForFace = shouldListenForFace();
        if (mFaceRunningState == BIOMETRIC_STATE_RUNNING && !shouldListenForFace) {
            mIsFaceAuthUserRequested = false;
            stopListeningForFace();
        } else if (mFaceRunningState != BIOMETRIC_STATE_RUNNING && shouldListenForFace) {
            startListeningForFace();
+1 −6
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ import android.widget.ProgressBar;
import android.widget.TextView;

import com.android.internal.R;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.settingslib.Utils;
import com.android.systemui.plugins.GlobalActions;
import com.android.systemui.scrim.ScrimDrawable;
@@ -51,7 +50,6 @@ public class GlobalActionsImpl implements GlobalActions, CommandQueue.Callbacks
    private final KeyguardStateController mKeyguardStateController;
    private final DeviceProvisionedController mDeviceProvisionedController;
    private final BlurUtils mBlurUtils;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private final CommandQueue mCommandQueue;
    private GlobalActionsDialogLite mGlobalActionsDialog;
    private boolean mDisabled;
@@ -60,15 +58,13 @@ public class GlobalActionsImpl implements GlobalActions, CommandQueue.Callbacks
    public GlobalActionsImpl(Context context, CommandQueue commandQueue,
            Lazy<GlobalActionsDialogLite> globalActionsDialogLazy, BlurUtils blurUtils,
            KeyguardStateController keyguardStateController,
            DeviceProvisionedController deviceProvisionedController,
            KeyguardUpdateMonitor keyguardUpdateMonitor) {
            DeviceProvisionedController deviceProvisionedController) {
        mContext = context;
        mGlobalActionsDialogLazy = globalActionsDialogLazy;
        mKeyguardStateController = keyguardStateController;
        mDeviceProvisionedController = deviceProvisionedController;
        mCommandQueue = commandQueue;
        mBlurUtils = blurUtils;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mCommandQueue.addCallback(this);
    }

@@ -87,7 +83,6 @@ public class GlobalActionsImpl implements GlobalActions, CommandQueue.Callbacks
        mGlobalActionsDialog = mGlobalActionsDialogLazy.get();
        mGlobalActionsDialog.showOrHideDialog(mKeyguardStateController.isShowing(),
                mDeviceProvisionedController.isDeviceProvisioned());
        mKeyguardUpdateMonitor.requestFaceAuth();
    }

    @Override
+26 −2
Original line number Diff line number Diff line
@@ -40,18 +40,22 @@ public class KeyguardIndication {
    private final View.OnClickListener mOnClickListener;
    @Nullable
    private final Drawable mBackground;
    @Nullable
    private final Long mMinVisibilityMillis; // in milliseconds

    private KeyguardIndication(
            CharSequence message,
            ColorStateList textColor,
            Drawable icon,
            View.OnClickListener onClickListener,
            Drawable background) {
            Drawable background,
            Long minVisibilityMillis) {
        mMessage = message;
        mTextColor = textColor;
        mIcon = icon;
        mOnClickListener = onClickListener;
        mBackground = background;
        mMinVisibilityMillis = minVisibilityMillis;
    }

    /**
@@ -89,6 +93,14 @@ public class KeyguardIndication {
        return mBackground;
    }

    /**
     * Minimum time to show text in milliseconds.
     * @return null if unspecified
     */
    public @Nullable Long getMinVisibilityMillis() {
        return mMinVisibilityMillis;
    }

    @Override
    public String toString() {
        String str = "KeyguardIndication{";
@@ -96,6 +108,7 @@ public class KeyguardIndication {
        if (mIcon != null) str += " mIcon=" + mIcon;
        if (mOnClickListener != null) str += " mOnClickListener=" + mOnClickListener;
        if (mBackground != null) str += " mBackground=" + mBackground;
        if (mMinVisibilityMillis != null) str += " mMinVisibilityMillis=" + mMinVisibilityMillis;
        str += "}";
        return str;
    }
@@ -109,6 +122,7 @@ public class KeyguardIndication {
        private View.OnClickListener mOnClickListener;
        private ColorStateList mTextColor;
        private Drawable mBackground;
        private Long mMinVisibilityMillis;

        public Builder() { }

@@ -154,6 +168,15 @@ public class KeyguardIndication {
            return this;
        }

        /**
         * Optional. Set a required minimum visibility time in milliseconds for the text
         * to show.
         */
        public Builder setMinVisibilityMillis(Long minVisibilityMillis) {
            this.mMinVisibilityMillis = minVisibilityMillis;
            return this;
        }

        /**
         * Build the KeyguardIndication.
         */
@@ -166,7 +189,8 @@ public class KeyguardIndication {
            }

            return new KeyguardIndication(
                    mMessage, mTextColor, mIcon, mOnClickListener, mBackground);
                    mMessage, mTextColor, mIcon, mOnClickListener, mBackground,
                    mMinVisibilityMillis);
        }
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -167,12 +167,14 @@ public class KeyguardIndicationRotateTextViewController extends
     * - can be presented with an "error" color if isError is true
     */
    public void showTransient(CharSequence newIndication, boolean isError) {
        final long inAnimationDuration = 600L; // see KeyguardIndicationTextView.getYInDuration
        updateIndication(INDICATION_TYPE_TRANSIENT,
                new KeyguardIndication.Builder()
                        .setMessage(newIndication)
                        .setTextColor(isError
                                ? Utils.getColorError(getContext())
                                : mInitialTextColorState)
                        .setMinVisibilityMillis(2000L + inAnimationDuration)
                        .build(),
                /* showImmediately */true);
    }
Loading