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

Commit 89bd618d authored by Michal Brzezinski's avatar Michal Brzezinski Committed by Michał Brzeziński
Browse files

Tests for media player on the left side on lockscreen in split shade mode

Bug: 181882240
Test: atest KeyguardMediaControllerTest KeyguardClockPositionAlgorithmTest NotificationPanelViewTest
Change-Id: Id51293dbd134ea45ed0084a89f2da48136599168
parent 4e0bac82
Loading
Loading
Loading
Loading
+60 −25
Original line number Diff line number Diff line
@@ -19,23 +19,23 @@ package com.android.systemui.media
import android.testing.AndroidTestingRunner
import android.view.View.GONE
import android.view.View.VISIBLE
import android.widget.FrameLayout
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.controls.controller.ControlsControllerImplTest.Companion.eq
import com.android.systemui.statusbar.NotificationLockscreenUserManager
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.SysuiStatusBarStateController
import com.android.systemui.statusbar.notification.stack.MediaHeaderView
import com.android.systemui.statusbar.phone.KeyguardBypassController
import com.android.systemui.util.animation.UniqueObjectHostView
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.atLeastOnce
import org.mockito.Mockito.verify
import org.mockito.junit.MockitoJUnit
import org.mockito.Mockito.`when` as whenever

@SmallTest
@RunWith(AndroidTestingRunner::class)
@@ -49,46 +49,81 @@ class KeyguardMediaControllerTest : SysuiTestCase() {
    private lateinit var statusBarStateController: SysuiStatusBarStateController
    @Mock
    private lateinit var notificationLockscreenUserManager: NotificationLockscreenUserManager
    @Mock
    private lateinit var mediaHeaderView: MediaHeaderView
    @JvmField @Rule
    val mockito = MockitoJUnit.rule()

    private val mediaHeaderView: MediaHeaderView = MediaHeaderView(context, null)
    private lateinit var keyguardMediaController: KeyguardMediaController

    @Before
    fun setup() {
        // default state is positive, media should show up
        whenever(mediaHost.visible).thenReturn(true)
        whenever(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD)
        whenever(notificationLockscreenUserManager.shouldShowLockscreenNotifications())
                .thenReturn(true)
        whenever(mediaHost.hostView).thenReturn(UniqueObjectHostView(context))

        keyguardMediaController = KeyguardMediaController(mediaHost, bypassController,
                statusBarStateController, notificationLockscreenUserManager)
        keyguardMediaController.attachSinglePaneContainer(mediaHeaderView)
    }

    @Test
    fun testAttach_hiddenWhenHostIsHidden() {
        `when`(mediaHost.visible).thenReturn(false)
    fun testHiddenWhenHostIsHidden() {
        whenever(mediaHost.visible).thenReturn(false)

        keyguardMediaController.attachSinglePaneContainer(mediaHeaderView)
        keyguardMediaController.refreshMediaPosition()

        verify(mediaHeaderView, atLeastOnce()).visibility = eq(GONE)
        assertThat(mediaHeaderView.visibility).isEqualTo(GONE)
    }
    @Test
    fun testAttach_visibleOnKeyguard() {
        `when`(mediaHost.visible).thenReturn(true)
        `when`(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD)
        `when`(notificationLockscreenUserManager.shouldShowLockscreenNotifications())
                .thenReturn(true)

        keyguardMediaController.attachSinglePaneContainer(mediaHeaderView)
    @Test
    fun testVisibleOnKeyguardOrFullScreenUserSwitcher() {
        testStateVisibility(StatusBarState.SHADE, GONE)
        testStateVisibility(StatusBarState.SHADE_LOCKED, GONE)
        testStateVisibility(StatusBarState.FULLSCREEN_USER_SWITCHER, VISIBLE)
        testStateVisibility(StatusBarState.KEYGUARD, VISIBLE)
    }

        verify(mediaHeaderView, atLeastOnce()).visibility = eq(VISIBLE)
    private fun testStateVisibility(state: Int, visibility: Int) {
        whenever(statusBarStateController.state).thenReturn(state)
        keyguardMediaController.refreshMediaPosition()
        assertThat(mediaHeaderView.visibility).isEqualTo(visibility)
    }

    @Test
    fun testAttach_hiddenOnKeyguard_whenNotificationsAreHidden() {
        `when`(mediaHost.visible).thenReturn(true)
        `when`(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD)
        `when`(notificationLockscreenUserManager.shouldShowLockscreenNotifications())
    fun testHiddenOnKeyguard_whenNotificationsAreHidden() {
        whenever(notificationLockscreenUserManager.shouldShowLockscreenNotifications())
                .thenReturn(false)

        keyguardMediaController.attachSinglePaneContainer(mediaHeaderView)
        keyguardMediaController.refreshMediaPosition()

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

    @Test
    fun testActivatesSplitShadeContainerInSplitShadeMode() {
        val splitShadeContainer = FrameLayout(context)
        keyguardMediaController.attachSplitShadeContainer(
                splitShadeContainer,
                useContainer = { true })

        keyguardMediaController.refreshMediaPosition()

        assertThat(splitShadeContainer.visibility).isEqualTo(VISIBLE)
    }

    @Test
    fun testActivatesSinglePaneContainerInSinglePaneMode() {
        val splitShadeContainer = FrameLayout(context)
        keyguardMediaController.attachSplitShadeContainer(
                splitShadeContainer,
                useContainer = { false })

        keyguardMediaController.refreshMediaPosition()

        verify(mediaHeaderView, atLeastOnce()).visibility = eq(GONE)
        assertThat(splitShadeContainer.visibility).isEqualTo(GONE)
        assertThat(mediaHeaderView.visibility).isEqualTo(VISIBLE)
    }
}
+13 −0
Original line number Diff line number Diff line
@@ -265,6 +265,19 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase {
        assertThat(mClockPosition.stackScrollerPadding).isEqualTo(810);
    }

    @Test
    public void notifPositionAlignedWithClockInSplitShadeMode() {
        // GIVEN on lock screen and split shade mode
        givenLockScreen();
        mIsSplitShade = true;
        mPreferredClockY = 100;
        mHasCustomClock = true;
        // WHEN the position algorithm is run
        positionClock();
        // THEN the notif padding DOESN'T adjust for keyguard status height.
        assertThat(mClockPosition.stackScrollerPadding).isEqualTo(mPreferredClockY);
    }

    @Test
    public void notifPositionWithLargeClockOnLockScreen() {
        // GIVEN on lock screen and clock has a nonzero height
+15 −0
Original line number Diff line number Diff line
@@ -285,6 +285,7 @@ public class NotificationPanelViewTest extends SysuiTestCase {
        mNotificationContainerParent = new NotificationsQuickSettingsContainer(getContext(), null);
        mNotificationContainerParent.addView(newViewWithId(R.id.qs_frame));
        mNotificationContainerParent.addView(newViewWithId(R.id.notification_stack_scroller));
        mNotificationContainerParent.addView(newViewWithId(R.id.keyguard_status_view));
        when(mView.findViewById(R.id.notification_container_parent))
                .thenReturn(mNotificationContainerParent);
        FlingAnimationUtils.Builder flingAnimationUtilsBuilder = new FlingAnimationUtils.Builder(
@@ -479,6 +480,20 @@ public class NotificationPanelViewTest extends SysuiTestCase {
                .isEqualTo(ConstraintSet.PARENT_ID);
    }

    @Test
    public void testKeyguardStatusView_isAlignedToGuidelineInSplitShadeMode() {
        mNotificationPanelViewController.updateResources();

        assertThat(getConstraintSetLayout(R.id.keyguard_status_view).endToEnd)
                .isEqualTo(ConstraintSet.PARENT_ID);

        enableSplitShade();
        mNotificationPanelViewController.updateResources();

        assertThat(getConstraintSetLayout(R.id.keyguard_status_view).endToEnd)
                .isEqualTo(R.id.qs_edge_guideline);
    }

    @Test
    public void testSplitShadeLayout_isAlignedToGuideline() {
        enableSplitShade();