Merge "Move doze animation until finished waking up" into udc-qpr-dev am: 46a3050cbf am: 2eb39efe3b
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23416276
Change-Id: Id1fb1d9b843c7ee168143b65a3a43f8ac8149826
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
index 8f3616b..cd99061 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
@@ -2844,7 +2844,11 @@
}
private void updateDozingState() {
- Trace.traceCounter(Trace.TRACE_TAG_APP, "dozing", mDozing ? 1 : 0);
+ if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) {
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_APP, "Dozing", 0);
+ Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_APP, "Dozing", String.valueOf(mDozing),
+ 0);
+ }
Trace.beginSection("CentralSurfaces#updateDozingState");
boolean keyguardVisible = mKeyguardStateController.isVisible();
@@ -3198,6 +3202,10 @@
@Override
public void onStartedWakingUp() {
+ // Between onStartedWakingUp() and onFinishedWakingUp(), the system is changing the
+ // display power mode. To avoid jank, animations should NOT run during these power
+ // mode transitions, which means that whenever possible, animations should
+ // start running during the onFinishedWakingUp() callback instead of this callback.
String tag = "CentralSurfaces#onStartedWakingUp";
DejankUtils.startDetectingBlockingIpcs(tag);
mNotificationShadeWindowController.batchApplyWindowLayoutParams(()-> {
@@ -3242,6 +3250,14 @@
updateVisibleToUser();
updateIsKeyguard();
+ });
+ DejankUtils.stopDetectingBlockingIpcs(tag);
+ }
+
+ @Override
+ public void onFinishedWakingUp() {
+ mNotificationShadeWindowController.batchApplyWindowLayoutParams(()-> {
+ // stopDozing() starts the LOCKSCREEN_TRANSITION_FROM_AOD animation.
mDozeServiceHost.stopDozing();
// This is intentionally below the stopDozing call above, since it avoids that we're
// unnecessarily animating the wakeUp transition. Animations should only be enabled
@@ -3255,13 +3271,7 @@
if (mScreenOffAnimationController.shouldHideLightRevealScrimOnWakeUp()) {
mShadeController.makeExpandedInvisible();
}
-
});
- DejankUtils.stopDetectingBlockingIpcs(tag);
- }
-
- @Override
- public void onFinishedWakingUp() {
mWakeUpCoordinator.setFullyAwake(true);
mWakeUpCoordinator.setWakingUp(false, false);
if (mKeyguardStateController.isOccluded()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
index fd9f6a7..7512d75 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
@@ -1103,8 +1103,10 @@
clearInvocations(mNotificationPanelViewController);
mCentralSurfaces.mWakefulnessObserver.onStartedWakingUp();
- verify(mDozeServiceHost).stopDozing();
+ verify(mDozeServiceHost, never()).stopDozing();
verify(mNotificationPanelViewController).expand(eq(false));
+ mCentralSurfaces.mWakefulnessObserver.onFinishedWakingUp();
+ verify(mDozeServiceHost).stopDozing();
}
@Test
@@ -1118,6 +1120,8 @@
mCentralSurfaces.setBouncerShowing(true);
mCentralSurfaces.mWakefulnessObserver.onStartedWakingUp();
verify(mNotificationPanelViewController, never()).expand(anyBoolean());
+ mCentralSurfaces.mWakefulnessObserver.onFinishedWakingUp();
+ verify(mDozeServiceHost).stopDozing();
}
@Test