From 58ba685bac9bd7a0f37b66678fa8414407e3abcf Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Tue, 18 Jul 2017 17:10:29 +0200 Subject: [PATCH] Fingerprint: Show bouncer when fingerprint is disallowed Fixes an issue where the bouncer was no longer showing after we successfully authed a fingerprint but it was not allowed to unlock the device. Change-Id: Ieb91e876b8b7e4daf64141db1718451eb3ba1368 Fixes: 62446740 Test: Enter 5 wrong lockscreen credentials, locking out for 30 seconds. During that time try to unlock with fingerprint. Verify it shows the bouncer reliably. --- .../phone/FingerprintUnlockController.java | 24 +++++++++++++++++-- .../systemui/statusbar/phone/StatusBar.java | 1 + 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java index 5af80f546f48b..1c5c4f26ded3f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java @@ -29,6 +29,7 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.LatencyTracker; import com.android.systemui.Dependency; import com.android.systemui.keyguard.KeyguardViewMediator; +import com.android.systemui.keyguard.WakefulnessLifecycle; /** * Controller which coordinates all the fingerprint unlocking actions with the UI. @@ -99,6 +100,7 @@ public class FingerprintUnlockController extends KeyguardUpdateMonitorCallback { private final UnlockMethodCache mUnlockMethodCache; private final Context mContext; private int mPendingAuthenticatedUserId = -1; + private boolean mPendingShowBouncer; public FingerprintUnlockController(Context context, DozeScrimController dozeScrimController, @@ -110,6 +112,7 @@ public class FingerprintUnlockController extends KeyguardUpdateMonitorCallback { mPowerManager = context.getSystemService(PowerManager.class); mUpdateMonitor = KeyguardUpdateMonitor.getInstance(context); mUpdateMonitor.registerCallback(this); + Dependency.get(WakefulnessLifecycle.class).addObserver(mWakefulnessObserver); mStatusBarWindowManager = Dependency.get(StatusBarWindowManager.class); mDozeScrimController = dozeScrimController; mKeyguardViewMediator = keyguardViewMediator; @@ -212,9 +215,10 @@ public class FingerprintUnlockController extends KeyguardUpdateMonitorCallback { Trace.beginSection("MODE_UNLOCK or MODE_SHOW_BOUNCER"); if (!wasDeviceInteractive) { mStatusBarKeyguardViewManager.notifyDeviceWakeUpRequested(); + mPendingShowBouncer = true; + } else { + showBouncer(); } - mStatusBarKeyguardViewManager.animateCollapsePanels( - FINGERPRINT_COLLAPSE_SPEEDUP_FACTOR); Trace.endSection(); break; case MODE_WAKE_AND_UNLOCK_PULSING: @@ -247,6 +251,12 @@ public class FingerprintUnlockController extends KeyguardUpdateMonitorCallback { Trace.endSection(); } + private void showBouncer() { + mStatusBarKeyguardViewManager.animateCollapsePanels( + FINGERPRINT_COLLAPSE_SPEEDUP_FACTOR); + mPendingShowBouncer = false; + } + @Override public void onStartedGoingToSleep(int why) { mPendingAuthenticatedUserId = -1; @@ -338,4 +348,14 @@ public class FingerprintUnlockController extends KeyguardUpdateMonitorCallback { } mStatusBar.notifyFpAuthModeChanged(); } + + private final WakefulnessLifecycle.Observer mWakefulnessObserver = + new WakefulnessLifecycle.Observer() { + @Override + public void onFinishedWakingUp() { + if (mPendingShowBouncer) { + FingerprintUnlockController.this.showBouncer(); + } + } + }; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index e90d1c1e27b55..a6fbf49ee15c5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -5146,6 +5146,7 @@ public class StatusBar extends SystemUI implements DemoMode, mStackScroller.setAnimationsEnabled(true); mVisualStabilityManager.setScreenOn(true); mNotificationPanel.setTouchDisabled(false); + mDozeServiceHost.stopDozing(); updateVisibleToUser(); updateIsKeyguard(); }