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

Commit 6741c5b9 authored by Ibrahim Yilmaz's avatar Ibrahim Yilmaz
Browse files

[HUN] Add missing Heads Up Pinning Tests

This CL adds missing hun pinning tests to cover existing behavior of the system and prevent any possible regressions.

Bug: 341921946
Flag: EXEMPT TEST
Test: Presubmit
Change-Id: I026fdec61cb0e208edd5ef9db883c876e56c4e0b
parent 1aa096a9
Loading
Loading
Loading
Loading
+208 −1
Original line number Diff line number Diff line
@@ -22,11 +22,15 @@ import android.testing.TestableLooper.RunWithLooper
import androidx.test.filters.SmallTest
import com.android.internal.logging.UiEventLogger
import com.android.systemui.dump.DumpManager
import com.android.systemui.kosmos.testScope
import com.android.systemui.log.logcatLogBuffer
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.res.R
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.statusbar.FakeStatusBarStateController
import com.android.systemui.statusbar.NotificationShadeWindowController
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider
import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager
import com.android.systemui.statusbar.notification.shared.NotificationThrottleHun
@@ -34,13 +38,17 @@ import com.android.systemui.statusbar.notification.shared.NotificationsHeadsUpRe
import com.android.systemui.statusbar.phone.ConfigurationControllerImpl
import com.android.systemui.statusbar.phone.HeadsUpManagerPhone
import com.android.systemui.statusbar.phone.KeyguardBypassController
import com.android.systemui.testKosmos
import com.android.systemui.util.concurrency.DelayableExecutor
import com.android.systemui.util.concurrency.mockExecutorHandler
import com.android.systemui.util.kotlin.JavaAdapter
import com.android.systemui.util.settings.GlobalSettings
import com.android.systemui.util.time.SystemClock
import junit.framework.Assert
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Ignore
import org.junit.Test
@@ -51,6 +59,7 @@ import org.mockito.kotlin.whenever
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters

@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@RunWith(ParameterizedAndroidJunit4::class)
@RunWithLooper
@@ -58,6 +67,9 @@ class HeadsUpManagerPhoneTest(flags: FlagsParameterization) : BaseHeadsUpManager

    private val mHeadsUpManagerLogger = HeadsUpManagerLogger(logcatLogBuffer())

    private val kosmos = testKosmos()
    private val testScope = kosmos.testScope

    @Mock private lateinit var mGroupManager: GroupMembershipManager

    @Mock private lateinit var mVSProvider: VisualStabilityProvider
@@ -72,7 +84,7 @@ class HeadsUpManagerPhoneTest(flags: FlagsParameterization) : BaseHeadsUpManager

    @Mock private lateinit var mUiEventLogger: UiEventLogger

    @Mock private lateinit var mJavaAdapter: JavaAdapter
    private val mJavaAdapter: JavaAdapter = JavaAdapter(testScope.backgroundScope)

    @Mock private lateinit var mShadeInteractor: ShadeInteractor

@@ -120,6 +132,11 @@ class HeadsUpManagerPhoneTest(flags: FlagsParameterization) : BaseHeadsUpManager
            mMinimumDisplayTime = TEST_MINIMUM_DISPLAY_TIME
            mAutoDismissTime = TEST_AUTO_DISMISS_TIME
        }

        /** Wrapper for [BaseHeadsUpManager.shouldHeadsUpBecomePinned] for testing */
        fun shouldHeadsUpBecomePinnedWrapper(entry: NotificationEntry): Boolean {
            return shouldHeadsUpBecomePinned(entry)
        }
    }

    private fun createHeadsUpManagerPhone(): HeadsUpManagerPhone {
@@ -219,6 +236,196 @@ class HeadsUpManagerPhoneTest(flags: FlagsParameterization) : BaseHeadsUpManager
        Assert.assertTrue(hmp.isHeadsUpEntry(entry.key))
    }

    @Test
    fun shouldHeadsUpBecomePinned_shadeNotExpanded_true() =
        testScope.runTest {
            // GIVEN
            val statusBarStateController = FakeStatusBarStateController()
            whenever(mShadeInteractor.isAnyFullyExpanded).thenReturn(MutableStateFlow(false))
            val hmp =
                TestableHeadsUpManagerPhone(
                    mContext,
                    mHeadsUpManagerLogger,
                    mGroupManager,
                    mVSProvider,
                    statusBarStateController,
                    mBypassController,
                    mConfigurationController,
                    mGlobalSettings,
                    mSystemClock,
                    mExecutor,
                    mAccessibilityManagerWrapper,
                    mUiEventLogger,
                    mJavaAdapter,
                    mShadeInteractor,
                    mAvalancheController
                )
            val entry = HeadsUpManagerTestUtil.createEntry(/* id= */ 0, mContext)
            statusBarStateController.setState(StatusBarState.SHADE)
            runCurrent()

            // THEN
            Assert.assertTrue(hmp.shouldHeadsUpBecomePinnedWrapper(entry))
        }

    @Test
    fun shouldHeadsUpBecomePinned_shadeLocked_false() =
        testScope.runTest {
            // GIVEN
            val statusBarStateController = FakeStatusBarStateController()
            val hmp =
                TestableHeadsUpManagerPhone(
                    mContext,
                    mHeadsUpManagerLogger,
                    mGroupManager,
                    mVSProvider,
                    statusBarStateController,
                    mBypassController,
                    mConfigurationController,
                    mGlobalSettings,
                    mSystemClock,
                    mExecutor,
                    mAccessibilityManagerWrapper,
                    mUiEventLogger,
                    mJavaAdapter,
                    mShadeInteractor,
                    mAvalancheController
                )
            val entry = HeadsUpManagerTestUtil.createEntry(/* id= */ 0, mContext)
            statusBarStateController.setState(StatusBarState.SHADE_LOCKED)
            runCurrent()

            // THEN
            Assert.assertFalse(hmp.shouldHeadsUpBecomePinnedWrapper(entry))
        }

    @Test
    fun shouldHeadsUpBecomePinned_shadeUnknown_false() =
        testScope.runTest {
            // GIVEN
            val statusBarStateController = FakeStatusBarStateController()
            val hmp =
                TestableHeadsUpManagerPhone(
                    mContext,
                    mHeadsUpManagerLogger,
                    mGroupManager,
                    mVSProvider,
                    statusBarStateController,
                    mBypassController,
                    mConfigurationController,
                    mGlobalSettings,
                    mSystemClock,
                    mExecutor,
                    mAccessibilityManagerWrapper,
                    mUiEventLogger,
                    mJavaAdapter,
                    mShadeInteractor,
                    mAvalancheController
                )
            val entry = HeadsUpManagerTestUtil.createEntry(/* id= */ 0, mContext)
            statusBarStateController.setState(1207)
            runCurrent()

            // THEN
            Assert.assertFalse(hmp.shouldHeadsUpBecomePinnedWrapper(entry))
        }

    @Test
    fun shouldHeadsUpBecomePinned_keyguardWithBypassOn_true() =
        testScope.runTest {
            // GIVEN
            val statusBarStateController = FakeStatusBarStateController()
            whenever(mBypassController.bypassEnabled).thenReturn(true)
            val hmp =
                TestableHeadsUpManagerPhone(
                    mContext,
                    mHeadsUpManagerLogger,
                    mGroupManager,
                    mVSProvider,
                    statusBarStateController,
                    mBypassController,
                    mConfigurationController,
                    mGlobalSettings,
                    mSystemClock,
                    mExecutor,
                    mAccessibilityManagerWrapper,
                    mUiEventLogger,
                    mJavaAdapter,
                    mShadeInteractor,
                    mAvalancheController
                )
            val entry = HeadsUpManagerTestUtil.createEntry(/* id= */ 0, mContext)
            statusBarStateController.setState(StatusBarState.KEYGUARD)
            runCurrent()

            // THEN
            Assert.assertTrue(hmp.shouldHeadsUpBecomePinnedWrapper(entry))
        }

    @Test
    fun shouldHeadsUpBecomePinned_keyguardWithBypassOff_false() =
        testScope.runTest {
            // GIVEN
            val statusBarStateController = FakeStatusBarStateController()
            whenever(mBypassController.bypassEnabled).thenReturn(false)
            val hmp =
                TestableHeadsUpManagerPhone(
                    mContext,
                    mHeadsUpManagerLogger,
                    mGroupManager,
                    mVSProvider,
                    statusBarStateController,
                    mBypassController,
                    mConfigurationController,
                    mGlobalSettings,
                    mSystemClock,
                    mExecutor,
                    mAccessibilityManagerWrapper,
                    mUiEventLogger,
                    mJavaAdapter,
                    mShadeInteractor,
                    mAvalancheController
                )
            val entry = HeadsUpManagerTestUtil.createEntry(/* id= */ 0, mContext)
            statusBarStateController.setState(StatusBarState.KEYGUARD)
            runCurrent()

            // THEN
            Assert.assertFalse(hmp.shouldHeadsUpBecomePinnedWrapper(entry))
        }

    @Test
    fun shouldHeadsUpBecomePinned_shadeExpanded_false() =
        testScope.runTest {
            // GIVEN
            val statusBarStateController = FakeStatusBarStateController()
            whenever(mShadeInteractor.isAnyExpanded).thenReturn(MutableStateFlow(true))
            val hmp =
                TestableHeadsUpManagerPhone(
                    mContext,
                    mHeadsUpManagerLogger,
                    mGroupManager,
                    mVSProvider,
                    statusBarStateController,
                    mBypassController,
                    mConfigurationController,
                    mGlobalSettings,
                    mSystemClock,
                    mExecutor,
                    mAccessibilityManagerWrapper,
                    mUiEventLogger,
                    mJavaAdapter,
                    mShadeInteractor,
                    mAvalancheController
                )
            val entry = HeadsUpManagerTestUtil.createEntry(/* id= */ 0, mContext)
            statusBarStateController.setState(StatusBarState.SHADE)
            runCurrent()

            // THEN
            Assert.assertFalse(hmp.shouldHeadsUpBecomePinnedWrapper(entry))
        }

    companion object {
        @get:Parameters(name = "{0}")
        val flags: List<FlagsParameterization>