Interstitial frame for grace period of face auth
Delay bouncer for a few millis if face auth is happening to avoid
overlaping animations.
Fixes: 130327140
Test: manual
Test: atest KeyguardBouncerTest
Change-Id: I6873605ba3e8d54af86325d81b10cc6aec131cf2
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
index 47ad0c1..ffb5e81 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
@@ -22,12 +22,15 @@
import android.annotation.Nullable;
import android.app.AlarmManager;
import android.content.Context;
+import android.os.Handler;
+import android.os.Looper;
import android.util.Log;
import android.view.ViewGroup;
import com.android.internal.colorextraction.ColorExtractor.GradientColors;
import com.android.internal.util.function.TriConsumer;
import com.android.internal.widget.LockPatternUtils;
+import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.ViewMediatorCallback;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.classifier.FalsingManager;
@@ -125,7 +128,8 @@
DismissCallbackRegistry dismissCallbackRegistry,
KeyguardBouncer.BouncerExpansionCallback expansionCallback) {
return new KeyguardBouncer(context, callback, lockPatternUtils, container,
- dismissCallbackRegistry, FalsingManager.getInstance(context), expansionCallback);
+ dismissCallbackRegistry, FalsingManager.getInstance(context), expansionCallback,
+ KeyguardUpdateMonitor.getInstance(context), new Handler(Looper.getMainLooper()));
}
public ScrimController createScrimController(ScrimView scrimBehind, ScrimView scrimInFront,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
index b00d874..3c2881d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
@@ -54,6 +54,7 @@
public class KeyguardBouncer {
private static final String TAG = "KeyguardBouncer";
+ static final long BOUNCER_FACE_DELAY = 800;
static final float ALPHA_EXPANSION_THRESHOLD = 0.95f;
static final float EXPANSION_HIDDEN = 1f;
static final float EXPANSION_VISIBLE = 0f;
@@ -66,6 +67,7 @@
private final DismissCallbackRegistry mDismissCallbackRegistry;
private final Handler mHandler;
private final BouncerExpansionCallback mExpansionCallback;
+ private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback =
new KeyguardUpdateMonitorCallback() {
@Override
@@ -93,16 +95,18 @@
public KeyguardBouncer(Context context, ViewMediatorCallback callback,
LockPatternUtils lockPatternUtils, ViewGroup container,
DismissCallbackRegistry dismissCallbackRegistry, FalsingManager falsingManager,
- BouncerExpansionCallback expansionCallback) {
+ BouncerExpansionCallback expansionCallback,
+ KeyguardUpdateMonitor keyguardUpdateMonitor, Handler handler) {
mContext = context;
mCallback = callback;
mLockPatternUtils = lockPatternUtils;
mContainer = container;
- KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mUpdateMonitorCallback);
+ mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mFalsingManager = falsingManager;
mDismissCallbackRegistry = dismissCallbackRegistry;
mExpansionCallback = expansionCallback;
- mHandler = new Handler();
+ mHandler = handler;
+ mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
}
public void show(boolean resetSecuritySelection) {
@@ -164,7 +168,11 @@
// Split up the work over multiple frames.
DejankUtils.removeCallbacks(mResetRunnable);
- DejankUtils.postAfterTraversal(mShowRunnable);
+ if (mKeyguardUpdateMonitor.isFaceDetectionRunning()) {
+ mHandler.postDelayed(mShowRunnable, BOUNCER_FACE_DELAY);
+ } else {
+ DejankUtils.postAfterTraversal(mShowRunnable);
+ }
mCallback.onBouncerVisiblityChanged(true /* shown */);
mExpansionCallback.onStartingToShow();
@@ -266,6 +274,7 @@
private void cancelShowRunnable() {
DejankUtils.removeCallbacks(mShowRunnable);
+ mHandler.removeCallbacks(mShowRunnable);
mShowingSoon = false;
}