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

Commit d775bc58 authored by Chris Göllner's avatar Chris Göllner
Browse files

Fix tests related LargeScreenHeader height for when refactor flag is ON

Bug: 317199366
Test: Unit tests in this CL
Flag: ACONFIG com.android.systemui.centralized_status_bar_dimens_refactor DEVELOPMENT
Change-Id: I56f4754f092293d7aa2711a7ddecfe57ff25f5de
parent 2d8b0d1e
Loading
Loading
Loading
Loading
+64 −8
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import androidx.annotation.IdRes
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet
import androidx.test.filters.SmallTest
import com.android.systemui.Flags.FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR
import com.android.systemui.SysuiTestCase
import com.android.systemui.flags.FakeFeatureFlags
import com.android.systemui.flags.Flags
@@ -167,10 +168,38 @@ class NotificationsQSContainerControllerLegacyTest : SysuiTestCase() {
    }

    @Test
    fun testLargeScreen_updateResources_splitShadeHeightIsSet() {
    fun testLargeScreen_updateResources_refactorFlagOff_splitShadeHeightIsSetBasedOnResource() {
        val headerResourceHeight = 20
        val headerHelperHeight = 30
        mSetFlagsRule.disableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR)
        whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight())
            .thenReturn(headerHelperHeight)
        overrideResource(R.bool.config_use_large_screen_shade_header, true)
        overrideResource(R.dimen.qs_header_height, 10)
        overrideResource(R.dimen.large_screen_shade_header_height, 20)
        overrideResource(R.dimen.large_screen_shade_header_height, headerResourceHeight)

        // ensure the estimated height (would be 3 here) wouldn't impact this test case
        overrideResource(R.dimen.large_screen_shade_header_min_height, 1)
        overrideResource(R.dimen.new_qs_header_non_clickable_element_height, 1)

        underTest.updateResources()

        val captor = ArgumentCaptor.forClass(ConstraintSet::class.java)
        verify(view).applyConstraints(capture(captor))
        assertThat(captor.value.getHeight(R.id.split_shade_status_bar))
            .isEqualTo(headerResourceHeight)
    }

    @Test
    fun testLargeScreen_updateResources_refactorFlagOn_splitShadeHeightIsSetBasedOnHelper() {
        val headerResourceHeight = 20
        val headerHelperHeight = 30
        mSetFlagsRule.enableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR)
        whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight())
            .thenReturn(headerHelperHeight)
        overrideResource(R.bool.config_use_large_screen_shade_header, true)
        overrideResource(R.dimen.qs_header_height, 10)
        overrideResource(R.dimen.large_screen_shade_header_height, headerResourceHeight)

        // ensure the estimated height (would be 3 here) wouldn't impact this test case
        overrideResource(R.dimen.large_screen_shade_header_min_height, 1)
@@ -180,7 +209,8 @@ class NotificationsQSContainerControllerLegacyTest : SysuiTestCase() {

        val captor = ArgumentCaptor.forClass(ConstraintSet::class.java)
        verify(view).applyConstraints(capture(captor))
        assertThat(captor.value.getHeight(R.id.split_shade_status_bar)).isEqualTo(20)
        assertThat(captor.value.getHeight(R.id.split_shade_status_bar))
            .isEqualTo(headerHelperHeight)
    }

    @Test
@@ -416,10 +446,36 @@ class NotificationsQSContainerControllerLegacyTest : SysuiTestCase() {
    }

    @Test
    fun testLargeScreenLayout_qsAndNotifsTopMarginIsOfHeaderHeight() {
    fun testLargeScreenLayout_refactorFlagOff_qsAndNotifsTopMarginIsOfHeaderHeightResource() {
        mSetFlagsRule.disableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR)
        setLargeScreen()
        val largeScreenHeaderResourceHeight = 100
        val largeScreenHeaderHelperHeight = 200
        whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight())
            .thenReturn(largeScreenHeaderHelperHeight)
        overrideResource(R.dimen.large_screen_shade_header_height, largeScreenHeaderResourceHeight)

        // ensure the estimated height (would be 30 here) wouldn't impact this test case
        overrideResource(R.dimen.large_screen_shade_header_min_height, 10)
        overrideResource(R.dimen.new_qs_header_non_clickable_element_height, 10)

        underTest.updateResources()

        assertThat(getConstraintSetLayout(R.id.qs_frame).topMargin)
            .isEqualTo(largeScreenHeaderResourceHeight)
        assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).topMargin)
            .isEqualTo(largeScreenHeaderResourceHeight)
    }

    @Test
    fun testLargeScreenLayout_refactorFlagOn_qsAndNotifsTopMarginIsOfHeaderHeightHelper() {
        mSetFlagsRule.enableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR)
        setLargeScreen()
        val largeScreenHeaderHeight = 100
        overrideResource(R.dimen.large_screen_shade_header_height, largeScreenHeaderHeight)
        val largeScreenHeaderResourceHeight = 100
        val largeScreenHeaderHelperHeight = 200
        whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight())
            .thenReturn(largeScreenHeaderHelperHeight)
        overrideResource(R.dimen.large_screen_shade_header_height, largeScreenHeaderResourceHeight)

        // ensure the estimated height (would be 30 here) wouldn't impact this test case
        overrideResource(R.dimen.large_screen_shade_header_min_height, 10)
@@ -428,9 +484,9 @@ class NotificationsQSContainerControllerLegacyTest : SysuiTestCase() {
        underTest.updateResources()

        assertThat(getConstraintSetLayout(R.id.qs_frame).topMargin)
            .isEqualTo(largeScreenHeaderHeight)
            .isEqualTo(largeScreenHeaderHelperHeight)
        assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).topMargin)
            .isEqualTo(largeScreenHeaderHeight)
            .isEqualTo(largeScreenHeaderHelperHeight)
    }

    @Test
+57 −7
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import androidx.annotation.IdRes
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet
import androidx.test.filters.SmallTest
import com.android.systemui.Flags.FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR
import com.android.systemui.SysuiTestCase
import com.android.systemui.flags.FakeFeatureFlags
import com.android.systemui.flags.Flags
@@ -166,10 +167,14 @@ class NotificationsQSContainerControllerTest : SysuiTestCase() {
    }

    @Test
    fun testLargeScreen_updateResources_splitShadeHeightIsSet() {
    fun testLargeScreen_updateResources_refactorFlagOff_splitShadeHeightIsSet_basedOnResource() {
        mSetFlagsRule.disableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR)
        val helperHeight = 30
        val resourceHeight = 20
        whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()).thenReturn(helperHeight)
        overrideResource(R.bool.config_use_large_screen_shade_header, true)
        overrideResource(R.dimen.qs_header_height, 10)
        overrideResource(R.dimen.large_screen_shade_header_height, 20)
        overrideResource(R.dimen.large_screen_shade_header_height, resourceHeight)

        // ensure the estimated height (would be 3 here) wouldn't impact this test case
        overrideResource(R.dimen.large_screen_shade_header_min_height, 1)
@@ -179,7 +184,28 @@ class NotificationsQSContainerControllerTest : SysuiTestCase() {

        val captor = ArgumentCaptor.forClass(ConstraintSet::class.java)
        verify(view).applyConstraints(capture(captor))
        assertThat(captor.value.getHeight(R.id.split_shade_status_bar)).isEqualTo(20)
        assertThat(captor.value.getHeight(R.id.split_shade_status_bar)).isEqualTo(resourceHeight)
    }

    @Test
    fun testLargeScreen_updateResources_refactorFlagOn_splitShadeHeightIsSet_basedOnHelper() {
        mSetFlagsRule.enableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR)
        val helperHeight = 30
        val resourceHeight = 20
        whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()).thenReturn(helperHeight)
        overrideResource(R.bool.config_use_large_screen_shade_header, true)
        overrideResource(R.dimen.qs_header_height, 10)
        overrideResource(R.dimen.large_screen_shade_header_height, resourceHeight)

        // ensure the estimated height (would be 3 here) wouldn't impact this test case
        overrideResource(R.dimen.large_screen_shade_header_min_height, 1)
        overrideResource(R.dimen.new_qs_header_non_clickable_element_height, 1)

        underTest.updateResources()

        val captor = ArgumentCaptor.forClass(ConstraintSet::class.java)
        verify(view).applyConstraints(capture(captor))
        assertThat(captor.value.getHeight(R.id.split_shade_status_bar)).isEqualTo(helperHeight)
    }

    @Test
@@ -404,10 +430,34 @@ class NotificationsQSContainerControllerTest : SysuiTestCase() {
    }

    @Test
    fun testLargeScreenLayout_qsAndNotifsTopMarginIsOfHeaderHeight() {
    fun testLargeScreenLayout_refactorFlagOff_qsAndNotifsTopMarginIsOfHeaderResourceHeight() {
        mSetFlagsRule.disableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR)
        setLargeScreen()
        val largeScreenHeaderHelperHeight = 200
        val largeScreenHeaderResourceHeight = 100
        whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight())
            .thenReturn(largeScreenHeaderHelperHeight)
        overrideResource(R.dimen.large_screen_shade_header_height, largeScreenHeaderResourceHeight)

        // ensure the estimated height (would be 30 here) wouldn't impact this test case
        overrideResource(R.dimen.large_screen_shade_header_min_height, 10)
        overrideResource(R.dimen.new_qs_header_non_clickable_element_height, 10)

        underTest.updateResources()

        assertThat(getConstraintSetLayout(R.id.qs_frame).topMargin)
            .isEqualTo(largeScreenHeaderResourceHeight)
    }

    @Test
    fun testLargeScreenLayout_refactorFlagOn_qsAndNotifsTopMarginIsOfHeaderHelperHeight() {
        mSetFlagsRule.enableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR)
        setLargeScreen()
        val largeScreenHeaderHeight = 100
        overrideResource(R.dimen.large_screen_shade_header_height, largeScreenHeaderHeight)
        val largeScreenHeaderHelperHeight = 200
        val largeScreenHeaderResourceHeight = 100
        whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight())
            .thenReturn(largeScreenHeaderHelperHeight)
        overrideResource(R.dimen.large_screen_shade_header_height, largeScreenHeaderResourceHeight)

        // ensure the estimated height (would be 30 here) wouldn't impact this test case
        overrideResource(R.dimen.large_screen_shade_header_min_height, 10)
@@ -416,7 +466,7 @@ class NotificationsQSContainerControllerTest : SysuiTestCase() {
        underTest.updateResources()

        assertThat(getConstraintSetLayout(R.id.qs_frame).topMargin)
            .isEqualTo(largeScreenHeaderHeight)
            .isEqualTo(largeScreenHeaderHelperHeight)
    }

    @Test
+81 −5
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ package com.android.systemui.statusbar.notification.stack.ui.viewmodel

import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.Flags.FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR
import com.android.systemui.SysuiTestCase
import com.android.systemui.common.shared.model.NotificationContainerBounds
import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository
@@ -39,8 +40,11 @@ import com.android.systemui.keyguard.ui.viewmodel.keyguardRootViewModel
import com.android.systemui.kosmos.testScope
import com.android.systemui.res.R
import com.android.systemui.shade.data.repository.shadeRepository
import com.android.systemui.shade.largeScreenHeaderHelper
import com.android.systemui.shade.mockLargeScreenHeaderHelper
import com.android.systemui.statusbar.notification.stack.domain.interactor.sharedNotificationContainerInteractor
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
@@ -66,6 +70,7 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
    val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository
    val shadeRepository = kosmos.shadeRepository
    val sharedNotificationContainerInteractor = kosmos.sharedNotificationContainerInteractor
    val largeScreenHeaderHelper = kosmos.mockLargeScreenHeaderHelper

    val underTest = kosmos.sharedNotificationContainerViewModel

@@ -101,8 +106,10 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
        }

    @Test
    fun validatePaddingTopInSplitShade() =
    fun validatePaddingTopInSplitShade_refactorFlagOff_usesLargeHeaderResource() =
        testScope.runTest {
            mSetFlagsRule.disableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR)
            whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()).thenReturn(5)
            overrideResource(R.bool.config_use_split_notification_shade, true)
            overrideResource(R.dimen.large_screen_shade_header_height, 10)
            overrideResource(R.dimen.keyguard_split_shade_top_margin, 50)
@@ -114,6 +121,22 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
            assertThat(dimens!!.paddingTop).isEqualTo(30)
        }

    @Test
    fun validatePaddingTopInSplitShade_refactorFlagOn_usesLargeHeaderHelper() =
        testScope.runTest {
            mSetFlagsRule.enableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR)
            whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()).thenReturn(5)
            overrideResource(R.bool.config_use_split_notification_shade, true)
            overrideResource(R.dimen.large_screen_shade_header_height, 10)
            overrideResource(R.dimen.keyguard_split_shade_top_margin, 50)

            val dimens by collectLastValue(underTest.configurationBasedDimensions)

            configurationRepository.onAnyConfigurationChange()

            assertThat(dimens!!.paddingTop).isEqualTo(40)
        }

    @Test
    fun validatePaddingTop() =
        testScope.runTest {
@@ -153,17 +176,41 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
        }

    @Test
    fun validateMarginTopWithLargeScreenHeader() =
    fun validateMarginTopWithLargeScreenHeader_refactorFlagOff_usesResource() =
        testScope.runTest {
            mSetFlagsRule.disableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR)
            val headerResourceHeight = 50
            val headerHelperHeight = 100
            whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight())
                .thenReturn(headerHelperHeight)
            overrideResource(R.bool.config_use_large_screen_shade_header, true)
            overrideResource(R.dimen.large_screen_shade_header_height, 50)
            overrideResource(R.dimen.large_screen_shade_header_height, headerResourceHeight)
            overrideResource(R.dimen.notification_panel_margin_top, 0)

            val dimens by collectLastValue(underTest.configurationBasedDimensions)

            configurationRepository.onAnyConfigurationChange()

            assertThat(dimens!!.marginTop).isEqualTo(headerResourceHeight)
        }

    @Test
    fun validateMarginTopWithLargeScreenHeader_refactorFlagOn_usesHelper() =
        testScope.runTest {
            mSetFlagsRule.enableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR)
            val headerResourceHeight = 50
            val headerHelperHeight = 100
            whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight())
                .thenReturn(headerHelperHeight)
            overrideResource(R.bool.config_use_large_screen_shade_header, true)
            overrideResource(R.dimen.large_screen_shade_header_height, headerResourceHeight)
            overrideResource(R.dimen.notification_panel_margin_top, 0)

            val dimens by collectLastValue(underTest.configurationBasedDimensions)

            configurationRepository.onAnyConfigurationChange()

            assertThat(dimens!!.marginTop).isEqualTo(50)
            assertThat(dimens!!.marginTop).isEqualTo(headerHelperHeight)
        }

    @Test
@@ -275,11 +322,13 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
        }

    @Test
    fun boundsOnLockscreenInSplitShade() =
    fun boundsOnLockscreenInSplitShade_refactorFlagOff_usesLargeHeaderResource() =
        testScope.runTest {
            mSetFlagsRule.disableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR)
            val bounds by collectLastValue(underTest.bounds)

            // When in split shade
            whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()).thenReturn(5)
            overrideResource(R.bool.config_use_split_notification_shade, true)
            overrideResource(R.dimen.large_screen_shade_header_height, 10)
            overrideResource(R.dimen.keyguard_split_shade_top_margin, 50)
@@ -299,6 +348,33 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
            assertThat(bounds).isEqualTo(NotificationContainerBounds(top = 31f, bottom = 2f))
        }

    @Test
    fun boundsOnLockscreenInSplitShade_refactorFlagOn_usesLargeHeaderHelper() =
        testScope.runTest {
            mSetFlagsRule.enableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR)
            val bounds by collectLastValue(underTest.bounds)

            // When in split shade
            whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()).thenReturn(5)
            overrideResource(R.bool.config_use_split_notification_shade, true)
            overrideResource(R.dimen.large_screen_shade_header_height, 10)
            overrideResource(R.dimen.keyguard_split_shade_top_margin, 50)

            configurationRepository.onAnyConfigurationChange()
            runCurrent()

            // Start on lockscreen
            showLockscreen()

            keyguardInteractor.setNotificationContainerBounds(
                NotificationContainerBounds(top = 1f, bottom = 2f)
            )
            runCurrent()

            // Top should be equal to bounds (1) + padding adjustment (40)
            assertThat(bounds).isEqualTo(NotificationContainerBounds(top = 41f, bottom = 2f))
        }

    @Test
    fun boundsOnShade() =
        testScope.runTest {
+34 −5
Original line number Diff line number Diff line
@@ -30,11 +30,13 @@ import android.testing.AndroidTestingRunner;

import androidx.test.filters.SmallTest;

import com.android.systemui.Flags;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.doze.util.BurnInHelperKt;
import com.android.systemui.log.LogBuffer;
import com.android.systemui.log.core.FakeLogBuffer;
import com.android.systemui.res.R;
import com.android.systemui.shade.LargeScreenHeaderHelper;

import org.junit.After;
import org.junit.Before;
@@ -79,6 +81,7 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase {
        MockitoAnnotations.initMocks(this);
        mStaticMockSession = mockitoSession()
                .mockStatic(BurnInHelperKt.class)
                .mockStatic(LargeScreenHeaderHelper.class)
                .startMocking();

        LogBuffer logBuffer = FakeLogBuffer.Factory.Companion.create();
@@ -292,18 +295,44 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase {
    }

    @Test
    public void notifPaddingMakesUpToFullMarginInSplitShade() {
    public void notifPaddingMakesUpToFullMarginInSplitShade_refactorFlagOff_usesResource() {
        mSetFlagsRule.disableFlags(Flags.FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR);
        int keyguardSplitShadeTopMargin = 100;
        int largeScreenHeaderHeightResource = 70;
        when(mResources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin))
                .thenReturn(100);
                .thenReturn(keyguardSplitShadeTopMargin);
        when(mResources.getDimensionPixelSize(R.dimen.large_screen_shade_header_height))
                .thenReturn(70);
                .thenReturn(largeScreenHeaderHeightResource);
        mClockPositionAlgorithm.loadDimens(mContext, mResources);
        givenLockScreen();
        mIsSplitShade = true;
        // WHEN the position algorithm is run
        positionClock();
        // THEN the notif padding makes up lacking margin (margin - header height = 30).
        assertThat(mClockPosition.stackScrollerPadding).isEqualTo(30);
        // THEN the notif padding makes up lacking margin (margin - header height).
        int expectedPadding = keyguardSplitShadeTopMargin - largeScreenHeaderHeightResource;
        assertThat(mClockPosition.stackScrollerPadding).isEqualTo(expectedPadding);
    }

    @Test
    public void notifPaddingMakesUpToFullMarginInSplitShade_refactorFlagOn_usesHelper() {
        mSetFlagsRule.enableFlags(Flags.FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR);
        int keyguardSplitShadeTopMargin = 100;
        int largeScreenHeaderHeightHelper = 50;
        int largeScreenHeaderHeightResource = 70;
        when(LargeScreenHeaderHelper.getLargeScreenHeaderHeight(mContext))
                .thenReturn(largeScreenHeaderHeightHelper);
        when(mResources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin))
                .thenReturn(keyguardSplitShadeTopMargin);
        when(mResources.getDimensionPixelSize(R.dimen.large_screen_shade_header_height))
                .thenReturn(largeScreenHeaderHeightResource);
        mClockPositionAlgorithm.loadDimens(mContext, mResources);
        givenLockScreen();
        mIsSplitShade = true;
        // WHEN the position algorithm is run
        positionClock();
        // THEN the notif padding makes up lacking margin (margin - header height).
        int expectedPadding = keyguardSplitShadeTopMargin - largeScreenHeaderHeightHelper;
        assertThat(mClockPosition.stackScrollerPadding).isEqualTo(expectedPadding);
    }

    @Test