Loading packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt +10 −2 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ import com.android.systemui.plugins.FalsingManager import com.android.systemui.qs.PageIndicator import com.android.systemui.statusbar.notification.VisualStabilityManager import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.util.Utils import com.android.systemui.util.animation.UniqueObjectHostView import com.android.systemui.util.animation.requiresRemeasuring import com.android.systemui.util.concurrency.DelayableExecutor Loading Loading @@ -150,9 +151,16 @@ class MediaCarouselController @Inject constructor( mediaManager.addListener(object : MediaDataManager.Listener { override fun onMediaDataLoaded(key: String, oldKey: String?, data: MediaData) { oldKey?.let { mediaData.remove(it) } if (!data.active && !Utils.useMediaResumption(context)) { // This view is inactive, let's remove this! This happens e.g when dismissing / // timing out a view. We still have the data around because resumption could // be on, but we should save the resources and release this. onMediaDataRemoved(key) } else { mediaData.put(key, data) addOrUpdatePlayer(key, oldKey, data) } } override fun onMediaDataRemoved(key: String) { mediaData.remove(key) Loading packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt +39 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,18 @@ class MediaHierarchyManager @Inject constructor( } } /** * Is the shade currently collapsing from the expanded qs? If we're on the lockscreen and in qs, * we wouldn't want to transition in that case. */ var collapsingShadeFromQS: Boolean = false set(value) { if (field != value) { field = value updateDesiredLocation(forceNoAnimation = true) } } /** * Are location changes currently blocked? */ Loading @@ -160,6 +172,19 @@ class MediaHierarchyManager @Inject constructor( } } /** * Are we currently fullyAwake */ private var fullyAwake: Boolean = false set(value) { if (field != value) { field = value if (value) { updateDesiredLocation(forceNoAnimation = true) } } } /** * Is the doze animation currently Running */ Loading Loading @@ -206,10 +231,12 @@ class MediaHierarchyManager @Inject constructor( override fun onStartedGoingToSleep() { goingToSleep = true fullyAwake = false } override fun onFinishedWakingUp() { goingToSleep = false fullyAwake = true } override fun onStartedWakingUp() { Loading Loading @@ -531,6 +558,18 @@ class MediaHierarchyManager @Inject constructor( !statusBarStateController.isDozing) { return LOCATION_QS } if (location == LOCATION_LOCKSCREEN && desiredLocation == LOCATION_QS && collapsingShadeFromQS) { // When collapsing on the lockscreen, we want to remain in QS return LOCATION_QS } if (location != LOCATION_LOCKSCREEN && desiredLocation == LOCATION_LOCKSCREEN && !fullyAwake) { // When unlocking from dozing / while waking up, the media shouldn't be transitioning // in an animated way. Let's keep it in the lockscreen until we're fully awake and // reattach it without an animation return LOCATION_LOCKSCREEN } return location } Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +9 −0 Original line number Diff line number Diff line Loading @@ -443,6 +443,7 @@ public class NotificationPanelViewController extends PanelViewController { */ private boolean mDelayShowingKeyguardStatusBar; private boolean mAnimatingQS; private int mOldLayoutDirection; private View.AccessibilityDelegate mAccessibilityDelegate = new View.AccessibilityDelegate() { Loading Loading @@ -1860,6 +1861,7 @@ public class NotificationPanelViewController extends PanelViewController { @Override public void onAnimationEnd(Animator animation) { mAnimatingQS = false; notifyExpandingFinished(); mNotificationStackScroller.resetCheckSnoozeLeavebehind(); mQsExpansionAnimator = null; Loading @@ -1868,6 +1870,9 @@ public class NotificationPanelViewController extends PanelViewController { } } }); // Let's note that we're animating QS. Moving the animator here will cancel it immediately, // so we need a separate flag. mAnimatingQS = true; animator.start(); mQsExpansionAnimator = animator; mQsAnimatorExpand = expanding; Loading Loading @@ -2220,6 +2225,9 @@ public class NotificationPanelViewController extends PanelViewController { mNotificationStackScroller.onExpansionStarted(); mIsExpanding = true; mQsExpandedWhenExpandingStarted = mQsFullyExpanded; mMediaHierarchyManager.setCollapsingShadeFromQS(mQsExpandedWhenExpandingStarted && /* We also start expanding when flinging closed Qs. Let's exclude that */ !mAnimatingQS); if (mQsExpanded) { onQsExpansionStarted(); } Loading @@ -2236,6 +2244,7 @@ public class NotificationPanelViewController extends PanelViewController { mHeadsUpManager.onExpandingFinished(); mConversationNotificationManager.onNotificationPanelExpandStateChanged(isFullyCollapsed()); mIsExpanding = false; mMediaHierarchyManager.setCollapsingShadeFromQS(false); if (isFullyCollapsed()) { DejankUtils.postAfterTraversal(new Runnable() { @Override Loading packages/SystemUI/src/com/android/systemui/util/animation/TransitionLayout.kt +3 −8 Original line number Diff line number Diff line Loading @@ -150,16 +150,11 @@ class TransitionLayout @JvmOverloads constructor( } override fun dispatchDraw(canvas: Canvas?) { val clip = !boundsRect.isEmpty if (clip) { canvas?.save() canvas?.clipRect(boundsRect) } super.dispatchDraw(canvas) if (clip) { canvas?.restore() } } private fun updateBounds() { val layoutLeft = left Loading Loading
packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt +10 −2 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ import com.android.systemui.plugins.FalsingManager import com.android.systemui.qs.PageIndicator import com.android.systemui.statusbar.notification.VisualStabilityManager import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.util.Utils import com.android.systemui.util.animation.UniqueObjectHostView import com.android.systemui.util.animation.requiresRemeasuring import com.android.systemui.util.concurrency.DelayableExecutor Loading Loading @@ -150,9 +151,16 @@ class MediaCarouselController @Inject constructor( mediaManager.addListener(object : MediaDataManager.Listener { override fun onMediaDataLoaded(key: String, oldKey: String?, data: MediaData) { oldKey?.let { mediaData.remove(it) } if (!data.active && !Utils.useMediaResumption(context)) { // This view is inactive, let's remove this! This happens e.g when dismissing / // timing out a view. We still have the data around because resumption could // be on, but we should save the resources and release this. onMediaDataRemoved(key) } else { mediaData.put(key, data) addOrUpdatePlayer(key, oldKey, data) } } override fun onMediaDataRemoved(key: String) { mediaData.remove(key) Loading
packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt +39 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,18 @@ class MediaHierarchyManager @Inject constructor( } } /** * Is the shade currently collapsing from the expanded qs? If we're on the lockscreen and in qs, * we wouldn't want to transition in that case. */ var collapsingShadeFromQS: Boolean = false set(value) { if (field != value) { field = value updateDesiredLocation(forceNoAnimation = true) } } /** * Are location changes currently blocked? */ Loading @@ -160,6 +172,19 @@ class MediaHierarchyManager @Inject constructor( } } /** * Are we currently fullyAwake */ private var fullyAwake: Boolean = false set(value) { if (field != value) { field = value if (value) { updateDesiredLocation(forceNoAnimation = true) } } } /** * Is the doze animation currently Running */ Loading Loading @@ -206,10 +231,12 @@ class MediaHierarchyManager @Inject constructor( override fun onStartedGoingToSleep() { goingToSleep = true fullyAwake = false } override fun onFinishedWakingUp() { goingToSleep = false fullyAwake = true } override fun onStartedWakingUp() { Loading Loading @@ -531,6 +558,18 @@ class MediaHierarchyManager @Inject constructor( !statusBarStateController.isDozing) { return LOCATION_QS } if (location == LOCATION_LOCKSCREEN && desiredLocation == LOCATION_QS && collapsingShadeFromQS) { // When collapsing on the lockscreen, we want to remain in QS return LOCATION_QS } if (location != LOCATION_LOCKSCREEN && desiredLocation == LOCATION_LOCKSCREEN && !fullyAwake) { // When unlocking from dozing / while waking up, the media shouldn't be transitioning // in an animated way. Let's keep it in the lockscreen until we're fully awake and // reattach it without an animation return LOCATION_LOCKSCREEN } return location } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +9 −0 Original line number Diff line number Diff line Loading @@ -443,6 +443,7 @@ public class NotificationPanelViewController extends PanelViewController { */ private boolean mDelayShowingKeyguardStatusBar; private boolean mAnimatingQS; private int mOldLayoutDirection; private View.AccessibilityDelegate mAccessibilityDelegate = new View.AccessibilityDelegate() { Loading Loading @@ -1860,6 +1861,7 @@ public class NotificationPanelViewController extends PanelViewController { @Override public void onAnimationEnd(Animator animation) { mAnimatingQS = false; notifyExpandingFinished(); mNotificationStackScroller.resetCheckSnoozeLeavebehind(); mQsExpansionAnimator = null; Loading @@ -1868,6 +1870,9 @@ public class NotificationPanelViewController extends PanelViewController { } } }); // Let's note that we're animating QS. Moving the animator here will cancel it immediately, // so we need a separate flag. mAnimatingQS = true; animator.start(); mQsExpansionAnimator = animator; mQsAnimatorExpand = expanding; Loading Loading @@ -2220,6 +2225,9 @@ public class NotificationPanelViewController extends PanelViewController { mNotificationStackScroller.onExpansionStarted(); mIsExpanding = true; mQsExpandedWhenExpandingStarted = mQsFullyExpanded; mMediaHierarchyManager.setCollapsingShadeFromQS(mQsExpandedWhenExpandingStarted && /* We also start expanding when flinging closed Qs. Let's exclude that */ !mAnimatingQS); if (mQsExpanded) { onQsExpansionStarted(); } Loading @@ -2236,6 +2244,7 @@ public class NotificationPanelViewController extends PanelViewController { mHeadsUpManager.onExpandingFinished(); mConversationNotificationManager.onNotificationPanelExpandStateChanged(isFullyCollapsed()); mIsExpanding = false; mMediaHierarchyManager.setCollapsingShadeFromQS(false); if (isFullyCollapsed()) { DejankUtils.postAfterTraversal(new Runnable() { @Override Loading
packages/SystemUI/src/com/android/systemui/util/animation/TransitionLayout.kt +3 −8 Original line number Diff line number Diff line Loading @@ -150,16 +150,11 @@ class TransitionLayout @JvmOverloads constructor( } override fun dispatchDraw(canvas: Canvas?) { val clip = !boundsRect.isEmpty if (clip) { canvas?.save() canvas?.clipRect(boundsRect) } super.dispatchDraw(canvas) if (clip) { canvas?.restore() } } private fun updateBounds() { val layoutLeft = left Loading