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

Commit f1f43699 authored by Beth Thibodeau's avatar Beth Thibodeau Committed by Automerger Merge Worker
Browse files

Merge "Stop seekbar listening when carousel is not visible" into udc-dev am: b33e77ae

parents 4fcf6af1 b33e77ae
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -166,6 +166,7 @@ constructor(
            }
            }
        }
        }


    /** Whether the media card currently has the "expanded" layout */
    @VisibleForTesting
    @VisibleForTesting
    var currentlyExpanded = true
    var currentlyExpanded = true
        set(value) {
        set(value) {
@@ -501,6 +502,7 @@ constructor(
        mediaHostStatesManager.addCallback(
        mediaHostStatesManager.addCallback(
            object : MediaHostStatesManager.Callback {
            object : MediaHostStatesManager.Callback {
                override fun onHostStateChanged(location: Int, mediaHostState: MediaHostState) {
                override fun onHostStateChanged(location: Int, mediaHostState: MediaHostState) {
                    updateUserVisibility()
                    if (location == desiredLocation) {
                    if (location == desiredLocation) {
                        onDesiredLocationChanged(desiredLocation, mediaHostState, animate = false)
                        onDesiredLocationChanged(desiredLocation, mediaHostState, animate = false)
                    }
                    }
+14 −15
Original line number Original line Diff line number Diff line
@@ -257,7 +257,7 @@ constructor(
            if (value && (isLockScreenShadeVisibleToUser() || isHomeScreenShadeVisibleToUser())) {
            if (value && (isLockScreenShadeVisibleToUser() || isHomeScreenShadeVisibleToUser())) {
                mediaCarouselController.logSmartspaceImpression(value)
                mediaCarouselController.logSmartspaceImpression(value)
            }
            }
            mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser()
            updateUserVisibility()
        }
        }


    /**
    /**
@@ -460,8 +460,7 @@ constructor(
                    ) {
                    ) {
                        mediaCarouselController.logSmartspaceImpression(qsExpanded)
                        mediaCarouselController.logSmartspaceImpression(qsExpanded)
                    }
                    }
                    mediaCarouselController.mediaCarouselScrollHandler.visibleToUser =
                    updateUserVisibility()
                        isVisibleToUser()
                }
                }


                override fun onDozeAmountChanged(linear: Float, eased: Float) {
                override fun onDozeAmountChanged(linear: Float, eased: Float) {
@@ -480,8 +479,7 @@ constructor(
                        qsExpanded = false
                        qsExpanded = false
                        closeGuts()
                        closeGuts()
                    }
                    }
                    mediaCarouselController.mediaCarouselScrollHandler.visibleToUser =
                    updateUserVisibility()
                        isVisibleToUser()
                }
                }


                override fun onExpandedChanged(isExpanded: Boolean) {
                override fun onExpandedChanged(isExpanded: Boolean) {
@@ -489,8 +487,7 @@ constructor(
                    if (isHomeScreenShadeVisibleToUser()) {
                    if (isHomeScreenShadeVisibleToUser()) {
                        mediaCarouselController.logSmartspaceImpression(qsExpanded)
                        mediaCarouselController.logSmartspaceImpression(qsExpanded)
                    }
                    }
                    mediaCarouselController.mediaCarouselScrollHandler.visibleToUser =
                    updateUserVisibility()
                        isVisibleToUser()
                }
                }
            }
            }
        )
        )
@@ -532,9 +529,7 @@ constructor(
            }
            }
        )
        )


        mediaCarouselController.updateUserVisibility = {
        mediaCarouselController.updateUserVisibility = this::updateUserVisibility
            mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser()
        }
        mediaCarouselController.updateHostVisibility = {
        mediaCarouselController.updateHostVisibility = {
            mediaHosts.forEach { it?.updateViewVisibility() }
            mediaHosts.forEach { it?.updateViewVisibility() }
        }
        }
@@ -1180,11 +1175,15 @@ constructor(
        return isCrossFadeAnimatorRunning
        return isCrossFadeAnimatorRunning
    }
    }


    /** Returns true when the media card could be visible to the user if existed. */
    /** Update whether or not the media carousel could be visible to the user */
    private fun isVisibleToUser(): Boolean {
    private fun updateUserVisibility() {
        return isLockScreenVisibleToUser() ||
        val shadeVisible =
            isLockScreenVisibleToUser() ||
                isLockScreenShadeVisibleToUser() ||
                isLockScreenShadeVisibleToUser() ||
                isHomeScreenShadeVisibleToUser()
                isHomeScreenShadeVisibleToUser()
        val mediaVisible = qsExpanded || hasActiveMediaOrRecommendation
        mediaCarouselController.mediaCarouselScrollHandler.visibleToUser =
            shadeVisible && mediaVisible
    }
    }


    private fun isLockScreenVisibleToUser(): Boolean {
    private fun isLockScreenVisibleToUser(): Boolean {
+14 −0
Original line number Original line Diff line number Diff line
@@ -110,6 +110,7 @@ class MediaCarouselControllerTest : SysuiTestCase() {
    lateinit var configListener: ArgumentCaptor<ConfigurationController.ConfigurationListener>
    lateinit var configListener: ArgumentCaptor<ConfigurationController.ConfigurationListener>
    @Captor lateinit var visualStabilityCallback: ArgumentCaptor<OnReorderingAllowedListener>
    @Captor lateinit var visualStabilityCallback: ArgumentCaptor<OnReorderingAllowedListener>
    @Captor lateinit var keyguardCallback: ArgumentCaptor<KeyguardUpdateMonitorCallback>
    @Captor lateinit var keyguardCallback: ArgumentCaptor<KeyguardUpdateMonitorCallback>
    @Captor lateinit var hostStateCallback: ArgumentCaptor<MediaHostStatesManager.Callback>


    private val clock = FakeSystemClock()
    private val clock = FakeSystemClock()
    private lateinit var mediaCarouselController: MediaCarouselController
    private lateinit var mediaCarouselController: MediaCarouselController
@@ -143,6 +144,7 @@ class MediaCarouselControllerTest : SysuiTestCase() {
        verify(visualStabilityProvider)
        verify(visualStabilityProvider)
            .addPersistentReorderingAllowedListener(capture(visualStabilityCallback))
            .addPersistentReorderingAllowedListener(capture(visualStabilityCallback))
        verify(keyguardUpdateMonitor).registerCallback(capture(keyguardCallback))
        verify(keyguardUpdateMonitor).registerCallback(capture(keyguardCallback))
        verify(mediaHostStatesManager).addCallback(capture(hostStateCallback))
        whenever(mediaControlPanelFactory.get()).thenReturn(panel)
        whenever(mediaControlPanelFactory.get()).thenReturn(panel)
        whenever(panel.mediaViewController).thenReturn(mediaViewController)
        whenever(panel.mediaViewController).thenReturn(mediaViewController)
        whenever(mediaDataManager.smartspaceMediaData).thenReturn(smartspaceMediaData)
        whenever(mediaDataManager.smartspaceMediaData).thenReturn(smartspaceMediaData)
@@ -832,4 +834,16 @@ class MediaCarouselControllerTest : SysuiTestCase() {
        // Verify that seekbar listening attribute in media control panel is set to false.
        // Verify that seekbar listening attribute in media control panel is set to false.
        verify(panel, times(MediaPlayerData.players().size)).listening = false
        verify(panel, times(MediaPlayerData.players().size)).listening = false
    }
    }

    @Test
    fun testOnHostStateChanged_updateVisibility() {
        var stateUpdated = false
        mediaCarouselController.updateUserVisibility = { stateUpdated = true }

        // When the host state updates
        hostStateCallback.value!!.onHostStateChanged(LOCATION_QS, mediaHostState)

        // Then the carousel visibility is updated
        assertTrue(stateUpdated)
    }
}
}
+15 −0
Original line number Original line Diff line number Diff line
@@ -470,6 +470,21 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
            )
            )
    }
    }


    @Test
    fun testQsExpandedChanged_noQqsMedia() {
        // When we are looking at QQS with active media
        whenever(statusBarStateController.state).thenReturn(StatusBarState.SHADE)
        whenever(statusBarStateController.isExpanded).thenReturn(true)

        // When there is no longer any active media
        whenever(mediaDataManager.hasActiveMediaOrRecommendation()).thenReturn(false)
        mediaHierarchyManager.qsExpanded = false

        // Then the carousel is set to not visible
        verify(mediaCarouselScrollHandler).visibleToUser = false
        assertThat(mediaCarouselScrollHandler.visibleToUser).isFalse()
    }

    private fun enableSplitShade() {
    private fun enableSplitShade() {
        context
        context
            .getOrCreateTestableResources()
            .getOrCreateTestableResources()