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

Commit 4a410171 authored by Adrian Roos's avatar Adrian Roos
Browse files

Only show face unlock indication if it applies

When trust is not managed or the indication is set for
a different than the current user, don't show it on the
lock screen.

Bug: 17034124
Change-Id: Ia470520d6bd05db8417b3b0bb1f55894f791554e
parent 46a8f452
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -218,7 +218,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
                    handleFingerprintProcessed(msg.arg1);
                    break;
                case MSG_FACE_UNLOCK_STATE_CHANGED:
                    handleFaceUnlockStateChanged(msg.arg1 != 0);
                    handleFaceUnlockStateChanged(msg.arg1 != 0, msg.arg2);
                    break;
            }
        }
@@ -227,6 +227,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
    private SparseBooleanArray mUserHasTrust = new SparseBooleanArray();
    private SparseBooleanArray mUserTrustIsManaged = new SparseBooleanArray();
    private SparseBooleanArray mUserFingerprintRecognized = new SparseBooleanArray();
    private SparseBooleanArray mUserFaceUnlockRunning = new SparseBooleanArray();

    @Override
    public void onTrustChanged(boolean enabled, int userId, boolean initiatedByUser) {
@@ -297,15 +298,20 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
        }
    }

    private void handleFaceUnlockStateChanged(boolean running) {
    private void handleFaceUnlockStateChanged(boolean running, int userId) {
        mUserFaceUnlockRunning.put(userId, running);
        for (int i = 0; i < mCallbacks.size(); i++) {
            KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
            if (cb != null) {
                cb.onFaceUnlockStateChanged(running);
                cb.onFaceUnlockStateChanged(running, userId);
            }
        }
    }

    public boolean isFaceUnlockRunning(int userId) {
        return mUserFaceUnlockRunning.get(userId);
    }

    private boolean isTrustDisabled(int userId) {
        final DevicePolicyManager dpm =
                (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
@@ -398,9 +404,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
            } else if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
                dispatchBootCompleted();
            } else if (ACTION_FACE_UNLOCK_STARTED.equals(action)) {
                mHandler.sendMessage(mHandler.obtainMessage(MSG_FACE_UNLOCK_STATE_CHANGED, 1, 0));
                mHandler.sendMessage(mHandler.obtainMessage(MSG_FACE_UNLOCK_STATE_CHANGED, 1,
                        getSendingUserId()));
            } else if (ACTION_FACE_UNLOCK_STOPPED.equals(action)) {
                mHandler.sendMessage(mHandler.obtainMessage(MSG_FACE_UNLOCK_STATE_CHANGED, 0, 0));
                mHandler.sendMessage(mHandler.obtainMessage(MSG_FACE_UNLOCK_STATE_CHANGED, 0,
                        getSendingUserId()));
            }
        }
    };
+1 −1
Original line number Diff line number Diff line
@@ -197,5 +197,5 @@ public class KeyguardUpdateMonitorCallback {
    /**
     * Called when the state of face unlock changed.
     */
    public void onFaceUnlockStateChanged(boolean running) { }
    public void onFaceUnlockStateChanged(boolean running, int userId) { }
}
+1 −8
Original line number Diff line number Diff line
@@ -80,7 +80,6 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
    private FlashlightController mFlashlightController;
    private PreviewInflater mPreviewInflater;
    private KeyguardIndicationController mIndicationController;
    private boolean mFaceUnlockRunning;

    private final TrustDrawable mTrustDrawable;

@@ -299,7 +298,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
            return;
        }
        // TODO: Real icon for facelock.
        int iconRes = mFaceUnlockRunning ? R.drawable.ic_account_circle
        int iconRes = mUnlockMethodCache.isFaceUnlockRunning() ? R.drawable.ic_account_circle
                : mUnlockMethodCache.isMethodInsecure() ? R.drawable.ic_lock_open_24dp
                : R.drawable.ic_lock_24dp;
        mLockIcon.setImageResource(iconRes);
@@ -376,12 +375,6 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
            updateCameraVisibility();
        }

        @Override
        public void onFaceUnlockStateChanged(boolean running) {
            mFaceUnlockRunning = running;
            updateLockIcon();
        }

        @Override
        public void onScreenTurnedOn() {
            updateLockIcon();
+15 −1
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ public class UnlockMethodCache {
    private final ArrayList<OnUnlockMethodChangedListener> mListeners = new ArrayList<>();
    private boolean mMethodInsecure;
    private boolean mTrustManaged;
    private boolean mFaceUnlockRunning;

    private UnlockMethodCache(Context ctx) {
        mLockPatternUtils = new LockPatternUtils(ctx);
@@ -73,10 +74,14 @@ public class UnlockMethodCache {
        boolean methodInsecure = !mLockPatternUtils.isSecure() ||
                mKeyguardUpdateMonitor.getUserHasTrust(user);
        boolean trustManaged = mKeyguardUpdateMonitor.getUserTrustIsManaged(user);
        boolean changed = methodInsecure != mMethodInsecure || trustManaged != mTrustManaged;
        boolean faceUnlockRunning = mKeyguardUpdateMonitor.isFaceUnlockRunning(user)
                && trustManaged;
        boolean changed = methodInsecure != mMethodInsecure || trustManaged != mTrustManaged
                || faceUnlockRunning != mFaceUnlockRunning;
        if (changed || updateAlways) {
            mMethodInsecure = methodInsecure;
            mTrustManaged = trustManaged;
            mFaceUnlockRunning = faceUnlockRunning;
            notifyListeners(mMethodInsecure);
        }
    }
@@ -112,12 +117,21 @@ public class UnlockMethodCache {
        public void onFingerprintRecognized(int userId) {
            updateMethodSecure(false /* updateAlways */);
        }

        @Override
        public void onFaceUnlockStateChanged(boolean running, int userId) {
            updateMethodSecure(false /* updateAlways */);
        }
    };

    public boolean isTrustManaged() {
        return mTrustManaged;
    }

    public boolean isFaceUnlockRunning() {
        return mFaceUnlockRunning;
    }

    public static interface OnUnlockMethodChangedListener {
        void onMethodSecureChanged(boolean methodSecure);
    }