[DO NOT MERGE] Move onDrawn callback earlier

The new remote animation flow is waiting for the onDrawn callback to
be issues before triggering the exit animation. This means for
wakeAndUnlock flows, onDrawn cannot wait for the exit animation to
begin. Remove all code that put this callback into a pending state.

Also remove BiometricUnlockController delay. This causes a poor
animation experience when unlocking with devices (sunfish) that delay
the unlock.

Fixes: 220340156
Test: atest KeyguardViewMediatorTest && Use rear FPS devices with AoD
on/off

Change-Id: I6129c9d1fea76f8dded2a8d567c75fb21085a5dd
This commit is contained in:
Matt Pietal
2022-03-24 10:58:41 -04:00
parent 23d65f1d38
commit e2608c01b7
2 changed files with 3 additions and 45 deletions

View File

@@ -210,7 +210,6 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
private static final int KEYGUARD_DONE_PENDING_TIMEOUT = 13;
private static final int NOTIFY_STARTED_WAKING_UP = 14;
private static final int NOTIFY_SCREEN_TURNED_ON = 15;
private static final int NOTIFY_SCREEN_TURNED_OFF = 16;
private static final int NOTIFY_STARTED_GOING_TO_SLEEP = 17;
private static final int SYSTEM_READY = 18;
private static final int CANCEL_KEYGUARD_EXIT_ANIM = 19;
@@ -441,7 +440,6 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
private boolean mInGestureNavigationMode;
private boolean mWakeAndUnlocking;
private IKeyguardDrawnCallback mDrawnCallback;
private CharSequence mCustomMessage;
/**
@@ -1264,7 +1262,6 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
}
public void onScreenTurnedOff() {
notifyScreenTurnedOff();
mUpdateMonitor.dispatchScreenTurnedOff();
}
@@ -1668,12 +1665,6 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
mHandler.sendMessage(msg);
}
private void notifyScreenTurnedOff() {
if (DEBUG) Log.d(TAG, "notifyScreenTurnedOff");
Message msg = mHandler.obtainMessage(NOTIFY_SCREEN_TURNED_OFF);
mHandler.sendMessage(msg);
}
/**
* Send message to keyguard telling it to show itself
* @see #handleShow
@@ -1861,9 +1852,6 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
handleNotifyScreenTurnedOn();
Trace.endSection();
break;
case NOTIFY_SCREEN_TURNED_OFF:
handleNotifyScreenTurnedOff();
break;
case NOTIFY_STARTED_WAKING_UP:
Trace.beginSection(
"KeyguardViewMediator#handleMessage NOTIFY_STARTED_WAKING_UP");
@@ -2245,16 +2233,6 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
IRemoteAnimationRunner runner = mKeyguardExitAnimationRunner;
mKeyguardExitAnimationRunner = null;
if (mWakeAndUnlocking && mDrawnCallback != null) {
// Hack level over 9000: To speed up wake-and-unlock sequence, force it to report
// the next draw from here so we don't have to wait for window manager to signal
// this to our ViewRootImpl.
mKeyguardViewControllerLazy.get().getViewRootImpl().setReportNextDraw();
notifyDrawn(mDrawnCallback);
mDrawnCallback = null;
}
LatencyTracker.getInstance(mContext)
.onActionEnd(LatencyTracker.ACTION_LOCKSCREEN_UNLOCK);
@@ -2610,11 +2588,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
mKeyguardViewControllerLazy.get().onScreenTurningOn();
if (callback != null) {
if (mWakeAndUnlocking) {
mDrawnCallback = callback;
} else {
notifyDrawn(callback);
}
notifyDrawn(callback);
}
}
Trace.endSection();
@@ -2629,13 +2603,6 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
Trace.endSection();
}
private void handleNotifyScreenTurnedOff() {
synchronized (this) {
if (DEBUG) Log.d(TAG, "handleNotifyScreenTurnedOff");
mDrawnCallback = null;
}
}
private void notifyDrawn(final IKeyguardDrawnCallback callback) {
Trace.beginSection("KeyguardViewMediator#notifyDrawn");
if (mPendingDrawnTasks.decrementAndGet() == 0) {
@@ -2804,7 +2771,6 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
pw.print(" mPendingLock: "); pw.println(mPendingLock);
pw.print(" mPendingDrawnTasks: "); pw.println(mPendingDrawnTasks.get());
pw.print(" mWakeAndUnlocking: "); pw.println(mWakeAndUnlocking);
pw.print(" mDrawnCallback: "); pw.println(mDrawnCallback);
}
/**

View File

@@ -405,7 +405,6 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp
// During wake and unlock, we need to draw black before waking up to avoid abrupt
// brightness changes due to display state transitions.
boolean alwaysOnEnabled = mDozeParameters.getAlwaysOn();
boolean delayWakeUp = mode == MODE_WAKE_AND_UNLOCK && alwaysOnEnabled && mWakeUpDelay > 0;
Runnable wakeUp = ()-> {
if (!wasDeviceInteractive) {
if (DEBUG_BIO_WAKELOCK) {
@@ -414,15 +413,12 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp
mPowerManager.wakeUp(SystemClock.uptimeMillis(), PowerManager.WAKE_REASON_GESTURE,
"android.policy:BIOMETRIC");
}
if (delayWakeUp) {
mKeyguardViewMediator.onWakeAndUnlocking();
}
Trace.beginSection("release wake-and-unlock");
releaseBiometricWakeLock();
Trace.endSection();
};
if (!delayWakeUp && mMode != MODE_NONE) {
if (mMode != MODE_NONE) {
wakeUp.run();
}
switch (mMode) {
@@ -472,11 +468,7 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp
mUpdateMonitor.awakenFromDream();
}
mNotificationShadeWindowController.setNotificationShadeFocusable(false);
if (delayWakeUp) {
mHandler.postDelayed(wakeUp, mWakeUpDelay);
} else {
mKeyguardViewMediator.onWakeAndUnlocking();
}
mKeyguardViewMediator.onWakeAndUnlocking();
Trace.endSection();
break;
case MODE_ONLY_WAKE: