Loading packages/SystemUI/src/com/android/systemui/SystemUIFactory.java +6 −4 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.view.ViewGroup; import com.android.internal.logging.MetricsLogger; import com.android.internal.widget.LockPatternUtils; import com.android.internal.colorextraction.ColorExtractor.GradientColors; import com.android.keyguard.ViewMediatorCallback; import com.android.systemui.Dependency.DependencyProvider; import com.android.systemui.classifier.FalsingManager; Loading Loading @@ -101,12 +102,13 @@ public class SystemUIFactory { dismissCallbackRegistry, FalsingManager.getInstance(context)); } public ScrimController createScrimController(LightBarController lightBarController, ScrimView scrimBehind, ScrimView scrimInFront, LockscreenWallpaper lockscreenWallpaper, public ScrimController createScrimController(ScrimView scrimBehind, ScrimView scrimInFront, LockscreenWallpaper lockscreenWallpaper, Consumer<Float> scrimBehindAlphaListener, Consumer<GradientColors> scrimInFrontColorListener, Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters, AlarmManager alarmManager) { return new ScrimController(lightBarController, scrimBehind, scrimInFront, scrimVisibleListener, dozeParameters, alarmManager); return new ScrimController(scrimBehind, scrimInFront, scrimBehindAlphaListener, scrimInFrontColorListener, scrimVisibleListener, dozeParameters, alarmManager); } public NotificationIconAreaController createNotificationIconAreaController(Context context, Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +13 −8 Original line number Diff line number Diff line Loading @@ -111,7 +111,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo private final Context mContext; protected final ScrimView mScrimBehind; protected final ScrimView mScrimInFront; private final LightBarController mLightBarController; private final UnlockMethodCache mUnlockMethodCache; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final DozeParameters mDozeParameters; Loading Loading @@ -145,6 +144,8 @@ 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 Consumer<Integer> mScrimVisibleListener; private boolean mBlankScreen; private boolean mScreenBlankingCallbackCalled; Loading @@ -161,17 +162,20 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo private boolean mWakeLockHeld; private boolean mKeyguardOccluded; public ScrimController(LightBarController lightBarController, ScrimView scrimBehind, ScrimView scrimInFront, Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters, AlarmManager alarmManager) { public ScrimController(ScrimView scrimBehind, ScrimView scrimInFront, Consumer<Float> scrimBehindAlphaListener, Consumer<GradientColors> scrimInFrontColorListener, Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters, AlarmManager alarmManager) { mScrimBehind = scrimBehind; mScrimInFront = scrimInFront; mScrimBehindAlphaListener = scrimBehindAlphaListener; mScrimInFrontColorListener = scrimInFrontColorListener; mScrimVisibleListener = scrimVisibleListener; mContext = scrimBehind.getContext(); mUnlockMethodCache = UnlockMethodCache.getInstance(mContext); mDarkenWhileDragging = !mUnlockMethodCache.canSkipBouncer(); mKeyguardUpdateMonitor = KeyguardUpdateMonitor.getInstance(mContext); mLightBarController = lightBarController; mScrimBehindAlphaResValue = mContext.getResources().getFloat(R.dimen.scrim_behind_alpha); mTimeTicker = new AlarmTimeout(alarmManager, this::onHideWallpaperTimeout, "hide_aod_wallpaper", new Handler()); Loading Loading @@ -370,6 +374,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo setOrAdaptCurrentAnimation(mScrimBehind); setOrAdaptCurrentAnimation(mScrimInFront); mScrimBehindAlphaListener.accept(mScrimBehind.getViewAlpha()); } } Loading Loading @@ -478,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); mLightBarController.setScrimColor(mScrimInFront.getColors()); mScrimInFrontColorListener.accept(mScrimInFront.getColors()); } // We want to override the back scrim opacity for the AOD state Loading Loading @@ -705,9 +711,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo } } // TODO factor mLightBarController out of this class if (scrim == mScrimBehind) { mLightBarController.setScrimAlpha(alpha); mScrimBehindAlphaListener.accept(alpha); } final boolean wantsAlphaUpdate = alpha != currentAlpha; Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +7 −1 Original line number Diff line number Diff line Loading @@ -916,8 +916,14 @@ public class StatusBar extends SystemUI implements DemoMode, ScrimView scrimBehind = mStatusBarWindow.findViewById(R.id.scrim_behind); ScrimView scrimInFront = mStatusBarWindow.findViewById(R.id.scrim_in_front); mScrimController = SystemUIFactory.getInstance().createScrimController(mLightBarController, mScrimController = SystemUIFactory.getInstance().createScrimController( scrimBehind, scrimInFront, mLockscreenWallpaper, scrimBehindAlpha -> { mLightBarController.setScrimAlpha(scrimBehindAlpha); }, scrimInFrontColor -> { mLightBarController.setScrimColor(scrimInFrontColor); }, scrimsVisible -> { if (mStatusBarWindowManager != null) { mStatusBarWindowManager.setScrimsVisibility(scrimsVisible); Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +36 −8 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.View; import com.android.internal.colorextraction.ColorExtractor.GradientColors; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.ScrimView; Loading @@ -65,9 +66,12 @@ 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 float mScrimBehindAlpha; private GradientColors mScrimInFrontColor; private int mScrimVisibility; private LightBarController mLightBarController; private DozeParameters mDozeParamenters; private WakeLock mWakeLock; private boolean mAlwaysOnEnabled; Loading @@ -75,19 +79,20 @@ public class ScrimControllerTest extends SysuiTestCase { @Before public void setup() { mLightBarController = mock(LightBarController.class); mScrimBehind = spy(new ScrimView(getContext())); mScrimInFront = new ScrimView(getContext()); 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(mLightBarController, mScrimBehind, mScrimInFront, mScrimVisibilityCallback, mDozeParamenters, mAlarmManager); mScrimController = new SynchronousScrimController(mScrimBehind, mScrimInFront, mScrimBehindAlphaCallback, mScrimInFrontColorCallback, mScrimVisibilityCallback, mDozeParamenters, mAlarmManager); } @Test Loading Loading @@ -205,6 +210,28 @@ public class ScrimControllerTest extends SysuiTestCase { assertScrimVisibility(VISIBILITY_FULLY_TRANSPARENT, VISIBILITY_SEMI_TRANSPARENT); } @Test public void panelExpansion() { mScrimController.setPanelExpansion(0f); mScrimController.setPanelExpansion(0.5f); mScrimController.transitionTo(ScrimState.UNLOCKED); mScrimController.finishAnimationsImmediately(); reset(mScrimBehind); mScrimController.setPanelExpansion(0f); mScrimController.setPanelExpansion(1.0f); mScrimController.onPreDraw(); Assert.assertEquals("Scrim alpha should change after setPanelExpansion", mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f); mScrimController.setPanelExpansion(0f); mScrimController.onPreDraw(); Assert.assertEquals("Scrim alpha should change after setPanelExpansion", mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f); } @Test public void panelExpansionAffectsAlpha() { mScrimController.setPanelExpansion(0f); Loading Loading @@ -531,11 +558,12 @@ public class ScrimControllerTest extends SysuiTestCase { private boolean mAnimationCancelled; boolean mOnPreDrawCalled; SynchronousScrimController(LightBarController lightBarController, ScrimView scrimBehind, ScrimView scrimInFront, SynchronousScrimController(ScrimView scrimBehind, ScrimView scrimInFront, Consumer<Float> scrimBehindAlphaListener, Consumer<GradientColors> scrimInFrontColorListener, Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters, AlarmManager alarmManager) { super(lightBarController, scrimBehind, scrimInFront, super(scrimBehind, scrimInFront, scrimBehindAlphaListener, scrimInFrontColorListener, 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 @@ -25,6 +25,7 @@ import android.view.ViewGroup; import com.android.internal.logging.MetricsLogger; import com.android.internal.widget.LockPatternUtils; import com.android.internal.colorextraction.ColorExtractor.GradientColors; import com.android.keyguard.ViewMediatorCallback; import com.android.systemui.Dependency.DependencyProvider; import com.android.systemui.classifier.FalsingManager; Loading Loading @@ -101,12 +102,13 @@ public class SystemUIFactory { dismissCallbackRegistry, FalsingManager.getInstance(context)); } public ScrimController createScrimController(LightBarController lightBarController, ScrimView scrimBehind, ScrimView scrimInFront, LockscreenWallpaper lockscreenWallpaper, public ScrimController createScrimController(ScrimView scrimBehind, ScrimView scrimInFront, LockscreenWallpaper lockscreenWallpaper, Consumer<Float> scrimBehindAlphaListener, Consumer<GradientColors> scrimInFrontColorListener, Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters, AlarmManager alarmManager) { return new ScrimController(lightBarController, scrimBehind, scrimInFront, scrimVisibleListener, dozeParameters, alarmManager); return new ScrimController(scrimBehind, scrimInFront, scrimBehindAlphaListener, scrimInFrontColorListener, scrimVisibleListener, dozeParameters, alarmManager); } public NotificationIconAreaController createNotificationIconAreaController(Context context, Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +13 −8 Original line number Diff line number Diff line Loading @@ -111,7 +111,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo private final Context mContext; protected final ScrimView mScrimBehind; protected final ScrimView mScrimInFront; private final LightBarController mLightBarController; private final UnlockMethodCache mUnlockMethodCache; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final DozeParameters mDozeParameters; Loading Loading @@ -145,6 +144,8 @@ 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 Consumer<Integer> mScrimVisibleListener; private boolean mBlankScreen; private boolean mScreenBlankingCallbackCalled; Loading @@ -161,17 +162,20 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo private boolean mWakeLockHeld; private boolean mKeyguardOccluded; public ScrimController(LightBarController lightBarController, ScrimView scrimBehind, ScrimView scrimInFront, Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters, AlarmManager alarmManager) { public ScrimController(ScrimView scrimBehind, ScrimView scrimInFront, Consumer<Float> scrimBehindAlphaListener, Consumer<GradientColors> scrimInFrontColorListener, Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters, AlarmManager alarmManager) { mScrimBehind = scrimBehind; mScrimInFront = scrimInFront; mScrimBehindAlphaListener = scrimBehindAlphaListener; mScrimInFrontColorListener = scrimInFrontColorListener; mScrimVisibleListener = scrimVisibleListener; mContext = scrimBehind.getContext(); mUnlockMethodCache = UnlockMethodCache.getInstance(mContext); mDarkenWhileDragging = !mUnlockMethodCache.canSkipBouncer(); mKeyguardUpdateMonitor = KeyguardUpdateMonitor.getInstance(mContext); mLightBarController = lightBarController; mScrimBehindAlphaResValue = mContext.getResources().getFloat(R.dimen.scrim_behind_alpha); mTimeTicker = new AlarmTimeout(alarmManager, this::onHideWallpaperTimeout, "hide_aod_wallpaper", new Handler()); Loading Loading @@ -370,6 +374,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo setOrAdaptCurrentAnimation(mScrimBehind); setOrAdaptCurrentAnimation(mScrimInFront); mScrimBehindAlphaListener.accept(mScrimBehind.getViewAlpha()); } } Loading Loading @@ -478,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); mLightBarController.setScrimColor(mScrimInFront.getColors()); mScrimInFrontColorListener.accept(mScrimInFront.getColors()); } // We want to override the back scrim opacity for the AOD state Loading Loading @@ -705,9 +711,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo } } // TODO factor mLightBarController out of this class if (scrim == mScrimBehind) { mLightBarController.setScrimAlpha(alpha); mScrimBehindAlphaListener.accept(alpha); } final boolean wantsAlphaUpdate = alpha != currentAlpha; Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +7 −1 Original line number Diff line number Diff line Loading @@ -916,8 +916,14 @@ public class StatusBar extends SystemUI implements DemoMode, ScrimView scrimBehind = mStatusBarWindow.findViewById(R.id.scrim_behind); ScrimView scrimInFront = mStatusBarWindow.findViewById(R.id.scrim_in_front); mScrimController = SystemUIFactory.getInstance().createScrimController(mLightBarController, mScrimController = SystemUIFactory.getInstance().createScrimController( scrimBehind, scrimInFront, mLockscreenWallpaper, scrimBehindAlpha -> { mLightBarController.setScrimAlpha(scrimBehindAlpha); }, scrimInFrontColor -> { mLightBarController.setScrimColor(scrimInFrontColor); }, scrimsVisible -> { if (mStatusBarWindowManager != null) { mStatusBarWindowManager.setScrimsVisibility(scrimsVisible); Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +36 −8 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.View; import com.android.internal.colorextraction.ColorExtractor.GradientColors; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.ScrimView; Loading @@ -65,9 +66,12 @@ 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 float mScrimBehindAlpha; private GradientColors mScrimInFrontColor; private int mScrimVisibility; private LightBarController mLightBarController; private DozeParameters mDozeParamenters; private WakeLock mWakeLock; private boolean mAlwaysOnEnabled; Loading @@ -75,19 +79,20 @@ public class ScrimControllerTest extends SysuiTestCase { @Before public void setup() { mLightBarController = mock(LightBarController.class); mScrimBehind = spy(new ScrimView(getContext())); mScrimInFront = new ScrimView(getContext()); 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(mLightBarController, mScrimBehind, mScrimInFront, mScrimVisibilityCallback, mDozeParamenters, mAlarmManager); mScrimController = new SynchronousScrimController(mScrimBehind, mScrimInFront, mScrimBehindAlphaCallback, mScrimInFrontColorCallback, mScrimVisibilityCallback, mDozeParamenters, mAlarmManager); } @Test Loading Loading @@ -205,6 +210,28 @@ public class ScrimControllerTest extends SysuiTestCase { assertScrimVisibility(VISIBILITY_FULLY_TRANSPARENT, VISIBILITY_SEMI_TRANSPARENT); } @Test public void panelExpansion() { mScrimController.setPanelExpansion(0f); mScrimController.setPanelExpansion(0.5f); mScrimController.transitionTo(ScrimState.UNLOCKED); mScrimController.finishAnimationsImmediately(); reset(mScrimBehind); mScrimController.setPanelExpansion(0f); mScrimController.setPanelExpansion(1.0f); mScrimController.onPreDraw(); Assert.assertEquals("Scrim alpha should change after setPanelExpansion", mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f); mScrimController.setPanelExpansion(0f); mScrimController.onPreDraw(); Assert.assertEquals("Scrim alpha should change after setPanelExpansion", mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f); } @Test public void panelExpansionAffectsAlpha() { mScrimController.setPanelExpansion(0f); Loading Loading @@ -531,11 +558,12 @@ public class ScrimControllerTest extends SysuiTestCase { private boolean mAnimationCancelled; boolean mOnPreDrawCalled; SynchronousScrimController(LightBarController lightBarController, ScrimView scrimBehind, ScrimView scrimInFront, SynchronousScrimController(ScrimView scrimBehind, ScrimView scrimInFront, Consumer<Float> scrimBehindAlphaListener, Consumer<GradientColors> scrimInFrontColorListener, Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters, AlarmManager alarmManager) { super(lightBarController, scrimBehind, scrimInFront, super(scrimBehind, scrimInFront, scrimBehindAlphaListener, scrimInFrontColorListener, scrimVisibleListener, dozeParameters, alarmManager); mHandler = new FakeHandler(Looper.myLooper()); } Loading