Merge "Update UMO position logic to only place in dream when the dream media complication is active." into tm-qpr-dev

This commit is contained in:
Lucas Silva
2022-09-09 13:06:56 +00:00
committed by Android (Google) Code Review
2 changed files with 61 additions and 2 deletions

View File

@@ -41,6 +41,7 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dreams.DreamOverlayStateController import com.android.systemui.dreams.DreamOverlayStateController
import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.media.dream.MediaDreamComplication
import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.NotifPanelEvents import com.android.systemui.shade.NotifPanelEvents
import com.android.systemui.statusbar.CrossFadeHelper import com.android.systemui.statusbar.CrossFadeHelper
@@ -401,7 +402,7 @@ class MediaHierarchyManager @Inject constructor(
} }
/** /**
* Is the doze animation currently Running * Is the dream overlay currently active
*/ */
private var dreamOverlayActive: Boolean = false private var dreamOverlayActive: Boolean = false
private set(value) { private set(value) {
@@ -411,6 +412,17 @@ class MediaHierarchyManager @Inject constructor(
} }
} }
/**
* Is the dream media complication currently active
*/
private var dreamMediaComplicationActive: Boolean = false
private set(value) {
if (field != value) {
field = value
updateDesiredLocation(forceNoAnimation = true)
}
}
/** /**
* The current cross fade progress. 0.5f means it's just switching * The current cross fade progress. 0.5f means it's just switching
* between the start and the end location and the content is fully faded, while 0.75f means * between the start and the end location and the content is fully faded, while 0.75f means
@@ -500,6 +512,12 @@ class MediaHierarchyManager @Inject constructor(
}) })
dreamOverlayStateController.addCallback(object : DreamOverlayStateController.Callback { dreamOverlayStateController.addCallback(object : DreamOverlayStateController.Callback {
override fun onComplicationsChanged() {
dreamMediaComplicationActive = dreamOverlayStateController.complications.any {
it is MediaDreamComplication
}
}
override fun onStateChanged() { override fun onStateChanged() {
dreamOverlayStateController.isOverlayActive.also { dreamOverlayActive = it } dreamOverlayStateController.isOverlayActive.also { dreamOverlayActive = it }
} }
@@ -1068,7 +1086,7 @@ class MediaHierarchyManager @Inject constructor(
val onLockscreen = (!bypassController.bypassEnabled && val onLockscreen = (!bypassController.bypassEnabled &&
(statusbarState == StatusBarState.KEYGUARD)) (statusbarState == StatusBarState.KEYGUARD))
val location = when { val location = when {
dreamOverlayActive -> LOCATION_DREAM_OVERLAY dreamOverlayActive && dreamMediaComplicationActive -> LOCATION_DREAM_OVERLAY
(qsExpansion > 0.0f || inSplitShade) && !onLockscreen -> LOCATION_QS (qsExpansion > 0.0f || inSplitShade) && !onLockscreen -> LOCATION_QS
qsExpansion > 0.4f && onLockscreen -> LOCATION_QS qsExpansion > 0.4f && onLockscreen -> LOCATION_QS
!hasActiveMedia -> LOCATION_QS !hasActiveMedia -> LOCATION_QS

View File

@@ -29,6 +29,7 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.controls.controller.ControlsControllerImplTest.Companion.eq import com.android.systemui.controls.controller.ControlsControllerImplTest.Companion.eq
import com.android.systemui.dreams.DreamOverlayStateController import com.android.systemui.dreams.DreamOverlayStateController
import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.media.dream.MediaDreamComplication
import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.testing.FakeNotifPanelEvents import com.android.systemui.shade.testing.FakeNotifPanelEvents
import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.StatusBarState
@@ -38,6 +39,8 @@ import com.android.systemui.statusbar.policy.FakeConfigurationController
import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.animation.UniqueObjectHostView import com.android.systemui.util.animation.UniqueObjectHostView
import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.nullable
import com.android.systemui.util.settings.FakeSettings import com.android.systemui.util.settings.FakeSettings
import com.android.systemui.utils.os.FakeHandler import com.android.systemui.utils.os.FakeHandler
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
@@ -79,6 +82,9 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
private lateinit var wakefullnessObserver: ArgumentCaptor<(WakefulnessLifecycle.Observer)> private lateinit var wakefullnessObserver: ArgumentCaptor<(WakefulnessLifecycle.Observer)>
@Captor @Captor
private lateinit var statusBarCallback: ArgumentCaptor<(StatusBarStateController.StateListener)> private lateinit var statusBarCallback: ArgumentCaptor<(StatusBarStateController.StateListener)>
@Captor
private lateinit var dreamOverlayCallback:
ArgumentCaptor<(DreamOverlayStateController.Callback)>
@JvmField @JvmField
@Rule @Rule
val mockito = MockitoJUnit.rule() val mockito = MockitoJUnit.rule()
@@ -113,6 +119,7 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
fakeHandler,) fakeHandler,)
verify(wakefulnessLifecycle).addObserver(wakefullnessObserver.capture()) verify(wakefulnessLifecycle).addObserver(wakefullnessObserver.capture())
verify(statusBarStateController).addCallback(statusBarCallback.capture()) verify(statusBarStateController).addCallback(statusBarCallback.capture())
verify(dreamOverlayStateController).addCallback(dreamOverlayCallback.capture())
setupHost(lockHost, MediaHierarchyManager.LOCATION_LOCKSCREEN, LOCKSCREEN_TOP) setupHost(lockHost, MediaHierarchyManager.LOCATION_LOCKSCREEN, LOCKSCREEN_TOP)
setupHost(qsHost, MediaHierarchyManager.LOCATION_QS, QS_TOP) setupHost(qsHost, MediaHierarchyManager.LOCATION_QS, QS_TOP)
setupHost(qqsHost, MediaHierarchyManager.LOCATION_QQS, QQS_TOP) setupHost(qqsHost, MediaHierarchyManager.LOCATION_QQS, QQS_TOP)
@@ -332,6 +339,27 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
assertThat(mediaHierarchyManager.isCurrentlyInGuidedTransformation()).isFalse() assertThat(mediaHierarchyManager.isCurrentlyInGuidedTransformation()).isFalse()
} }
@Test
fun testDream() {
goToDream()
setMediaDreamComplicationEnabled(true)
verify(mediaCarouselController).onDesiredLocationChanged(
eq(MediaHierarchyManager.LOCATION_DREAM_OVERLAY),
nullable(),
eq(false),
anyLong(),
anyLong())
clearInvocations(mediaCarouselController)
setMediaDreamComplicationEnabled(false)
verify(mediaCarouselController).onDesiredLocationChanged(
eq(MediaHierarchyManager.LOCATION_QQS),
any(MediaHostState::class.java),
eq(false),
anyLong(),
anyLong())
}
private fun enableSplitShade() { private fun enableSplitShade() {
context.getOrCreateTestableResources().addOverride( context.getOrCreateTestableResources().addOverride(
R.bool.config_use_split_notification_shade, true R.bool.config_use_split_notification_shade, true
@@ -343,6 +371,8 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
whenever(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD) whenever(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD)
settings.putInt(Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN, 1) settings.putInt(Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN, 1)
statusBarCallback.value.onStatePreChange(StatusBarState.SHADE, StatusBarState.KEYGUARD) statusBarCallback.value.onStatePreChange(StatusBarState.SHADE, StatusBarState.KEYGUARD)
whenever(dreamOverlayStateController.isOverlayActive).thenReturn(false)
dreamOverlayCallback.value.onStateChanged()
clearInvocations(mediaCarouselController) clearInvocations(mediaCarouselController)
} }
@@ -354,6 +384,17 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
) )
} }
private fun goToDream() {
whenever(dreamOverlayStateController.isOverlayActive).thenReturn(true)
dreamOverlayCallback.value.onStateChanged()
}
private fun setMediaDreamComplicationEnabled(enabled: Boolean) {
val complications = if (enabled) listOf(mock<MediaDreamComplication>()) else emptyList()
whenever(dreamOverlayStateController.complications).thenReturn(complications)
dreamOverlayCallback.value.onComplicationsChanged()
}
private fun expandQS() { private fun expandQS() {
mediaHierarchyManager.qsExpansion = 1.0f mediaHierarchyManager.qsExpansion = 1.0f
} }