Loading packages/SystemUI/src/com/android/systemui/SystemUIFactory.java +6 −4 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.view.View; import android.view.ViewGroup; import com.android.internal.logging.MetricsLogger; import com.android.internal.util.function.TriConsumer; import com.android.internal.widget.LockPatternUtils; import com.android.internal.colorextraction.ColorExtractor.GradientColors; import com.android.keyguard.ViewMediatorCallback; Loading Loading @@ -53,6 +54,7 @@ import com.android.systemui.statusbar.phone.LockscreenWallpaper; import com.android.systemui.statusbar.phone.NotificationGroupManager; import com.android.systemui.statusbar.phone.NotificationIconAreaController; import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.phone.ScrimState; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; Loading Loading @@ -104,12 +106,12 @@ public class SystemUIFactory { } public ScrimController createScrimController(ScrimView scrimBehind, ScrimView scrimInFront, LockscreenWallpaper lockscreenWallpaper, Consumer<Float> scrimBehindAlphaListener, Consumer<GradientColors> scrimInFrontColorListener, LockscreenWallpaper lockscreenWallpaper, TriConsumer<ScrimState, Float, GradientColors> scrimStateListener, Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters, AlarmManager alarmManager) { return new ScrimController(scrimBehind, scrimInFront, scrimBehindAlphaListener, scrimInFrontColorListener, scrimVisibleListener, dozeParameters, alarmManager); return new ScrimController(scrimBehind, scrimInFront, scrimStateListener, scrimVisibleListener, dozeParameters, alarmManager); } public NotificationIconAreaController createNotificationIconAreaController(Context context, Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java +21 −22 Original line number Diff line number Diff line Loading @@ -66,9 +66,12 @@ public class LightBarController implements BatteryController.BatteryStateChangeC * scrim alpha yet. */ private boolean mHasLightNavigationBar; private boolean mScrimAlphaBelowThreshold; private boolean mInvertLightNavBarWithScrim; private float mScrimAlpha; /** * {@code true} if {@link #mHasLightNavigationBar} should be ignored and forcefully make * {@link #mNavigationLight} {@code false}. */ private boolean mForceDarkForScrim; private final Rect mLastFullscreenBounds = new Rect(); private final Rect mLastDockedBounds = new Rect(); Loading Loading @@ -129,9 +132,7 @@ public class LightBarController implements BatteryController.BatteryStateChangeC boolean last = mNavigationLight; mHasLightNavigationBar = isLight(vis, navigationBarMode, View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); mNavigationLight = mHasLightNavigationBar && (mScrimAlphaBelowThreshold || !mInvertLightNavBarWithScrim) && !mQsCustomizing; mNavigationLight = mHasLightNavigationBar && !mForceDarkForScrim && !mQsCustomizing; if (mNavigationLight != last) { updateNavigation(); } Loading @@ -154,20 +155,17 @@ public class LightBarController implements BatteryController.BatteryStateChangeC reevaluate(); } public void setScrimAlpha(float alpha) { mScrimAlpha = alpha; boolean belowThresholdBefore = mScrimAlphaBelowThreshold; mScrimAlphaBelowThreshold = mScrimAlpha < NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD; if (mHasLightNavigationBar && belowThresholdBefore != mScrimAlphaBelowThreshold) { reevaluate(); } } public void setScrimColor(GradientColors colors) { boolean invertLightNavBarWithScrimBefore = mInvertLightNavBarWithScrim; mInvertLightNavBarWithScrim = !colors.supportsDarkText(); if (mHasLightNavigationBar && invertLightNavBarWithScrimBefore != mInvertLightNavBarWithScrim) { public void setScrimState(ScrimState scrimState, float scrimBehindAlpha, GradientColors scrimInFrontColor) { boolean forceDarkForScrimLast = mForceDarkForScrim; // For BOUNCER/BOUNCER_SCRIMMED cases, we assume that alpha is always below threshold. // This enables IMEs to control the navigation bar color. // For other cases, scrim should be able to veto the light navigation bar. mForceDarkForScrim = scrimState != ScrimState.BOUNCER && scrimState != ScrimState.BOUNCER_SCRIMMED && scrimBehindAlpha >= NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD && !scrimInFrontColor.supportsDarkText(); if (mHasLightNavigationBar && (mForceDarkForScrim != forceDarkForScrimLast)) { reevaluate(); } } Loading Loading @@ -257,8 +255,9 @@ public class LightBarController implements BatteryController.BatteryStateChangeC pw.print(" mLastStatusBarMode="); pw.print(mLastStatusBarMode); pw.print(" mLastNavigationBarMode="); pw.println(mLastNavigationBarMode); pw.print(" mScrimAlpha="); pw.print(mScrimAlpha); pw.print(" mScrimAlphaBelowThreshold="); pw.println(mScrimAlphaBelowThreshold); pw.print(" mForceDarkForScrim="); pw.print(mForceDarkForScrim); pw.print(" mQsCustomizing="); pw.println(mQsCustomizing); pw.println(); LightBarTransitionsController transitionsController = Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +13 −9 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import com.android.internal.colorextraction.ColorExtractor; import com.android.internal.colorextraction.ColorExtractor.GradientColors; import com.android.internal.colorextraction.ColorExtractor.OnColorsChangedListener; import com.android.internal.graphics.ColorUtils; import com.android.internal.util.function.TriConsumer; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.Dependency; import com.android.systemui.Dumpable; Loading Loading @@ -144,8 +145,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo private int mCurrentBehindTint; private boolean mWallpaperVisibilityTimedOut; private int mScrimsVisibility; private final Consumer<GradientColors> mScrimInFrontColorListener; private final Consumer<Float> mScrimBehindAlphaListener; private final TriConsumer<ScrimState, Float, GradientColors> mScrimStateListener; private final Consumer<Integer> mScrimVisibleListener; private boolean mBlankScreen; private boolean mScreenBlankingCallbackCalled; Loading @@ -163,14 +163,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo private boolean mKeyguardOccluded; public ScrimController(ScrimView scrimBehind, ScrimView scrimInFront, Consumer<Float> scrimBehindAlphaListener, Consumer<GradientColors> scrimInFrontColorListener, TriConsumer<ScrimState, Float, GradientColors> scrimStateListener, Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters, AlarmManager alarmManager) { mScrimBehind = scrimBehind; mScrimInFront = scrimInFront; mScrimBehindAlphaListener = scrimBehindAlphaListener; mScrimInFrontColorListener = scrimInFrontColorListener; mScrimStateListener = scrimStateListener; mScrimVisibleListener = scrimVisibleListener; mContext = scrimBehind.getContext(); mUnlockMethodCache = UnlockMethodCache.getInstance(mContext); Loading Loading @@ -300,6 +298,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo } else { scheduleUpdate(); } dispatchScrimState(mScrimBehind.getViewAlpha()); } public ScrimState getState() { Loading Loading @@ -375,7 +375,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo setOrAdaptCurrentAnimation(mScrimBehind); setOrAdaptCurrentAnimation(mScrimInFront); mScrimBehindAlphaListener.accept(mScrimBehind.getViewAlpha()); dispatchScrimState(mScrimBehind.getViewAlpha()); } } Loading Loading @@ -484,7 +484,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo float minOpacity = ColorUtils.calculateMinimumBackgroundAlpha(textColor, mainColor, 4.5f /* minimumContrast */) / 255f; mScrimBehindAlpha = Math.max(mScrimBehindAlphaResValue, minOpacity); mScrimInFrontColorListener.accept(mScrimInFront.getColors()); dispatchScrimState(mScrimBehind.getViewAlpha()); } // We want to override the back scrim opacity for the AOD state Loading @@ -503,6 +503,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo dispatchScrimsVisible(); } private void dispatchScrimState(float alpha) { mScrimStateListener.accept(mState, alpha, mScrimInFront.getColors()); } private void dispatchScrimsVisible() { final int currentScrimVisibility; if (mScrimInFront.getViewAlpha() == 1 || mScrimBehind.getViewAlpha() == 1) { Loading Loading @@ -712,7 +716,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo } if (scrim == mScrimBehind) { mScrimBehindAlphaListener.accept(alpha); dispatchScrimState(alpha); } final boolean wantsAlphaUpdate = alpha != currentAlpha; Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +1 −6 Original line number Diff line number Diff line Loading @@ -918,12 +918,7 @@ public class StatusBar extends SystemUI implements DemoMode, ScrimView scrimInFront = mStatusBarWindow.findViewById(R.id.scrim_in_front); mScrimController = SystemUIFactory.getInstance().createScrimController( scrimBehind, scrimInFront, mLockscreenWallpaper, scrimBehindAlpha -> { mLightBarController.setScrimAlpha(scrimBehindAlpha); }, scrimInFrontColor -> { mLightBarController.setScrimColor(scrimInFrontColor); }, (state, alpha, color) -> mLightBarController.setScrimState(state, alpha, color), scrimsVisible -> { if (mStatusBarWindowManager != null) { mStatusBarWindowManager.setScrimsVisibility(scrimsVisible); Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +27 −12 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.testing.TestableLooper; import android.view.View; import com.android.internal.colorextraction.ColorExtractor.GradientColors; import com.android.internal.util.function.TriConsumer; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.ScrimView; Loading @@ -66,9 +67,7 @@ public class ScrimControllerTest extends SysuiTestCase { private SynchronousScrimController mScrimController; private ScrimView mScrimBehind; private ScrimView mScrimInFront; private Consumer<Float> mScrimBehindAlphaCallback; private Consumer<GradientColors> mScrimInFrontColorCallback; private Consumer<Integer> mScrimVisibilityCallback; private ScrimState mScrimState; private float mScrimBehindAlpha; private GradientColors mScrimInFrontColor; private int mScrimVisibility; Loading @@ -77,6 +76,7 @@ public class ScrimControllerTest extends SysuiTestCase { private boolean mAlwaysOnEnabled; private AlarmManager mAlarmManager; @Before public void setup() { mScrimBehind = spy(new ScrimView(getContext())); Loading @@ -84,15 +84,16 @@ public class ScrimControllerTest extends SysuiTestCase { mWakeLock = mock(WakeLock.class); mAlarmManager = mock(AlarmManager.class); mAlwaysOnEnabled = true; mScrimBehindAlphaCallback = (Float alpha) -> mScrimBehindAlpha = alpha; mScrimInFrontColorCallback = (GradientColors color) -> mScrimInFrontColor = color; mScrimVisibilityCallback = (Integer visible) -> mScrimVisibility = visible; mDozeParamenters = mock(DozeParameters.class); when(mDozeParamenters.getAlwaysOn()).thenAnswer(invocation -> mAlwaysOnEnabled); when(mDozeParamenters.getDisplayNeedsBlanking()).thenReturn(true); mScrimController = new SynchronousScrimController(mScrimBehind, mScrimInFront, mScrimBehindAlphaCallback, mScrimInFrontColorCallback, mScrimVisibilityCallback, mDozeParamenters, mAlarmManager); (scrimState, scrimBehindAlpha, scrimInFrontColor) -> { mScrimState = scrimState; mScrimBehindAlpha = scrimBehindAlpha; mScrimInFrontColor = scrimInFrontColor; }, visible -> mScrimVisibility = visible, mDozeParamenters, mAlarmManager); } @Test Loading Loading @@ -210,6 +211,21 @@ public class ScrimControllerTest extends SysuiTestCase { assertScrimVisibility(VISIBILITY_FULLY_TRANSPARENT, VISIBILITY_SEMI_TRANSPARENT); } @Test public void scrimStateCallback() { mScrimController.transitionTo(ScrimState.UNLOCKED); mScrimController.finishAnimationsImmediately(); Assert.assertEquals(mScrimState, ScrimState.UNLOCKED); mScrimController.transitionTo(ScrimState.BOUNCER); mScrimController.finishAnimationsImmediately(); Assert.assertEquals(mScrimState, ScrimState.BOUNCER); mScrimController.transitionTo(ScrimState.BOUNCER_SCRIMMED); mScrimController.finishAnimationsImmediately(); Assert.assertEquals(mScrimState, ScrimState.BOUNCER_SCRIMMED); } @Test public void panelExpansion() { mScrimController.setPanelExpansion(0f); Loading Loading @@ -559,12 +575,11 @@ public class ScrimControllerTest extends SysuiTestCase { boolean mOnPreDrawCalled; SynchronousScrimController(ScrimView scrimBehind, ScrimView scrimInFront, Consumer<Float> scrimBehindAlphaListener, Consumer<GradientColors> scrimInFrontColorListener, TriConsumer<ScrimState, Float, GradientColors> scrimStateListener, Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters, AlarmManager alarmManager) { super(scrimBehind, scrimInFront, scrimBehindAlphaListener, scrimInFrontColorListener, scrimVisibleListener, dozeParameters, alarmManager); super(scrimBehind, scrimInFront, scrimStateListener, scrimVisibleListener, dozeParameters, alarmManager); mHandler = new FakeHandler(Looper.myLooper()); } Loading Loading
packages/SystemUI/src/com/android/systemui/SystemUIFactory.java +6 −4 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.view.View; import android.view.ViewGroup; import com.android.internal.logging.MetricsLogger; import com.android.internal.util.function.TriConsumer; import com.android.internal.widget.LockPatternUtils; import com.android.internal.colorextraction.ColorExtractor.GradientColors; import com.android.keyguard.ViewMediatorCallback; Loading Loading @@ -53,6 +54,7 @@ import com.android.systemui.statusbar.phone.LockscreenWallpaper; import com.android.systemui.statusbar.phone.NotificationGroupManager; import com.android.systemui.statusbar.phone.NotificationIconAreaController; import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.phone.ScrimState; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; Loading Loading @@ -104,12 +106,12 @@ public class SystemUIFactory { } public ScrimController createScrimController(ScrimView scrimBehind, ScrimView scrimInFront, LockscreenWallpaper lockscreenWallpaper, Consumer<Float> scrimBehindAlphaListener, Consumer<GradientColors> scrimInFrontColorListener, LockscreenWallpaper lockscreenWallpaper, TriConsumer<ScrimState, Float, GradientColors> scrimStateListener, Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters, AlarmManager alarmManager) { return new ScrimController(scrimBehind, scrimInFront, scrimBehindAlphaListener, scrimInFrontColorListener, scrimVisibleListener, dozeParameters, alarmManager); return new ScrimController(scrimBehind, scrimInFront, scrimStateListener, scrimVisibleListener, dozeParameters, alarmManager); } public NotificationIconAreaController createNotificationIconAreaController(Context context, Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java +21 −22 Original line number Diff line number Diff line Loading @@ -66,9 +66,12 @@ public class LightBarController implements BatteryController.BatteryStateChangeC * scrim alpha yet. */ private boolean mHasLightNavigationBar; private boolean mScrimAlphaBelowThreshold; private boolean mInvertLightNavBarWithScrim; private float mScrimAlpha; /** * {@code true} if {@link #mHasLightNavigationBar} should be ignored and forcefully make * {@link #mNavigationLight} {@code false}. */ private boolean mForceDarkForScrim; private final Rect mLastFullscreenBounds = new Rect(); private final Rect mLastDockedBounds = new Rect(); Loading Loading @@ -129,9 +132,7 @@ public class LightBarController implements BatteryController.BatteryStateChangeC boolean last = mNavigationLight; mHasLightNavigationBar = isLight(vis, navigationBarMode, View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); mNavigationLight = mHasLightNavigationBar && (mScrimAlphaBelowThreshold || !mInvertLightNavBarWithScrim) && !mQsCustomizing; mNavigationLight = mHasLightNavigationBar && !mForceDarkForScrim && !mQsCustomizing; if (mNavigationLight != last) { updateNavigation(); } Loading @@ -154,20 +155,17 @@ public class LightBarController implements BatteryController.BatteryStateChangeC reevaluate(); } public void setScrimAlpha(float alpha) { mScrimAlpha = alpha; boolean belowThresholdBefore = mScrimAlphaBelowThreshold; mScrimAlphaBelowThreshold = mScrimAlpha < NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD; if (mHasLightNavigationBar && belowThresholdBefore != mScrimAlphaBelowThreshold) { reevaluate(); } } public void setScrimColor(GradientColors colors) { boolean invertLightNavBarWithScrimBefore = mInvertLightNavBarWithScrim; mInvertLightNavBarWithScrim = !colors.supportsDarkText(); if (mHasLightNavigationBar && invertLightNavBarWithScrimBefore != mInvertLightNavBarWithScrim) { public void setScrimState(ScrimState scrimState, float scrimBehindAlpha, GradientColors scrimInFrontColor) { boolean forceDarkForScrimLast = mForceDarkForScrim; // For BOUNCER/BOUNCER_SCRIMMED cases, we assume that alpha is always below threshold. // This enables IMEs to control the navigation bar color. // For other cases, scrim should be able to veto the light navigation bar. mForceDarkForScrim = scrimState != ScrimState.BOUNCER && scrimState != ScrimState.BOUNCER_SCRIMMED && scrimBehindAlpha >= NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD && !scrimInFrontColor.supportsDarkText(); if (mHasLightNavigationBar && (mForceDarkForScrim != forceDarkForScrimLast)) { reevaluate(); } } Loading Loading @@ -257,8 +255,9 @@ public class LightBarController implements BatteryController.BatteryStateChangeC pw.print(" mLastStatusBarMode="); pw.print(mLastStatusBarMode); pw.print(" mLastNavigationBarMode="); pw.println(mLastNavigationBarMode); pw.print(" mScrimAlpha="); pw.print(mScrimAlpha); pw.print(" mScrimAlphaBelowThreshold="); pw.println(mScrimAlphaBelowThreshold); pw.print(" mForceDarkForScrim="); pw.print(mForceDarkForScrim); pw.print(" mQsCustomizing="); pw.println(mQsCustomizing); pw.println(); LightBarTransitionsController transitionsController = Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +13 −9 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import com.android.internal.colorextraction.ColorExtractor; import com.android.internal.colorextraction.ColorExtractor.GradientColors; import com.android.internal.colorextraction.ColorExtractor.OnColorsChangedListener; import com.android.internal.graphics.ColorUtils; import com.android.internal.util.function.TriConsumer; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.Dependency; import com.android.systemui.Dumpable; Loading Loading @@ -144,8 +145,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo private int mCurrentBehindTint; private boolean mWallpaperVisibilityTimedOut; private int mScrimsVisibility; private final Consumer<GradientColors> mScrimInFrontColorListener; private final Consumer<Float> mScrimBehindAlphaListener; private final TriConsumer<ScrimState, Float, GradientColors> mScrimStateListener; private final Consumer<Integer> mScrimVisibleListener; private boolean mBlankScreen; private boolean mScreenBlankingCallbackCalled; Loading @@ -163,14 +163,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo private boolean mKeyguardOccluded; public ScrimController(ScrimView scrimBehind, ScrimView scrimInFront, Consumer<Float> scrimBehindAlphaListener, Consumer<GradientColors> scrimInFrontColorListener, TriConsumer<ScrimState, Float, GradientColors> scrimStateListener, Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters, AlarmManager alarmManager) { mScrimBehind = scrimBehind; mScrimInFront = scrimInFront; mScrimBehindAlphaListener = scrimBehindAlphaListener; mScrimInFrontColorListener = scrimInFrontColorListener; mScrimStateListener = scrimStateListener; mScrimVisibleListener = scrimVisibleListener; mContext = scrimBehind.getContext(); mUnlockMethodCache = UnlockMethodCache.getInstance(mContext); Loading Loading @@ -300,6 +298,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo } else { scheduleUpdate(); } dispatchScrimState(mScrimBehind.getViewAlpha()); } public ScrimState getState() { Loading Loading @@ -375,7 +375,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo setOrAdaptCurrentAnimation(mScrimBehind); setOrAdaptCurrentAnimation(mScrimInFront); mScrimBehindAlphaListener.accept(mScrimBehind.getViewAlpha()); dispatchScrimState(mScrimBehind.getViewAlpha()); } } Loading Loading @@ -484,7 +484,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo float minOpacity = ColorUtils.calculateMinimumBackgroundAlpha(textColor, mainColor, 4.5f /* minimumContrast */) / 255f; mScrimBehindAlpha = Math.max(mScrimBehindAlphaResValue, minOpacity); mScrimInFrontColorListener.accept(mScrimInFront.getColors()); dispatchScrimState(mScrimBehind.getViewAlpha()); } // We want to override the back scrim opacity for the AOD state Loading @@ -503,6 +503,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo dispatchScrimsVisible(); } private void dispatchScrimState(float alpha) { mScrimStateListener.accept(mState, alpha, mScrimInFront.getColors()); } private void dispatchScrimsVisible() { final int currentScrimVisibility; if (mScrimInFront.getViewAlpha() == 1 || mScrimBehind.getViewAlpha() == 1) { Loading Loading @@ -712,7 +716,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo } if (scrim == mScrimBehind) { mScrimBehindAlphaListener.accept(alpha); dispatchScrimState(alpha); } final boolean wantsAlphaUpdate = alpha != currentAlpha; Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +1 −6 Original line number Diff line number Diff line Loading @@ -918,12 +918,7 @@ public class StatusBar extends SystemUI implements DemoMode, ScrimView scrimInFront = mStatusBarWindow.findViewById(R.id.scrim_in_front); mScrimController = SystemUIFactory.getInstance().createScrimController( scrimBehind, scrimInFront, mLockscreenWallpaper, scrimBehindAlpha -> { mLightBarController.setScrimAlpha(scrimBehindAlpha); }, scrimInFrontColor -> { mLightBarController.setScrimColor(scrimInFrontColor); }, (state, alpha, color) -> mLightBarController.setScrimState(state, alpha, color), scrimsVisible -> { if (mStatusBarWindowManager != null) { mStatusBarWindowManager.setScrimsVisibility(scrimsVisible); Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +27 −12 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.testing.TestableLooper; import android.view.View; import com.android.internal.colorextraction.ColorExtractor.GradientColors; import com.android.internal.util.function.TriConsumer; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.ScrimView; Loading @@ -66,9 +67,7 @@ public class ScrimControllerTest extends SysuiTestCase { private SynchronousScrimController mScrimController; private ScrimView mScrimBehind; private ScrimView mScrimInFront; private Consumer<Float> mScrimBehindAlphaCallback; private Consumer<GradientColors> mScrimInFrontColorCallback; private Consumer<Integer> mScrimVisibilityCallback; private ScrimState mScrimState; private float mScrimBehindAlpha; private GradientColors mScrimInFrontColor; private int mScrimVisibility; Loading @@ -77,6 +76,7 @@ public class ScrimControllerTest extends SysuiTestCase { private boolean mAlwaysOnEnabled; private AlarmManager mAlarmManager; @Before public void setup() { mScrimBehind = spy(new ScrimView(getContext())); Loading @@ -84,15 +84,16 @@ public class ScrimControllerTest extends SysuiTestCase { mWakeLock = mock(WakeLock.class); mAlarmManager = mock(AlarmManager.class); mAlwaysOnEnabled = true; mScrimBehindAlphaCallback = (Float alpha) -> mScrimBehindAlpha = alpha; mScrimInFrontColorCallback = (GradientColors color) -> mScrimInFrontColor = color; mScrimVisibilityCallback = (Integer visible) -> mScrimVisibility = visible; mDozeParamenters = mock(DozeParameters.class); when(mDozeParamenters.getAlwaysOn()).thenAnswer(invocation -> mAlwaysOnEnabled); when(mDozeParamenters.getDisplayNeedsBlanking()).thenReturn(true); mScrimController = new SynchronousScrimController(mScrimBehind, mScrimInFront, mScrimBehindAlphaCallback, mScrimInFrontColorCallback, mScrimVisibilityCallback, mDozeParamenters, mAlarmManager); (scrimState, scrimBehindAlpha, scrimInFrontColor) -> { mScrimState = scrimState; mScrimBehindAlpha = scrimBehindAlpha; mScrimInFrontColor = scrimInFrontColor; }, visible -> mScrimVisibility = visible, mDozeParamenters, mAlarmManager); } @Test Loading Loading @@ -210,6 +211,21 @@ public class ScrimControllerTest extends SysuiTestCase { assertScrimVisibility(VISIBILITY_FULLY_TRANSPARENT, VISIBILITY_SEMI_TRANSPARENT); } @Test public void scrimStateCallback() { mScrimController.transitionTo(ScrimState.UNLOCKED); mScrimController.finishAnimationsImmediately(); Assert.assertEquals(mScrimState, ScrimState.UNLOCKED); mScrimController.transitionTo(ScrimState.BOUNCER); mScrimController.finishAnimationsImmediately(); Assert.assertEquals(mScrimState, ScrimState.BOUNCER); mScrimController.transitionTo(ScrimState.BOUNCER_SCRIMMED); mScrimController.finishAnimationsImmediately(); Assert.assertEquals(mScrimState, ScrimState.BOUNCER_SCRIMMED); } @Test public void panelExpansion() { mScrimController.setPanelExpansion(0f); Loading Loading @@ -559,12 +575,11 @@ public class ScrimControllerTest extends SysuiTestCase { boolean mOnPreDrawCalled; SynchronousScrimController(ScrimView scrimBehind, ScrimView scrimInFront, Consumer<Float> scrimBehindAlphaListener, Consumer<GradientColors> scrimInFrontColorListener, TriConsumer<ScrimState, Float, GradientColors> scrimStateListener, Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters, AlarmManager alarmManager) { super(scrimBehind, scrimInFront, scrimBehindAlphaListener, scrimInFrontColorListener, scrimVisibleListener, dozeParameters, alarmManager); super(scrimBehind, scrimInFront, scrimStateListener, scrimVisibleListener, dozeParameters, alarmManager); mHandler = new FakeHandler(Looper.myLooper()); } Loading