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

Commit a5239891 authored by Brian Colonna's avatar Brian Colonna
Browse files

Enabling Face Unlock for user switching (bug 8495282)

We had been intentionally disabling FUL when switching to a new user.
The reason was that we were only getting a signal when the user switch
started, not when it completed.  If we started FUL at the beginning of
the user switch, it could be completed by the time the user switch
completed.  We now have a signal to tell us that the switch completed.

Prior to this change, FUL would start whenever keyguard is created.
For a user switch, keyguard is recreated when we get
onUserSwitching(), but we don't want FUL to start until we get
onUserSwitchComplete().  So with this change, if onResume() happens
because of a user switch it doesn't start FUL until we get
onUserSwitchComplete().

Change-Id: I1d3da0a32b9b4cf0cfa5c577f1697d2a41ee4fda
parent 330a9fe3
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -151,7 +151,9 @@ public class KeyguardFaceUnlockView extends LinearLayout implements KeyguardSecu
    public void onResume(int reason) {
        if (DEBUG) Log.d(TAG, "onResume()");
        mIsShowing = KeyguardUpdateMonitor.getInstance(mContext).isKeyguardVisible();
        if (!KeyguardUpdateMonitor.getInstance(mContext).isSwitchingUser()) {
          maybeStartBiometricUnlock();
        }
        KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mUpdateCallback);

        // Registers a callback which handles stopping the biometric unlock and restarting it in
@@ -268,6 +270,14 @@ public class KeyguardFaceUnlockView extends LinearLayout implements KeyguardSecu
            // mLockPatternUtils.setCurrentUser(userId);
        }

        @Override
        public void onUserSwitchComplete(int userId) {
            if (DEBUG) Log.d(TAG, "onUserSwitchComplete(" + userId + ")");
            if (mBiometricUnlock != null) {
                maybeStartBiometricUnlock();
            }
        }

        @Override
        public void onKeyguardVisibilityChanged(boolean showing) {
            if (DEBUG) Log.d(TAG, "onKeyguardVisibilityChanged(" + showing + ")");
+8 −1
Original line number Diff line number Diff line
@@ -124,6 +124,8 @@ public class KeyguardUpdateMonitor {
            mCallbacks = Lists.newArrayList();
    private ContentObserver mDeviceProvisionedObserver;

    private boolean mSwitchingUser;

    private final Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
@@ -461,11 +463,13 @@ public class KeyguardUpdateMonitor {
                        public void onUserSwitching(int newUserId, IRemoteCallback reply) {
                            mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_SWITCHING,
                                    newUserId, 0, reply));
                            mSwitchingUser = true;
                        }
                        @Override
                        public void onUserSwitchComplete(int newUserId) throws RemoteException {
                            mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_SWITCH_COMPLETE,
                                    newUserId));
                            mSwitchingUser = false;
                        }
                    });
        } catch (RemoteException e) {
@@ -529,7 +533,6 @@ public class KeyguardUpdateMonitor {
                cb.onUserSwitching(userId);
            }
        }
        setAlternateUnlockEnabled(false);
        try {
            reply.sendResult(null);
        } catch (RemoteException e) {
@@ -733,6 +736,10 @@ public class KeyguardUpdateMonitor {
        return mKeyguardIsVisible;
    }

    public boolean isSwitchingUser() {
        return mSwitchingUser;
    }

    private static boolean isBatteryUpdateInteresting(BatteryStatus old, BatteryStatus current) {
        final boolean nowPluggedIn = current.isPluggedIn();
        final boolean wasPluggedIn = old.isPluggedIn();
+3 −2
Original line number Diff line number Diff line
@@ -319,8 +319,9 @@ public class KeyguardViewMediator {
                mSwitchingUser = true;
                resetStateLocked(null);
                adjustStatusBarLocked();
                // Disable face unlock when the user switches.
                KeyguardUpdateMonitor.getInstance(mContext).setAlternateUnlockEnabled(false);
                // When we switch users we want to bring the new user to the biometric unlock even
                // if the current user has gone to the backup.
                KeyguardUpdateMonitor.getInstance(mContext).setAlternateUnlockEnabled(true);
            }
        }