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

Commit 1ed25c6c authored by Beth Thibodeau's avatar Beth Thibodeau Committed by Android (Google) Code Review
Browse files

Merge "Update media visibility on lock screen" into sc-dev

parents d4ed5549 0d533a9c
Loading
Loading
Loading
Loading
+1 −4
Original line number Original line Diff line number Diff line
@@ -25,7 +25,6 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.media.dagger.MediaModule.KEYGUARD
import com.android.systemui.media.dagger.MediaModule.KEYGUARD
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.statusbar.FeatureFlags
import com.android.systemui.statusbar.FeatureFlags
import com.android.systemui.statusbar.NotificationLockscreenUserManager
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.SysuiStatusBarStateController
import com.android.systemui.statusbar.SysuiStatusBarStateController
import com.android.systemui.statusbar.notification.stack.MediaHeaderView
import com.android.systemui.statusbar.notification.stack.MediaHeaderView
@@ -44,7 +43,6 @@ class KeyguardMediaController @Inject constructor(
    @param:Named(KEYGUARD) private val mediaHost: MediaHost,
    @param:Named(KEYGUARD) private val mediaHost: MediaHost,
    private val bypassController: KeyguardBypassController,
    private val bypassController: KeyguardBypassController,
    private val statusBarStateController: SysuiStatusBarStateController,
    private val statusBarStateController: SysuiStatusBarStateController,
    private val notifLockscreenUserManager: NotificationLockscreenUserManager,
    private val featureFlags: FeatureFlags,
    private val featureFlags: FeatureFlags,
    private val context: Context,
    private val context: Context,
    configurationController: ConfigurationController
    configurationController: ConfigurationController
@@ -166,8 +164,7 @@ class KeyguardMediaController @Inject constructor(
        // mediaHost.visible required for proper animations handling
        // mediaHost.visible required for proper animations handling
        visible = mediaHost.visible &&
        visible = mediaHost.visible &&
                !bypassController.bypassEnabled &&
                !bypassController.bypassEnabled &&
                keyguardOrUserSwitcher &&
                keyguardOrUserSwitcher
                notifLockscreenUserManager.shouldShowLockscreenNotifications()
        if (visible) {
        if (visible) {
            showMediaPlayer()
            showMediaPlayer()
        } else {
        } else {
+1 −0
Original line number Original line Diff line number Diff line
@@ -169,6 +169,7 @@ class MediaCarouselController @Inject constructor(
     * It will be called when the container is out of view.
     * It will be called when the container is out of view.
     */
     */
    lateinit var updateUserVisibility: () -> Unit
    lateinit var updateUserVisibility: () -> Unit
    lateinit var updateHostVisibility: () -> Unit


    init {
    init {
        dumpManager.registerDumpable(TAG, this)
        dumpManager.registerDumpable(TAG, this)
+13 −0
Original line number Original line Diff line number Diff line
@@ -409,6 +409,7 @@ class MediaHierarchyManager @Inject constructor(
                    mediaCarouselController.logSmartspaceImpression(qsExpanded)
                    mediaCarouselController.logSmartspaceImpression(qsExpanded)
                }
                }
                mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser()
                mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser()
                mediaCarouselController.updateHostVisibility()
            }
            }


            override fun onDozeAmountChanged(linear: Float, eased: Float) {
            override fun onDozeAmountChanged(linear: Float, eased: Float) {
@@ -462,6 +463,11 @@ class MediaHierarchyManager @Inject constructor(
        mediaCarouselController.updateUserVisibility = {
        mediaCarouselController.updateUserVisibility = {
            mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser()
            mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser()
        }
        }
        mediaCarouselController.updateHostVisibility = {
            mediaHosts.forEach {
                it?.updateViewVisibility()
            }
        }
    }
    }


    private fun updateConfiguration() {
    private fun updateConfiguration() {
@@ -506,6 +512,13 @@ class MediaHierarchyManager @Inject constructor(
        mediaCarouselController.closeGuts()
        mediaCarouselController.closeGuts()
    }
    }


    /** Return true if the carousel should be hidden because lockscreen is currently visible */
    fun isLockedAndHidden(): Boolean {
        return !notifLockscreenUserManager.shouldShowLockscreenNotifications() &&
                (statusbarState == StatusBarState.SHADE_LOCKED ||
                        statusbarState == StatusBarState.KEYGUARD)
    }

    private fun createUniqueObjectHost(): UniqueObjectHostView {
    private fun createUniqueObjectHost(): UniqueObjectHostView {
        val viewHost = UniqueObjectHostView(context)
        val viewHost = UniqueObjectHostView(context)
        viewHost.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
        viewHost.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
+8 −2
Original line number Original line Diff line number Diff line
@@ -159,8 +159,14 @@ class MediaHost constructor(
        }
        }
    }
    }


    private fun updateViewVisibility() {
    /**
        state.visible = if (showsOnlyActiveMedia) {
     * Updates this host's state based on the current media data's status, and invokes listeners if
     * the visibility has changed
     */
    fun updateViewVisibility() {
        state.visible = if (mediaHierarchyManager.isLockedAndHidden()) {
            false
        } else if (showsOnlyActiveMedia) {
            mediaDataManager.hasActiveMedia()
            mediaDataManager.hasActiveMedia()
        } else {
        } else {
            mediaDataManager.hasAnyMedia()
            mediaDataManager.hasAnyMedia()
+0 −16
Original line number Original line Diff line number Diff line
@@ -23,7 +23,6 @@ import android.widget.FrameLayout
import androidx.test.filters.SmallTest
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.SysuiTestCase
import com.android.systemui.statusbar.FeatureFlags
import com.android.systemui.statusbar.FeatureFlags
import com.android.systemui.statusbar.NotificationLockscreenUserManager
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.SysuiStatusBarStateController
import com.android.systemui.statusbar.SysuiStatusBarStateController
import com.android.systemui.statusbar.notification.stack.MediaHeaderView
import com.android.systemui.statusbar.notification.stack.MediaHeaderView
@@ -54,8 +53,6 @@ class KeyguardMediaControllerTest : SysuiTestCase() {
    private lateinit var configurationController: ConfigurationController
    private lateinit var configurationController: ConfigurationController
    @Mock
    @Mock
    private lateinit var featureFlags: FeatureFlags
    private lateinit var featureFlags: FeatureFlags
    @Mock
    private lateinit var notificationLockscreenUserManager: NotificationLockscreenUserManager
    @JvmField @Rule
    @JvmField @Rule
    val mockito = MockitoJUnit.rule()
    val mockito = MockitoJUnit.rule()


@@ -68,15 +65,12 @@ class KeyguardMediaControllerTest : SysuiTestCase() {
        // default state is positive, media should show up
        // default state is positive, media should show up
        whenever(mediaHost.visible).thenReturn(true)
        whenever(mediaHost.visible).thenReturn(true)
        whenever(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD)
        whenever(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD)
        whenever(notificationLockscreenUserManager.shouldShowLockscreenNotifications())
                .thenReturn(true)
        whenever(mediaHost.hostView).thenReturn(hostView)
        whenever(mediaHost.hostView).thenReturn(hostView)


        keyguardMediaController = KeyguardMediaController(
        keyguardMediaController = KeyguardMediaController(
            mediaHost,
            mediaHost,
            bypassController,
            bypassController,
            statusBarStateController,
            statusBarStateController,
            notificationLockscreenUserManager,
            featureFlags,
            featureFlags,
            context,
            context,
            configurationController
            configurationController
@@ -107,16 +101,6 @@ class KeyguardMediaControllerTest : SysuiTestCase() {
        assertThat(mediaHeaderView.visibility).isEqualTo(visibility)
        assertThat(mediaHeaderView.visibility).isEqualTo(visibility)
    }
    }


    @Test
    fun testHiddenOnKeyguard_whenNotificationsAreHidden() {
        whenever(notificationLockscreenUserManager.shouldShowLockscreenNotifications())
                .thenReturn(false)

        keyguardMediaController.refreshMediaPosition()

        assertThat(mediaHeaderView.visibility).isEqualTo(GONE)
    }

    @Test
    @Test
    fun testActivatesSplitShadeContainerInSplitShadeMode() {
    fun testActivatesSplitShadeContainerInSplitShadeMode() {
        val splitShadeContainer = FrameLayout(context)
        val splitShadeContainer = FrameLayout(context)
Loading