From bde4c0ccbd2fcd54d984748e6d64e41d35ad84f7 Mon Sep 17 00:00:00 2001 From: Jerry Chang Date: Thu, 13 Jun 2019 16:58:41 +0800 Subject: [PATCH] Fade away wallpapers when long pulse Add back timeout wallpaper while docking pulses due to docking pulses may took a long time and should fade away wallpaper to avoid aging. Reset mWallpaperVisibilityTimedOut flag to reset wallpaper timeout every time scrim state changed or panel expanded. Fix: 135134059 Test: atest SystemUITests:ScrimControllerTest Change-Id: I5ea3e52733734cef6c6850fa4af1d8ad2941f967 --- .../statusbar/phone/DozeScrimController.java | 8 ++++ .../statusbar/phone/ScrimController.java | 40 +++++++++++++++---- .../statusbar/phone/ScrimControllerTest.java | 32 +++++++++++++++ 3 files changed, 73 insertions(+), 7 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java index d9d74b9d17a63..a2438552e8af6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java @@ -84,6 +84,14 @@ public class DozeScrimController implements StateListener { public void onCancelled() { pulseFinished(); } + + /** + * Whether to timeout wallpaper or not. + */ + @Override + public boolean shouldTimeoutWallpaper() { + return mPulseReason == DozeLog.PULSE_REASON_DOCKING; + } }; public DozeScrimController(DozeParameters dozeParameters) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index 5dcbea22eea1b..3f38c049a977d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -284,15 +284,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo // AOD wallpapers should fade away after a while. // Docking pulses may take a long time, wallpapers should also fade away after a while. - if (mWallpaperSupportsAmbientMode && mDozeParameters.getAlwaysOn() - && mState == ScrimState.AOD) { - if (!mWallpaperVisibilityTimedOut) { - mTimeTicker.schedule(mDozeParameters.getWallpaperAodDuration(), - AlarmTimeout.MODE_IGNORE_IF_SCHEDULED); - } + mWallpaperVisibilityTimedOut = false; + if (shouldFadeAwayWallpaper()) { + mTimeTicker.schedule(mDozeParameters.getWallpaperAodDuration(), + AlarmTimeout.MODE_IGNORE_IF_SCHEDULED); } else { mTimeTicker.cancel(); - mWallpaperVisibilityTimedOut = false; } if (mKeyguardUpdateMonitor.needsSlowUnlockTransition() && mState == ScrimState.UNLOCKED) { @@ -313,6 +310,23 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo dispatchScrimState(mScrimBehind.getViewAlpha()); } + private boolean shouldFadeAwayWallpaper() { + if (!mWallpaperSupportsAmbientMode) { + return false; + } + + if (mState == ScrimState.AOD && mDozeParameters.getAlwaysOn()) { + return true; + } + + if (mState == ScrimState.PULSING + && mCallback != null && mCallback.shouldTimeoutWallpaper()) { + return true; + } + + return false; + } + public ScrimState getState() { return mState; } @@ -387,6 +401,14 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo setOrAdaptCurrentAnimation(mScrimInFront); dispatchScrimState(mScrimBehind.getViewAlpha()); + + // Reset wallpaper timeout if it's already timeout like expanding panel while PULSING + // and docking. + if (mWallpaperVisibilityTimedOut) { + mWallpaperVisibilityTimedOut = false; + mTimeTicker.schedule(mDozeParameters.getWallpaperAodDuration(), + AlarmTimeout.MODE_IGNORE_IF_SCHEDULED); + } } } @@ -925,6 +947,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo } default void onCancelled() { } + /** Returns whether to timeout wallpaper or not. */ + default boolean shouldTimeoutWallpaper() { + return false; + } } /** diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java index 191c983ad1564..d8e90a5840587 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java @@ -507,6 +507,38 @@ public class ScrimControllerTest extends SysuiTestCase { verify(mAlarmManager).cancel(any(AlarmManager.OnAlarmListener.class)); } + @Test + public void transitionToPulsing_withTimeoutWallpaperCallback_willHideWallpaper() { + mScrimController.setWallpaperSupportsAmbientMode(true); + + mScrimController.transitionTo(ScrimState.PULSING, new ScrimController.Callback() { + @Override + public boolean shouldTimeoutWallpaper() { + return true; + } + }); + + verify(mAlarmManager).setExact(anyInt(), anyLong(), any(), any(), any()); + } + + @Test + public void transitionToPulsing_withDefaultCallback_wontHideWallpaper() { + mScrimController.setWallpaperSupportsAmbientMode(true); + + mScrimController.transitionTo(ScrimState.PULSING, new ScrimController.Callback() {}); + + verify(mAlarmManager, never()).setExact(anyInt(), anyLong(), any(), any(), any()); + } + + @Test + public void transitionToPulsing_withoutCallback_wontHideWallpaper() { + mScrimController.setWallpaperSupportsAmbientMode(true); + + mScrimController.transitionTo(ScrimState.PULSING); + + verify(mAlarmManager, never()).setExact(anyInt(), anyLong(), any(), any(), any()); + } + @Test public void testConservesExpansionOpacityAfterTransition() { mScrimController.transitionTo(ScrimState.UNLOCKED);