Loading packages/SystemUI/src/com/android/systemui/SystemUIFactory.java +6 −2 Original line number Diff line number Diff line Loading @@ -40,6 +40,8 @@ import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.volume.VolumeDialogControllerImpl; import java.util.function.Consumer; /** * Class factory to provide customizable SystemUI components. */ Loading Loading @@ -84,8 +86,10 @@ public class SystemUIFactory { public ScrimController createScrimController(LightBarController lightBarController, ScrimView scrimBehind, ScrimView scrimInFront, View headsUpScrim, LockscreenWallpaper lockscreenWallpaper) { return new ScrimController(lightBarController, scrimBehind, scrimInFront, headsUpScrim); LockscreenWallpaper lockscreenWallpaper, Consumer<Boolean> scrimVisibleListener) { return new ScrimController(lightBarController, scrimBehind, scrimInFront, headsUpScrim, scrimVisibleListener); } public NotificationIconAreaController createNotificationIconAreaController(Context context, Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +36 −3 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.Context; import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Trace; import android.util.MathUtils; import android.view.View; import android.view.ViewGroup; Loading @@ -46,6 +47,8 @@ import com.android.systemui.statusbar.ScrimView; import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener; import com.android.systemui.statusbar.stack.ViewState; import java.util.function.Consumer; /** * Controls both the scrim behind the notifications and in front of the notifications (when a * security method gets shown). Loading Loading @@ -125,12 +128,16 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, private boolean mWakingUpFromAodInProgress; /** Wake up from AOD transition is animating; need to reset when animation finishes */ private boolean mWakingUpFromAodAnimationRunning; private boolean mScrimsVisble; private final Consumer<Boolean> mScrimVisibleListener; public ScrimController(LightBarController lightBarController, ScrimView scrimBehind, ScrimView scrimInFront, View headsUpScrim) { ScrimView scrimInFront, View headsUpScrim, Consumer<Boolean> scrimVisibleListener) { mScrimBehind = scrimBehind; mScrimInFront = scrimInFront; mHeadsUpScrim = headsUpScrim; mScrimVisibleListener = scrimVisibleListener; final Context context = scrimBehind.getContext(); mUnlockMethodCache = UnlockMethodCache.getInstance(context); mKeyguardUpdateMonitor = KeyguardUpdateMonitor.getInstance(context); Loading Loading @@ -192,7 +199,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, scheduleUpdate(); } /** Prepares the wakeUpFromAod animation (while turning on screen); Forces black scrims. */ public void prepareWakeUpFromAod() { if (mWakingUpFromAodInProgress) { return; } mWakingUpFromAodInProgress = true; mWakingUpFromAodStarting = true; mAnimateChange = false; Loading @@ -200,10 +211,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, onPreDraw(); } /** Starts the wakeUpFromAod animation (once screen is on); animate to transparent scrims. */ public void wakeUpFromAod() { if (mWakeAndUnlocking || mAnimateKeyguardFadingOut) { // Wake and unlocking has a separate transition that must not be interfered with. mWakingUpFromAodStarting = false; mWakingUpFromAodInProgress = false; return; } if (mWakingUpFromAodStarting) { Loading @@ -218,6 +231,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, mWakeAndUnlocking = true; mAnimatingDozeUnlock = true; mWakingUpFromAodStarting = false; mWakingUpFromAodInProgress = false; scheduleUpdate(); } Loading Loading @@ -328,7 +342,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, } protected void updateScrims() { // Make sure we have the right gradients if (mNeedsDrawableColorUpdate) { mNeedsDrawableColorUpdate = false; Loading Loading @@ -359,13 +372,24 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, setScrimInFrontAlpha(1f); setScrimBehindAlpha(0f); } } else if (!mKeyguardShowing && !mBouncerShowing) { } else if (!mKeyguardShowing && !mBouncerShowing && !mWakingUpFromAodStarting) { updateScrimNormal(); setScrimInFrontAlpha(0); } else { updateScrimKeyguard(); } mAnimateChange = false; dispatchScrimsVisible(); } private void dispatchScrimsVisible() { boolean scrimsVisible = mScrimBehind.getViewAlpha() > 0 || mScrimInFront.getViewAlpha() > 0; if (mScrimsVisble != scrimsVisible) { mScrimsVisble = scrimsVisible; mScrimVisibleListener.accept(scrimsVisible); } } private void updateScrimKeyguard() { Loading Loading @@ -457,6 +481,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, alpha = Math.max(0, Math.min(1.0f, alpha)); scrimView.setViewAlpha(alpha); Trace.traceCounter(Trace.TRACE_TAG_APP, scrim == mScrimInFront ? "front_scrim_alpha" : "back_scrim_alpha", (int) (alpha * 255)); int dozeTint = Color.TRANSPARENT; boolean dozing = mAnimatingDozeUnlock || mDozing; Loading @@ -464,6 +492,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, if (dozing || frontScrimDozing && scrim == mScrimInFront) { dozeTint = Color.BLACK; } Trace.traceCounter(Trace.TRACE_TAG_APP, scrim == mScrimInFront ? "front_scrim_tint" : "back_scrim_tint", dozeTint == Color.BLACK ? 1 : 0); scrimView.setTint(dozeTint); } else { scrim.setAlpha(alpha1); Loading @@ -477,6 +509,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, float alpha = (float) animation.getAnimatedValue(); setCurrentScrimAlpha(scrim, alpha); updateScrimColor(scrim); dispatchScrimsVisible(); }); anim.setInterpolator(getInterpolator()); anim.setStartDelay(mAnimationDelay); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +18 −6 Original line number Diff line number Diff line Loading @@ -1132,7 +1132,12 @@ public class StatusBar extends SystemUI implements DemoMode, ScrimView scrimInFront = (ScrimView) mStatusBarWindow.findViewById(R.id.scrim_in_front); View headsUpScrim = mStatusBarWindow.findViewById(R.id.heads_up_scrim); mScrimController = SystemUIFactory.getInstance().createScrimController(mLightBarController, scrimBehind, scrimInFront, headsUpScrim, mLockscreenWallpaper); scrimBehind, scrimInFront, headsUpScrim, mLockscreenWallpaper, scrimsVisible -> { if (mStatusBarWindowManager != null) { mStatusBarWindowManager.setScrimsVisible(scrimsVisible); } }); if (mScrimSrcModeEnabled) { Runnable runnable = new Runnable() { @Override Loading Loading @@ -5171,6 +5176,9 @@ public class StatusBar extends SystemUI implements DemoMode, mStackScroller.setAnimationsEnabled(true); mVisualStabilityManager.setScreenOn(true); mNotificationPanel.setTouchDisabled(false); maybePrepareWakeUpFromAod(); mDozeServiceHost.stopDozing(); updateVisibleToUser(); updateIsKeyguard(); Loading @@ -5183,11 +5191,7 @@ public class StatusBar extends SystemUI implements DemoMode, mFalsingManager.onScreenTurningOn(); mNotificationPanel.onScreenTurningOn(); int wakefulness = mWakefulnessLifecycle.getWakefulness(); if (mDozing && (wakefulness == WAKEFULNESS_WAKING || wakefulness == WAKEFULNESS_ASLEEP) && !isPulsing()) { mScrimController.prepareWakeUpFromAod(); } maybePrepareWakeUpFromAod(); if (mLaunchCameraOnScreenTurningOn) { mNotificationPanel.launchCamera(false, mLastCameraLaunchSource); Loading Loading @@ -5216,6 +5220,14 @@ public class StatusBar extends SystemUI implements DemoMode, return mWakefulnessLifecycle.getWakefulness(); } private void maybePrepareWakeUpFromAod() { int wakefulness = mWakefulnessLifecycle.getWakefulness(); if (mDozing && (wakefulness == WAKEFULNESS_WAKING || wakefulness == WAKEFULNESS_ASLEEP) && !isPulsing()) { mScrimController.prepareWakeUpFromAod(); } } private void vibrateForCameraGesture() { // Make sure to pass -1 for repeat so VibratorService doesn't stop us when going to sleep. mVibrator.vibrate(mCameraLaunchGestureVibePattern, -1 /* repeat */); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java +7 −1 Original line number Diff line number Diff line Loading @@ -186,7 +186,7 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D private boolean isExpanded(State state) { return !state.forceCollapsed && (state.isKeyguardShowingAndNotOccluded() || state.panelVisible || state.keyguardFadingAway || state.bouncerShowing || state.headsUpShowing); || state.headsUpShowing || state.scrimsVisible); } private void applyFitsSystemWindows(State state) { Loading Loading @@ -325,6 +325,11 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D apply(mCurrentState); } public void setScrimsVisible(boolean scrimsVisible) { mCurrentState.scrimsVisible = scrimsVisible; apply(mCurrentState); } public void setHeadsUpShowing(boolean showing) { mCurrentState.headsUpShowing = showing; apply(mCurrentState); Loading Loading @@ -426,6 +431,7 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D boolean remoteInputActive; boolean forcePluginOpen; boolean dozing; boolean scrimsVisible; private boolean isKeyguardShowingAndNotOccluded() { return keyguardShowing && !keyguardOccluded; Loading Loading
packages/SystemUI/src/com/android/systemui/SystemUIFactory.java +6 −2 Original line number Diff line number Diff line Loading @@ -40,6 +40,8 @@ import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.volume.VolumeDialogControllerImpl; import java.util.function.Consumer; /** * Class factory to provide customizable SystemUI components. */ Loading Loading @@ -84,8 +86,10 @@ public class SystemUIFactory { public ScrimController createScrimController(LightBarController lightBarController, ScrimView scrimBehind, ScrimView scrimInFront, View headsUpScrim, LockscreenWallpaper lockscreenWallpaper) { return new ScrimController(lightBarController, scrimBehind, scrimInFront, headsUpScrim); LockscreenWallpaper lockscreenWallpaper, Consumer<Boolean> scrimVisibleListener) { return new ScrimController(lightBarController, scrimBehind, scrimInFront, headsUpScrim, scrimVisibleListener); } public NotificationIconAreaController createNotificationIconAreaController(Context context, Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +36 −3 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.Context; import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Trace; import android.util.MathUtils; import android.view.View; import android.view.ViewGroup; Loading @@ -46,6 +47,8 @@ import com.android.systemui.statusbar.ScrimView; import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener; import com.android.systemui.statusbar.stack.ViewState; import java.util.function.Consumer; /** * Controls both the scrim behind the notifications and in front of the notifications (when a * security method gets shown). Loading Loading @@ -125,12 +128,16 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, private boolean mWakingUpFromAodInProgress; /** Wake up from AOD transition is animating; need to reset when animation finishes */ private boolean mWakingUpFromAodAnimationRunning; private boolean mScrimsVisble; private final Consumer<Boolean> mScrimVisibleListener; public ScrimController(LightBarController lightBarController, ScrimView scrimBehind, ScrimView scrimInFront, View headsUpScrim) { ScrimView scrimInFront, View headsUpScrim, Consumer<Boolean> scrimVisibleListener) { mScrimBehind = scrimBehind; mScrimInFront = scrimInFront; mHeadsUpScrim = headsUpScrim; mScrimVisibleListener = scrimVisibleListener; final Context context = scrimBehind.getContext(); mUnlockMethodCache = UnlockMethodCache.getInstance(context); mKeyguardUpdateMonitor = KeyguardUpdateMonitor.getInstance(context); Loading Loading @@ -192,7 +199,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, scheduleUpdate(); } /** Prepares the wakeUpFromAod animation (while turning on screen); Forces black scrims. */ public void prepareWakeUpFromAod() { if (mWakingUpFromAodInProgress) { return; } mWakingUpFromAodInProgress = true; mWakingUpFromAodStarting = true; mAnimateChange = false; Loading @@ -200,10 +211,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, onPreDraw(); } /** Starts the wakeUpFromAod animation (once screen is on); animate to transparent scrims. */ public void wakeUpFromAod() { if (mWakeAndUnlocking || mAnimateKeyguardFadingOut) { // Wake and unlocking has a separate transition that must not be interfered with. mWakingUpFromAodStarting = false; mWakingUpFromAodInProgress = false; return; } if (mWakingUpFromAodStarting) { Loading @@ -218,6 +231,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, mWakeAndUnlocking = true; mAnimatingDozeUnlock = true; mWakingUpFromAodStarting = false; mWakingUpFromAodInProgress = false; scheduleUpdate(); } Loading Loading @@ -328,7 +342,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, } protected void updateScrims() { // Make sure we have the right gradients if (mNeedsDrawableColorUpdate) { mNeedsDrawableColorUpdate = false; Loading Loading @@ -359,13 +372,24 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, setScrimInFrontAlpha(1f); setScrimBehindAlpha(0f); } } else if (!mKeyguardShowing && !mBouncerShowing) { } else if (!mKeyguardShowing && !mBouncerShowing && !mWakingUpFromAodStarting) { updateScrimNormal(); setScrimInFrontAlpha(0); } else { updateScrimKeyguard(); } mAnimateChange = false; dispatchScrimsVisible(); } private void dispatchScrimsVisible() { boolean scrimsVisible = mScrimBehind.getViewAlpha() > 0 || mScrimInFront.getViewAlpha() > 0; if (mScrimsVisble != scrimsVisible) { mScrimsVisble = scrimsVisible; mScrimVisibleListener.accept(scrimsVisible); } } private void updateScrimKeyguard() { Loading Loading @@ -457,6 +481,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, alpha = Math.max(0, Math.min(1.0f, alpha)); scrimView.setViewAlpha(alpha); Trace.traceCounter(Trace.TRACE_TAG_APP, scrim == mScrimInFront ? "front_scrim_alpha" : "back_scrim_alpha", (int) (alpha * 255)); int dozeTint = Color.TRANSPARENT; boolean dozing = mAnimatingDozeUnlock || mDozing; Loading @@ -464,6 +492,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, if (dozing || frontScrimDozing && scrim == mScrimInFront) { dozeTint = Color.BLACK; } Trace.traceCounter(Trace.TRACE_TAG_APP, scrim == mScrimInFront ? "front_scrim_tint" : "back_scrim_tint", dozeTint == Color.BLACK ? 1 : 0); scrimView.setTint(dozeTint); } else { scrim.setAlpha(alpha1); Loading @@ -477,6 +509,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, float alpha = (float) animation.getAnimatedValue(); setCurrentScrimAlpha(scrim, alpha); updateScrimColor(scrim); dispatchScrimsVisible(); }); anim.setInterpolator(getInterpolator()); anim.setStartDelay(mAnimationDelay); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +18 −6 Original line number Diff line number Diff line Loading @@ -1132,7 +1132,12 @@ public class StatusBar extends SystemUI implements DemoMode, ScrimView scrimInFront = (ScrimView) mStatusBarWindow.findViewById(R.id.scrim_in_front); View headsUpScrim = mStatusBarWindow.findViewById(R.id.heads_up_scrim); mScrimController = SystemUIFactory.getInstance().createScrimController(mLightBarController, scrimBehind, scrimInFront, headsUpScrim, mLockscreenWallpaper); scrimBehind, scrimInFront, headsUpScrim, mLockscreenWallpaper, scrimsVisible -> { if (mStatusBarWindowManager != null) { mStatusBarWindowManager.setScrimsVisible(scrimsVisible); } }); if (mScrimSrcModeEnabled) { Runnable runnable = new Runnable() { @Override Loading Loading @@ -5171,6 +5176,9 @@ public class StatusBar extends SystemUI implements DemoMode, mStackScroller.setAnimationsEnabled(true); mVisualStabilityManager.setScreenOn(true); mNotificationPanel.setTouchDisabled(false); maybePrepareWakeUpFromAod(); mDozeServiceHost.stopDozing(); updateVisibleToUser(); updateIsKeyguard(); Loading @@ -5183,11 +5191,7 @@ public class StatusBar extends SystemUI implements DemoMode, mFalsingManager.onScreenTurningOn(); mNotificationPanel.onScreenTurningOn(); int wakefulness = mWakefulnessLifecycle.getWakefulness(); if (mDozing && (wakefulness == WAKEFULNESS_WAKING || wakefulness == WAKEFULNESS_ASLEEP) && !isPulsing()) { mScrimController.prepareWakeUpFromAod(); } maybePrepareWakeUpFromAod(); if (mLaunchCameraOnScreenTurningOn) { mNotificationPanel.launchCamera(false, mLastCameraLaunchSource); Loading Loading @@ -5216,6 +5220,14 @@ public class StatusBar extends SystemUI implements DemoMode, return mWakefulnessLifecycle.getWakefulness(); } private void maybePrepareWakeUpFromAod() { int wakefulness = mWakefulnessLifecycle.getWakefulness(); if (mDozing && (wakefulness == WAKEFULNESS_WAKING || wakefulness == WAKEFULNESS_ASLEEP) && !isPulsing()) { mScrimController.prepareWakeUpFromAod(); } } private void vibrateForCameraGesture() { // Make sure to pass -1 for repeat so VibratorService doesn't stop us when going to sleep. mVibrator.vibrate(mCameraLaunchGestureVibePattern, -1 /* repeat */); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java +7 −1 Original line number Diff line number Diff line Loading @@ -186,7 +186,7 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D private boolean isExpanded(State state) { return !state.forceCollapsed && (state.isKeyguardShowingAndNotOccluded() || state.panelVisible || state.keyguardFadingAway || state.bouncerShowing || state.headsUpShowing); || state.headsUpShowing || state.scrimsVisible); } private void applyFitsSystemWindows(State state) { Loading Loading @@ -325,6 +325,11 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D apply(mCurrentState); } public void setScrimsVisible(boolean scrimsVisible) { mCurrentState.scrimsVisible = scrimsVisible; apply(mCurrentState); } public void setHeadsUpShowing(boolean showing) { mCurrentState.headsUpShowing = showing; apply(mCurrentState); Loading Loading @@ -426,6 +431,7 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D boolean remoteInputActive; boolean forcePluginOpen; boolean dozing; boolean scrimsVisible; private boolean isKeyguardShowingAndNotOccluded() { return keyguardShowing && !keyguardOccluded; Loading