diff options
6 files changed, 31 insertions, 5 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt b/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt index 816cf6160c46..ef53233c22d4 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt +++ b/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt @@ -535,12 +535,20 @@ class MediaCarouselController @Inject constructor( this.desiredLocation = desiredLocation this.desiredHostState = it currentlyExpanded = it.expansion > 0 + + val shouldCloseGuts = !currentlyExpanded && !mediaManager.hasActiveMedia() && + desiredHostState.showsOnlyActiveMedia + for (mediaPlayer in MediaPlayerData.players()) { if (animate) { mediaPlayer.mediaViewController.animatePendingStateChange( duration = duration, delay = startDelay) } + if (shouldCloseGuts && mediaPlayer.mediaViewController.isGutsVisible) { + mediaPlayer.closeGuts(!animate) + } + mediaPlayer.mediaViewController.onLocationPreChange(desiredLocation) } mediaCarouselScrollHandler.showsSettingsButton = !it.showsOnlyActiveMedia @@ -556,9 +564,9 @@ class MediaCarouselController @Inject constructor( } } - fun closeGuts() { + fun closeGuts(immediate: Boolean = true) { MediaPlayerData.players().forEach { - it.closeGuts(true) + it.closeGuts(immediate) } } diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaCarouselScrollHandler.kt b/packages/SystemUI/src/com/android/systemui/media/MediaCarouselScrollHandler.kt index e5a62711a8d0..c806bcfed345 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaCarouselScrollHandler.kt +++ b/packages/SystemUI/src/com/android/systemui/media/MediaCarouselScrollHandler.kt @@ -59,7 +59,7 @@ class MediaCarouselScrollHandler( private val mainExecutor: DelayableExecutor, private val dismissCallback: () -> Unit, private var translationChangedListener: () -> Unit, - private val closeGuts: () -> Unit, + private val closeGuts: (immediate: Boolean) -> Unit, private val falsingCollector: FalsingCollector, private val falsingManager: FalsingManager, private val logSmartspaceImpression: () -> Unit @@ -473,7 +473,7 @@ class MediaCarouselScrollHandler( if (oldIndex != visibleMediaIndex && visibleToUser) { logSmartspaceImpression() } - closeGuts() + closeGuts(false) updatePlayerVisibilities() } val relativeLocation = visibleMediaIndex.toFloat() + if (playerWidthPlusPadding > 0) diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java b/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java index bc11fee0c4c2..3e9559b1a9ec 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java +++ b/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java @@ -213,7 +213,8 @@ public class MediaControlPanel { mMediaViewController.openGuts(); return true; } else { - return false; + closeGuts(); + return true; } }); mPlayerViewHolder.getCancel().setOnClickListener(v -> { diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt b/packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt index 3c28f6e1651a..60e832ace7b0 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt +++ b/packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt @@ -273,6 +273,7 @@ class MediaHierarchyManager @Inject constructor( } else { updateDesiredLocation() qsExpanded = false + closeGuts() } mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() } diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt index dd3a19228b4e..e62fa912e610 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt @@ -289,6 +289,7 @@ public class MediaControlPanelTest : SysuiTestCase() { captor.value.onLongClick(holder.player) verify(mediaViewController, never()).openGuts() + verify(mediaViewController).closeGuts(false) } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/MediaHierarchyManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/MediaHierarchyManagerTest.kt index 406f40c75735..a974421a9b7c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/MediaHierarchyManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/MediaHierarchyManagerTest.kt @@ -24,6 +24,7 @@ import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.controls.controller.ControlsControllerImplTest.Companion.eq import com.android.systemui.keyguard.WakefulnessLifecycle +import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController @@ -73,11 +74,15 @@ class MediaHierarchyManagerTest : SysuiTestCase() { @Mock private lateinit var mediaCarouselController: MediaCarouselController @Mock + private lateinit var mediaCarouselScrollHandler: MediaCarouselScrollHandler + @Mock private lateinit var wakefulnessLifecycle: WakefulnessLifecycle @Mock private lateinit var statusBarKeyguardViewManager: StatusBarKeyguardViewManager @Captor private lateinit var wakefullnessObserver: ArgumentCaptor<(WakefulnessLifecycle.Observer)> + @Captor + private lateinit var statusBarCallback: ArgumentCaptor<(StatusBarStateController.StateListener)> @JvmField @Rule val mockito = MockitoJUnit.rule() @@ -96,10 +101,13 @@ class MediaHierarchyManagerTest : SysuiTestCase() { wakefulnessLifecycle, statusBarKeyguardViewManager) verify(wakefulnessLifecycle).addObserver(wakefullnessObserver.capture()) + verify(statusBarStateController).addCallback(statusBarCallback.capture()) setupHost(lockHost, MediaHierarchyManager.LOCATION_LOCKSCREEN) setupHost(qsHost, MediaHierarchyManager.LOCATION_QS) setupHost(qqsHost, MediaHierarchyManager.LOCATION_QQS) `when`(statusBarStateController.state).thenReturn(StatusBarState.SHADE) + `when`(mediaCarouselController.mediaCarouselScrollHandler) + .thenReturn(mediaCarouselScrollHandler) // We'll use the viewmanager to verify a few calls below, let's reset this. clearInvocations(mediaCarouselController) } @@ -153,4 +161,11 @@ class MediaHierarchyManagerTest : SysuiTestCase() { verify(mediaCarouselController).closeGuts() } + + @Test + fun testCloseGutsWhenDoze() { + statusBarCallback.value.onDozingChanged(true) + + verify(mediaCarouselController).closeGuts() + } }
\ No newline at end of file |