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

Bug: 181882240
Test: atest KeyguardMediaControllerTest KeyguardClockPositionAlgorithmTest NotificationPanelViewTest
Change-Id: Id51293dbd134ea45ed0084a89f2da48136599168
This commit is contained in:
Michal Brzezinski
2021-04-23 11:48:45 +00:00
committed by Michał Brzeziński
parent 4e0bac8243
commit 89bd618dcb
3 changed files with 91 additions and 28 deletions

View File

@@ -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)
}
@Test
fun testAttach_hiddenWhenHostIsHidden() {
`when`(mediaHost.visible).thenReturn(false)
keyguardMediaController.attachSinglePaneContainer(mediaHeaderView)
verify(mediaHeaderView, atLeastOnce()).visibility = eq(GONE)
}
@Test
fun testAttach_visibleOnKeyguard() {
`when`(mediaHost.visible).thenReturn(true)
`when`(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD)
`when`(notificationLockscreenUserManager.shouldShowLockscreenNotifications())
.thenReturn(true)
fun testHiddenWhenHostIsHidden() {
whenever(mediaHost.visible).thenReturn(false)
keyguardMediaController.attachSinglePaneContainer(mediaHeaderView)
keyguardMediaController.refreshMediaPosition()
verify(mediaHeaderView, atLeastOnce()).visibility = eq(VISIBLE)
assertThat(mediaHeaderView.visibility).isEqualTo(GONE)
}
@Test
fun testAttach_hiddenOnKeyguard_whenNotificationsAreHidden() {
`when`(mediaHost.visible).thenReturn(true)
`when`(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD)
`when`(notificationLockscreenUserManager.shouldShowLockscreenNotifications())
fun testVisibleOnKeyguardOrFullScreenUserSwitcher() {
testStateVisibility(StatusBarState.SHADE, GONE)
testStateVisibility(StatusBarState.SHADE_LOCKED, GONE)
testStateVisibility(StatusBarState.FULLSCREEN_USER_SWITCHER, VISIBLE)
testStateVisibility(StatusBarState.KEYGUARD, VISIBLE)
}
private fun testStateVisibility(state: Int, visibility: Int) {
whenever(statusBarStateController.state).thenReturn(state)
keyguardMediaController.refreshMediaPosition()
assertThat(mediaHeaderView.visibility).isEqualTo(visibility)
}
@Test
fun testHiddenOnKeyguard_whenNotificationsAreHidden() {
whenever(notificationLockscreenUserManager.shouldShowLockscreenNotifications())
.thenReturn(false)
keyguardMediaController.attachSinglePaneContainer(mediaHeaderView)
keyguardMediaController.refreshMediaPosition()
verify(mediaHeaderView, atLeastOnce()).visibility = eq(GONE)
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()
assertThat(splitShadeContainer.visibility).isEqualTo(GONE)
assertThat(mediaHeaderView.visibility).isEqualTo(VISIBLE)
}
}

View File

@@ -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

View File

@@ -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();