diff options
3 files changed, 22 insertions, 4 deletions
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardFaceUnlockView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardFaceUnlockView.java index 55e8c7ce63d0..3e499b2b0be7 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardFaceUnlockView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardFaceUnlockView.java @@ -150,7 +150,9 @@ public class KeyguardFaceUnlockView extends LinearLayout implements KeyguardSecu public void onResume(int reason) { if (DEBUG) Log.d(TAG, "onResume()"); mIsShowing = KeyguardUpdateMonitor.getInstance(mContext).isKeyguardVisible(); - maybeStartBiometricUnlock(); + 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 } @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 + ")"); boolean wasShowing = false; diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java index d45048f0df63..79d01dd7fff3 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -122,6 +122,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) { @@ -459,11 +461,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) { @@ -527,7 +531,6 @@ public class KeyguardUpdateMonitor { cb.onUserSwitching(userId); } } - setAlternateUnlockEnabled(false); try { reply.sendResult(null); } catch (RemoteException e) { @@ -731,6 +734,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(); diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java index 8232ca3aa322..78ff3a8ffdfe 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java @@ -324,8 +324,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); } } |