diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/KeyguardMediaControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/KeyguardMediaControllerTest.kt index 1403b7674d097..0d67d664c0789 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/KeyguardMediaControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/KeyguardMediaControllerTest.kt @@ -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) } -} \ No newline at end of file + + @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) + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java index 71519ce03a422..152ba90858d61 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java @@ -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 diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java index 63086e4d9e94d..4bac7625cfed2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java @@ -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();