Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 45f6cc7d authored by Lucas Silva's avatar Lucas Silva
Browse files

Update UMO position logic to only place in dream when the dream media

complication is active.

Bug: 243401956
Test: atest MediaHierarchyManagerTest
Test: locally on device by enabling the media dream complication sysui
flag

Change-Id: I9cd331b58f03ac9819eb7afd70da3adde695f934
parent e04e312e
Loading
Loading
Loading
Loading
+20 −2
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dreams.DreamOverlayStateController
import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.media.dream.MediaDreamComplication
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.NotifPanelEvents
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 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
     * 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 {
            override fun onComplicationsChanged() {
                dreamMediaComplicationActive = dreamOverlayStateController.complications.any {
                    it is MediaDreamComplication
                }
            }

            override fun onStateChanged() {
                dreamOverlayStateController.isOverlayActive.also { dreamOverlayActive = it }
            }
@@ -1068,7 +1086,7 @@ class MediaHierarchyManager @Inject constructor(
        val onLockscreen = (!bypassController.bypassEnabled &&
            (statusbarState == StatusBarState.KEYGUARD))
        val location = when {
            dreamOverlayActive -> LOCATION_DREAM_OVERLAY
            dreamOverlayActive && dreamMediaComplicationActive -> LOCATION_DREAM_OVERLAY
            (qsExpansion > 0.0f || inSplitShade) && !onLockscreen -> LOCATION_QS
            qsExpansion > 0.4f && onLockscreen -> LOCATION_QS
            !hasActiveMedia -> LOCATION_QS
+41 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.controls.controller.ControlsControllerImplTest.Companion.eq
import com.android.systemui.dreams.DreamOverlayStateController
import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.media.dream.MediaDreamComplication
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.testing.FakeNotifPanelEvents
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.util.animation.UniqueObjectHostView
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.utils.os.FakeHandler
import com.google.common.truth.Truth.assertThat
@@ -79,6 +82,9 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
    private lateinit var wakefullnessObserver: ArgumentCaptor<(WakefulnessLifecycle.Observer)>
    @Captor
    private lateinit var statusBarCallback: ArgumentCaptor<(StatusBarStateController.StateListener)>
    @Captor
    private lateinit var dreamOverlayCallback:
            ArgumentCaptor<(DreamOverlayStateController.Callback)>
    @JvmField
    @Rule
    val mockito = MockitoJUnit.rule()
@@ -113,6 +119,7 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
                fakeHandler,)
        verify(wakefulnessLifecycle).addObserver(wakefullnessObserver.capture())
        verify(statusBarStateController).addCallback(statusBarCallback.capture())
        verify(dreamOverlayStateController).addCallback(dreamOverlayCallback.capture())
        setupHost(lockHost, MediaHierarchyManager.LOCATION_LOCKSCREEN, LOCKSCREEN_TOP)
        setupHost(qsHost, MediaHierarchyManager.LOCATION_QS, QS_TOP)
        setupHost(qqsHost, MediaHierarchyManager.LOCATION_QQS, QQS_TOP)
@@ -332,6 +339,27 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
        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() {
        context.getOrCreateTestableResources().addOverride(
            R.bool.config_use_split_notification_shade, true
@@ -343,6 +371,8 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
        whenever(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD)
        settings.putInt(Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN, 1)
        statusBarCallback.value.onStatePreChange(StatusBarState.SHADE, StatusBarState.KEYGUARD)
        whenever(dreamOverlayStateController.isOverlayActive).thenReturn(false)
        dreamOverlayCallback.value.onStateChanged()
        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() {
        mediaHierarchyManager.qsExpansion = 1.0f
    }