diff options
8 files changed, 321 insertions, 210 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/AodToLockscreenTransitionViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/AodToLockscreenTransitionViewModelTest.kt index 31b67b43adc4..f52c66e24907 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/AodToLockscreenTransitionViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/AodToLockscreenTransitionViewModelTest.kt @@ -16,36 +16,57 @@ package com.android.systemui.keyguard.ui.viewmodel -import androidx.test.ext.junit.runners.AndroidJUnit4 +import android.platform.test.flag.junit.FlagsParameterization import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.data.repository.fingerprintPropertyRepository import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectValues +import com.android.systemui.flags.andSceneContainer import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.TransitionStep import com.android.systemui.kosmos.testScope -import com.android.systemui.shade.data.repository.fakeShadeRepository +import com.android.systemui.shade.shadeTestUtil import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest +import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import platform.test.runner.parameterized.ParameterizedAndroidJunit4 +import platform.test.runner.parameterized.Parameters @ExperimentalCoroutinesApi @SmallTest -@RunWith(AndroidJUnit4::class) -class AodToLockscreenTransitionViewModelTest : SysuiTestCase() { +@RunWith(ParameterizedAndroidJunit4::class) +class AodToLockscreenTransitionViewModelTest(flags: FlagsParameterization?) : SysuiTestCase() { val kosmos = testKosmos() val testScope = kosmos.testScope val repository = kosmos.fakeKeyguardTransitionRepository - val shadeRepository = kosmos.fakeShadeRepository + val shadeTestUtil by lazy { kosmos.shadeTestUtil } val fingerprintPropertyRepository = kosmos.fingerprintPropertyRepository - val underTest = kosmos.aodToLockscreenTransitionViewModel + lateinit var underTest: AodToLockscreenTransitionViewModel + + companion object { + @JvmStatic + @Parameters(name = "{0}") + fun getParams(): List<FlagsParameterization> { + return FlagsParameterization.allCombinationsOf().andSceneContainer() + } + } + + init { + mSetFlagsRule.setFlagsParameterization(flags!!) + } + + @Before + fun setup() { + underTest = kosmos.aodToLockscreenTransitionViewModel + } @Test fun deviceEntryParentViewShows() = @@ -65,7 +86,7 @@ class AodToLockscreenTransitionViewModelTest : SysuiTestCase() { testScope.runTest { val alpha by collectLastValue(underTest.notificationAlpha) - shadeRepository.setQsExpansion(0.5f) + shadeTestUtil.setQsExpansion(0.5f) runCurrent() repository.sendTransitionStep(step(0f, TransitionState.STARTED)) @@ -81,7 +102,7 @@ class AodToLockscreenTransitionViewModelTest : SysuiTestCase() { testScope.runTest { val alpha by collectLastValue(underTest.notificationAlpha) - shadeRepository.setQsExpansion(0f) + shadeTestUtil.setQsExpansion(0f) runCurrent() repository.sendTransitionStep(step(0f, TransitionState.STARTED)) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToAodTransitionViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToAodTransitionViewModelTest.kt index bef951554b50..e3ae3ba4cedd 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToAodTransitionViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToAodTransitionViewModelTest.kt @@ -16,13 +16,14 @@ package com.android.systemui.keyguard.ui.viewmodel -import androidx.test.ext.junit.runners.AndroidJUnit4 +import android.platform.test.flag.junit.FlagsParameterization import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.data.repository.fingerprintPropertyRepository import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectValues import com.android.systemui.flags.Flags.FULL_SCREEN_USER_SWITCHER +import com.android.systemui.flags.andSceneContainer import com.android.systemui.flags.fakeFeatureFlagsClassic import com.android.systemui.keyguard.data.repository.biometricSettingsRepository import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository @@ -32,31 +33,53 @@ import com.android.systemui.keyguard.shared.model.StatusBarState import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.TransitionStep import com.android.systemui.kosmos.testScope -import com.android.systemui.shade.data.repository.shadeRepository +import com.android.systemui.shade.shadeTestUtil import com.android.systemui.testKosmos import com.google.common.collect.Range import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest +import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import platform.test.runner.parameterized.ParameterizedAndroidJunit4 +import platform.test.runner.parameterized.Parameters @ExperimentalCoroutinesApi @SmallTest -@RunWith(AndroidJUnit4::class) -class LockscreenToAodTransitionViewModelTest : SysuiTestCase() { +@RunWith(ParameterizedAndroidJunit4::class) +class LockscreenToAodTransitionViewModelTest(flags: FlagsParameterization?) : SysuiTestCase() { private val kosmos = testKosmos().apply { fakeFeatureFlagsClassic.apply { set(FULL_SCREEN_USER_SWITCHER, false) } } private val testScope = kosmos.testScope private val repository = kosmos.fakeKeyguardTransitionRepository - private val shadeRepository = kosmos.shadeRepository private val keyguardRepository = kosmos.fakeKeyguardRepository private val fingerprintPropertyRepository = kosmos.fingerprintPropertyRepository private val biometricSettingsRepository = kosmos.biometricSettingsRepository - private val underTest = kosmos.lockscreenToAodTransitionViewModel + + private val shadeTestUtil by lazy { kosmos.shadeTestUtil } + + lateinit var underTest: LockscreenToAodTransitionViewModel + + companion object { + @JvmStatic + @Parameters(name = "{0}") + fun getParams(): List<FlagsParameterization> { + return FlagsParameterization.allCombinationsOf().andSceneContainer() + } + } + + init { + mSetFlagsRule.setFlagsParameterization(flags!!) + } + + @Before + fun setup() { + underTest = kosmos.lockscreenToAodTransitionViewModel + } @Test fun backgroundViewAlpha_shadeNotExpanded() = @@ -195,11 +218,11 @@ class LockscreenToAodTransitionViewModelTest : SysuiTestCase() { private fun shadeExpanded(expanded: Boolean) { if (expanded) { - shadeRepository.setQsExpansion(1f) + shadeTestUtil.setQsExpansion(1f) } else { keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD) - shadeRepository.setQsExpansion(0f) - shadeRepository.setLockscreenShadeExpansion(0f) + shadeTestUtil.setQsExpansion(0f) + shadeTestUtil.setLockscreenShadeExpansion(0f) } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToDreamingTransitionViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToDreamingTransitionViewModelTest.kt index 8f04ec3814eb..adeb395fc142 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToDreamingTransitionViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToDreamingTransitionViewModelTest.kt @@ -18,24 +18,25 @@ package com.android.systemui.keyguard.ui.viewmodel -import androidx.test.ext.junit.runners.AndroidJUnit4 +import android.platform.test.flag.junit.FlagsParameterization import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectValues import com.android.systemui.flags.Flags +import com.android.systemui.flags.andSceneContainer import com.android.systemui.flags.fakeFeatureFlagsClassic -import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository -import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository +import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository +import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.StatusBarState import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.TransitionStep import com.android.systemui.kosmos.testScope -import com.android.systemui.shade.data.repository.shadeRepository -import com.android.systemui.shade.data.repository.ShadeRepository +import com.android.systemui.shade.ShadeTestUtil +import com.android.systemui.shade.shadeTestUtil import com.android.systemui.testKosmos import com.google.common.collect.Range import com.google.common.truth.Truth.assertThat @@ -45,10 +46,12 @@ import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import platform.test.runner.parameterized.ParameterizedAndroidJunit4 +import platform.test.runner.parameterized.Parameters @SmallTest -@RunWith(AndroidJUnit4::class) -class LockscreenToDreamingTransitionViewModelTest : SysuiTestCase() { +@RunWith(ParameterizedAndroidJunit4::class) +class LockscreenToDreamingTransitionViewModelTest(flags: FlagsParameterization?) : SysuiTestCase() { private val kosmos = testKosmos().apply { @@ -56,14 +59,27 @@ class LockscreenToDreamingTransitionViewModelTest : SysuiTestCase() { } private val testScope = kosmos.testScope private lateinit var repository: FakeKeyguardTransitionRepository - private lateinit var shadeRepository: ShadeRepository + private lateinit var shadeTestUtil: ShadeTestUtil private lateinit var keyguardRepository: FakeKeyguardRepository private lateinit var underTest: LockscreenToDreamingTransitionViewModel + // add to init block + companion object { + @JvmStatic + @Parameters(name = "{0}") + fun getParams(): List<FlagsParameterization> { + return FlagsParameterization.allCombinationsOf().andSceneContainer() + } + } + + init { + mSetFlagsRule.setFlagsParameterization(flags!!) + } + @Before fun setUp() { repository = kosmos.fakeKeyguardTransitionRepository - shadeRepository = kosmos.shadeRepository + shadeTestUtil = kosmos.shadeTestUtil keyguardRepository = kosmos.fakeKeyguardRepository underTest = kosmos.lockscreenToDreamingTransitionViewModel } @@ -177,11 +193,11 @@ class LockscreenToDreamingTransitionViewModelTest : SysuiTestCase() { private fun shadeExpanded(expanded: Boolean) { if (expanded) { - shadeRepository.setQsExpansion(1f) + shadeTestUtil.setQsExpansion(1f) } else { keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD) - shadeRepository.setQsExpansion(0f) - shadeRepository.setLockscreenShadeExpansion(0f) + shadeTestUtil.setQsExpansion(0f) + shadeTestUtil.setLockscreenShadeExpansion(0f) } } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToOccludedTransitionViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToOccludedTransitionViewModelTest.kt index b120f8776d9d..f8da74fdd742 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToOccludedTransitionViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToOccludedTransitionViewModelTest.kt @@ -18,27 +18,28 @@ package com.android.systemui.keyguard.ui.viewmodel -import androidx.test.ext.junit.runners.AndroidJUnit4 +import android.platform.test.flag.junit.FlagsParameterization import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase -import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository +import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectValues import com.android.systemui.flags.Flags +import com.android.systemui.flags.andSceneContainer import com.android.systemui.flags.fakeFeatureFlagsClassic -import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository -import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository +import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository +import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.StatusBarState import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.TransitionStep 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.data.repository.ShadeRepository +import com.android.systemui.shade.ShadeTestUtil +import com.android.systemui.shade.shadeTestUtil import com.android.systemui.testKosmos import com.google.common.collect.Range import com.google.common.truth.Truth.assertThat @@ -48,25 +49,40 @@ import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import platform.test.runner.parameterized.ParameterizedAndroidJunit4 +import platform.test.runner.parameterized.Parameters @SmallTest -@RunWith(AndroidJUnit4::class) -class LockscreenToOccludedTransitionViewModelTest : SysuiTestCase() { +@RunWith(ParameterizedAndroidJunit4::class) +class LockscreenToOccludedTransitionViewModelTest(flags: FlagsParameterization?) : SysuiTestCase() { private val kosmos = testKosmos().apply { fakeFeatureFlagsClassic.apply { set(Flags.FULL_SCREEN_USER_SWITCHER, false) } } private val testScope = kosmos.testScope private lateinit var repository: FakeKeyguardTransitionRepository - private lateinit var shadeRepository: ShadeRepository + private lateinit var shadeTestUtil: ShadeTestUtil private lateinit var keyguardRepository: FakeKeyguardRepository private lateinit var configurationRepository: FakeConfigurationRepository private lateinit var underTest: LockscreenToOccludedTransitionViewModel + // add to init block + companion object { + @JvmStatic + @Parameters(name = "{0}") + fun getParams(): List<FlagsParameterization> { + return FlagsParameterization.allCombinationsOf().andSceneContainer() + } + } + + init { + mSetFlagsRule.setFlagsParameterization(flags!!) + } + @Before fun setUp() { repository = kosmos.fakeKeyguardTransitionRepository - shadeRepository = kosmos.shadeRepository + shadeTestUtil = kosmos.shadeTestUtil keyguardRepository = kosmos.fakeKeyguardRepository configurationRepository = kosmos.fakeConfigurationRepository underTest = kosmos.lockscreenToOccludedTransitionViewModel @@ -200,11 +216,11 @@ class LockscreenToOccludedTransitionViewModelTest : SysuiTestCase() { private fun shadeExpanded(expanded: Boolean) { if (expanded) { - shadeRepository.setQsExpansion(1f) + shadeTestUtil.setQsExpansion(1f) } else { keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD) - shadeRepository.setQsExpansion(0f) - shadeRepository.setLockscreenShadeExpansion(0f) + shadeTestUtil.setQsExpansion(0f) + shadeTestUtil.setLockscreenShadeExpansion(0f) } } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToPrimaryBouncerTransitionViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToPrimaryBouncerTransitionViewModelTest.kt index 43ab93a18118..d5df159d6d1e 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToPrimaryBouncerTransitionViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToPrimaryBouncerTransitionViewModelTest.kt @@ -16,11 +16,12 @@ package com.android.systemui.keyguard.ui.viewmodel -import androidx.test.ext.junit.runners.AndroidJUnit4 +import android.platform.test.flag.junit.FlagsParameterization import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.Flags +import com.android.systemui.flags.andSceneContainer import com.android.systemui.flags.fakeFeatureFlagsClassic import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository @@ -29,29 +30,50 @@ import com.android.systemui.keyguard.shared.model.StatusBarState import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.TransitionStep import com.android.systemui.kosmos.testScope -import com.android.systemui.shade.data.repository.shadeRepository +import com.android.systemui.shade.shadeTestUtil import com.android.systemui.testKosmos import com.google.common.collect.Range import com.google.common.truth.Truth import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest +import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import platform.test.runner.parameterized.ParameterizedAndroidJunit4 +import platform.test.runner.parameterized.Parameters @ExperimentalCoroutinesApi @SmallTest -@RunWith(AndroidJUnit4::class) -class LockscreenToPrimaryBouncerTransitionViewModelTest : SysuiTestCase() { +@RunWith(ParameterizedAndroidJunit4::class) +class LockscreenToPrimaryBouncerTransitionViewModelTest(flags: FlagsParameterization?) : + SysuiTestCase() { private val kosmos = testKosmos().apply { fakeFeatureFlagsClassic.apply { set(Flags.FULL_SCREEN_USER_SWITCHER, false) } } private val testScope = kosmos.testScope private val repository = kosmos.fakeKeyguardTransitionRepository - private val shadeRepository = kosmos.shadeRepository + private val shadeTestUtil by lazy { kosmos.shadeTestUtil } private val keyguardRepository = kosmos.fakeKeyguardRepository - private val underTest = kosmos.lockscreenToPrimaryBouncerTransitionViewModel + private lateinit var underTest: LockscreenToPrimaryBouncerTransitionViewModel + + companion object { + @JvmStatic + @Parameters(name = "{0}") + fun getParams(): List<FlagsParameterization> { + return FlagsParameterization.allCombinationsOf().andSceneContainer() + } + } + + init { + mSetFlagsRule.setFlagsParameterization(flags!!) + } + + @Before + fun setup() { + underTest = kosmos.lockscreenToPrimaryBouncerTransitionViewModel + } @Test fun deviceEntryParentViewAlpha_shadeExpanded() = @@ -119,11 +141,11 @@ class LockscreenToPrimaryBouncerTransitionViewModelTest : SysuiTestCase() { private fun shadeExpanded(expanded: Boolean) { if (expanded) { - shadeRepository.setQsExpansion(1f) + shadeTestUtil.setQsExpansion(1f) } else { keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD) - shadeRepository.setQsExpansion(0f) - shadeRepository.setLockscreenShadeExpansion(0f) + shadeTestUtil.setQsExpansion(0f) + shadeTestUtil.setLockscreenShadeExpansion(0f) } } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/icon/ui/viewmodel/NotificationIconContainerStatusBarViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/icon/ui/viewmodel/NotificationIconContainerStatusBarViewModelTest.kt index 78b76151e7e6..cbbc4d897048 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/icon/ui/viewmodel/NotificationIconContainerStatusBarViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/icon/ui/viewmodel/NotificationIconContainerStatusBarViewModelTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 The Android Open Source Project + * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,116 +18,92 @@ package com.android.systemui.statusbar.notification.icon.ui.viewmodel import android.graphics.Rect import android.graphics.drawable.Icon -import androidx.test.ext.junit.runners.AndroidJUnit4 +import android.platform.test.flag.junit.FlagsParameterization import androidx.test.filters.SmallTest -import com.android.systemui.SysUITestComponent -import com.android.systemui.SysUITestModule import com.android.systemui.SysuiTestCase -import com.android.systemui.TestMocksModule -import com.android.systemui.biometrics.domain.BiometricsDomainLayerModule -import com.android.systemui.collectLastValue -import com.android.systemui.dagger.SysUISingleton -import com.android.systemui.flags.FakeFeatureFlagsClassicModule -import com.android.systemui.flags.Flags -import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository -import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository +import com.android.systemui.coroutines.collectLastValue +import com.android.systemui.flags.andSceneContainer +import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository +import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.DozeStateModel import com.android.systemui.keyguard.shared.model.DozeTransitionModel import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.TransitionStep +import com.android.systemui.kosmos.testScope import com.android.systemui.plugins.DarkIconDispatcher -import com.android.systemui.power.data.repository.FakePowerRepository +import com.android.systemui.power.data.repository.fakePowerRepository import com.android.systemui.power.shared.model.WakeSleepReason import com.android.systemui.power.shared.model.WakefulnessState -import com.android.systemui.runCurrent -import com.android.systemui.runTest -import com.android.systemui.shade.data.repository.FakeShadeRepository +import com.android.systemui.shade.shadeTestUtil import com.android.systemui.statusbar.notification.data.model.activeNotificationModel -import com.android.systemui.statusbar.notification.data.repository.ActiveNotificationListRepository import com.android.systemui.statusbar.notification.data.repository.ActiveNotificationsStore -import com.android.systemui.statusbar.notification.data.repository.HeadsUpNotificationIconViewStateRepository -import com.android.systemui.statusbar.phone.DozeParameters +import com.android.systemui.statusbar.notification.data.repository.activeNotificationListRepository +import com.android.systemui.statusbar.notification.data.repository.headsUpNotificationIconViewStateRepository import com.android.systemui.statusbar.phone.SysuiDarkIconDispatcher -import com.android.systemui.statusbar.phone.data.repository.FakeDarkIconRepository -import com.android.systemui.statusbar.policy.data.repository.FakeDeviceProvisioningRepository -import com.android.systemui.user.domain.UserDomainLayerModule +import com.android.systemui.statusbar.phone.data.repository.fakeDarkIconRepository +import com.android.systemui.statusbar.phone.dozeParameters +import com.android.systemui.testKosmos import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever import com.android.systemui.util.ui.isAnimating import com.android.systemui.util.ui.value import com.google.common.truth.Truth.assertThat -import dagger.BindsInstance -import dagger.Component +import kotlinx.coroutines.test.runCurrent +import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import platform.test.runner.parameterized.ParameterizedAndroidJunit4 +import platform.test.runner.parameterized.Parameters @SmallTest -@RunWith(AndroidJUnit4::class) -class NotificationIconContainerStatusBarViewModelTest : SysuiTestCase() { - - @SysUISingleton - @Component( - modules = - [ - SysUITestModule::class, - BiometricsDomainLayerModule::class, - UserDomainLayerModule::class, - ] - ) - interface TestComponent : SysUITestComponent<NotificationIconContainerStatusBarViewModel> { - - val activeNotificationsRepository: ActiveNotificationListRepository - val darkIconRepository: FakeDarkIconRepository - val deviceProvisioningRepository: FakeDeviceProvisioningRepository - val headsUpViewStateRepository: HeadsUpNotificationIconViewStateRepository - val keyguardTransitionRepository: FakeKeyguardTransitionRepository - val keyguardRepository: FakeKeyguardRepository - val powerRepository: FakePowerRepository - val shadeRepository: FakeShadeRepository - - @Component.Factory - interface Factory { - fun create( - @BindsInstance test: SysuiTestCase, - mocks: TestMocksModule, - featureFlags: FakeFeatureFlagsClassicModule, - ): TestComponent +@RunWith(ParameterizedAndroidJunit4::class) +class NotificationIconContainerStatusBarViewModelTest(flags: FlagsParameterization?) : + SysuiTestCase() { + + companion object { + @JvmStatic + @Parameters(name = "{0}") + fun getParams(): List<FlagsParameterization> { + return FlagsParameterization.allCombinationsOf().andSceneContainer() } } - private val dozeParams: DozeParameters = mock() - - private val testComponent: TestComponent = - DaggerNotificationIconContainerStatusBarViewModelTest_TestComponent.factory() - .create( - test = this, - featureFlags = - FakeFeatureFlagsClassicModule { - set(Flags.FULL_SCREEN_USER_SWITCHER, value = false) - }, - mocks = - TestMocksModule( - dozeParameters = dozeParams, - ), - ) + init { + mSetFlagsRule.setFlagsParameterization(flags!!) + } + + private val kosmos = testKosmos() + private val testScope = kosmos.testScope + + private val keyguardRepository = kosmos.fakeKeyguardRepository + private val powerRepository = kosmos.fakePowerRepository + private val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository + private val darkIconRepository = kosmos.fakeDarkIconRepository + private val headsUpViewStateRepository = kosmos.headsUpNotificationIconViewStateRepository + private val activeNotificationsRepository = kosmos.activeNotificationListRepository + + private val shadeTestUtil by lazy { kosmos.shadeTestUtil } + + private val dozeParams = kosmos.dozeParameters + + lateinit var underTest: NotificationIconContainerStatusBarViewModel @Before fun setup() { - testComponent.apply { - keyguardRepository.setKeyguardShowing(false) - powerRepository.updateWakefulness( - rawState = WakefulnessState.AWAKE, - lastWakeReason = WakeSleepReason.OTHER, - lastSleepReason = WakeSleepReason.OTHER, - ) - } + underTest = kosmos.notificationIconContainerStatusBarViewModel + keyguardRepository.setKeyguardShowing(false) + powerRepository.updateWakefulness( + rawState = WakefulnessState.AWAKE, + lastWakeReason = WakeSleepReason.OTHER, + lastSleepReason = WakeSleepReason.OTHER, + ) } @Test fun animationsEnabled_isFalse_whenDeviceAsleepAndNotPulsing() = - testComponent.runTest { + testScope.runTest { powerRepository.updateWakefulness( rawState = WakefulnessState.ASLEEP, lastWakeReason = WakeSleepReason.POWER_BUTTON, @@ -150,7 +126,7 @@ class NotificationIconContainerStatusBarViewModelTest : SysuiTestCase() { @Test fun animationsEnabled_isTrue_whenDeviceAsleepAndPulsing() = - testComponent.runTest { + testScope.runTest { powerRepository.updateWakefulness( rawState = WakefulnessState.ASLEEP, lastWakeReason = WakeSleepReason.POWER_BUTTON, @@ -173,7 +149,7 @@ class NotificationIconContainerStatusBarViewModelTest : SysuiTestCase() { @Test fun animationsEnabled_isFalse_whenStartingToSleepAndNotControlScreenOff() = - testComponent.runTest { + testScope.runTest { powerRepository.updateWakefulness( rawState = WakefulnessState.STARTING_TO_SLEEP, lastWakeReason = WakeSleepReason.POWER_BUTTON, @@ -194,7 +170,7 @@ class NotificationIconContainerStatusBarViewModelTest : SysuiTestCase() { @Test fun animationsEnabled_isTrue_whenStartingToSleepAndControlScreenOff() = - testComponent.runTest { + testScope.runTest { val animationsEnabled by collectLastValue(underTest.animationsEnabled) assertThat(animationsEnabled).isTrue() @@ -218,7 +194,7 @@ class NotificationIconContainerStatusBarViewModelTest : SysuiTestCase() { @Test fun animationsEnabled_isTrue_whenNotAsleep() = - testComponent.runTest { + testScope.runTest { powerRepository.updateWakefulness( rawState = WakefulnessState.AWAKE, lastWakeReason = WakeSleepReason.POWER_BUTTON, @@ -236,7 +212,7 @@ class NotificationIconContainerStatusBarViewModelTest : SysuiTestCase() { @Test fun animationsEnabled_isTrue_whenKeyguardIsNotShowing() = - testComponent.runTest { + testScope.runTest { val animationsEnabled by collectLastValue(underTest.animationsEnabled) keyguardTransitionRepository.sendTransitionStep( @@ -257,7 +233,7 @@ class NotificationIconContainerStatusBarViewModelTest : SysuiTestCase() { @Test fun iconColors_testsDarkBounds() = - testComponent.runTest { + testScope.runTest { darkIconRepository.darkState.value = SysuiDarkIconDispatcher.DarkChange( emptyList(), @@ -280,7 +256,7 @@ class NotificationIconContainerStatusBarViewModelTest : SysuiTestCase() { @Test fun iconColors_staticDrawableColor_notInDarkTintArea() = - testComponent.runTest { + testScope.runTest { darkIconRepository.darkState.value = SysuiDarkIconDispatcher.DarkChange( listOf(Rect(0, 0, 5, 5)), @@ -295,7 +271,7 @@ class NotificationIconContainerStatusBarViewModelTest : SysuiTestCase() { @Test fun iconColors_notInDarkTintArea() = - testComponent.runTest { + testScope.runTest { darkIconRepository.darkState.value = SysuiDarkIconDispatcher.DarkChange( listOf(Rect(0, 0, 5, 5)), @@ -309,9 +285,9 @@ class NotificationIconContainerStatusBarViewModelTest : SysuiTestCase() { @Test fun isolatedIcon_animateOnAppear_shadeCollapsed() = - testComponent.runTest { + testScope.runTest { val icon: Icon = mock() - shadeRepository.setLegacyShadeExpansion(0f) + shadeTestUtil.setShadeExpansion(0f) activeNotificationsRepository.activeNotifications.value = ActiveNotificationsStore.Builder() .apply { @@ -336,9 +312,9 @@ class NotificationIconContainerStatusBarViewModelTest : SysuiTestCase() { @Test fun isolatedIcon_dontAnimateOnAppear_shadeExpanded() = - testComponent.runTest { + testScope.runTest { val icon: Icon = mock() - shadeRepository.setLegacyShadeExpansion(.5f) + shadeTestUtil.setShadeExpansion(.5f) activeNotificationsRepository.activeNotifications.value = ActiveNotificationsStore.Builder() .apply { @@ -363,7 +339,7 @@ class NotificationIconContainerStatusBarViewModelTest : SysuiTestCase() { @Test fun isolatedIcon_updateWhenIconDataChanges() = - testComponent.runTest { + testScope.runTest { val icon: Icon = mock() val isolatedIcon by collectLastValue(underTest.isolatedIcon) runCurrent() @@ -390,7 +366,7 @@ class NotificationIconContainerStatusBarViewModelTest : SysuiTestCase() { @Test fun isolatedIcon_lastMessageIsFromReply_notNull() = - testComponent.runTest { + testScope.runTest { val icon: Icon = mock() headsUpViewStateRepository.isolatedNotification.value = "notif1" activeNotificationsRepository.activeNotifications.value = diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetectorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetectorTest.kt index 67ca9a40dc2a..023148603b50 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetectorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetectorTest.kt @@ -16,80 +16,73 @@ package com.android.systemui.biometrics +import android.platform.test.flag.junit.FlagsParameterization import androidx.test.filters.SmallTest -import com.android.systemui.SysUITestComponent -import com.android.systemui.SysUITestModule import com.android.systemui.SysuiTestCase -import com.android.systemui.biometrics.domain.BiometricsDomainLayerModule -import com.android.systemui.dagger.SysUISingleton -import com.android.systemui.flags.FakeFeatureFlagsClassicModule -import com.android.systemui.flags.Flags -import com.android.systemui.runCurrent -import com.android.systemui.runTest -import com.android.systemui.shade.data.repository.FakeShadeRepository -import com.android.systemui.user.domain.UserDomainLayerModule -import dagger.BindsInstance -import dagger.Component +import com.android.systemui.flags.andSceneContainer +import com.android.systemui.kosmos.applicationCoroutineScope +import com.android.systemui.kosmos.testScope +import com.android.systemui.shade.domain.interactor.shadeInteractor +import com.android.systemui.shade.shadeTestUtil +import com.android.systemui.testKosmos +import kotlinx.coroutines.test.runCurrent +import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test +import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.Mockito.verify -import org.mockito.Mockito.verifyZeroInteractions import org.mockito.MockitoAnnotations +import org.mockito.kotlin.verifyZeroInteractions +import platform.test.runner.parameterized.ParameterizedAndroidJunit4 +import platform.test.runner.parameterized.Parameters @SmallTest -class AuthDialogPanelInteractionDetectorTest : SysuiTestCase() { - - @SysUISingleton - @Component( - modules = - [ - SysUITestModule::class, - UserDomainLayerModule::class, - BiometricsDomainLayerModule::class, - ] - ) - interface TestComponent : SysUITestComponent<AuthDialogPanelInteractionDetector> { - - val shadeRepository: FakeShadeRepository - - @Component.Factory - interface Factory { - fun create( - @BindsInstance test: SysuiTestCase, - featureFlags: FakeFeatureFlagsClassicModule, - ): TestComponent +@RunWith(ParameterizedAndroidJunit4::class) +class AuthDialogPanelInteractionDetectorTest(flags: FlagsParameterization?) : SysuiTestCase() { + + companion object { + @JvmStatic + @Parameters(name = "{0}") + fun getParams(): List<FlagsParameterization> { + return FlagsParameterization.allCombinationsOf().andSceneContainer() } } - private val testComponent: TestComponent = - DaggerAuthDialogPanelInteractionDetectorTest_TestComponent.factory() - .create( - test = this, - featureFlags = - FakeFeatureFlagsClassicModule { set(Flags.FULL_SCREEN_USER_SWITCHER, true) }, - ) + init { + mSetFlagsRule.setFlagsParameterization(flags!!) + } - private val detector: AuthDialogPanelInteractionDetector = testComponent.underTest + private val kosmos = testKosmos() + private val testScope = kosmos.testScope + + private val shadeTestUtil by lazy { kosmos.shadeTestUtil } @Mock private lateinit var action: Runnable + lateinit var detector: AuthDialogPanelInteractionDetector + @Before fun setUp() { MockitoAnnotations.initMocks(this) + detector = + AuthDialogPanelInteractionDetector( + kosmos.applicationCoroutineScope, + { kosmos.shadeInteractor }, + ) } @Test fun enableDetector_expand_shouldRunAction() = - testComponent.runTest { + testScope.runTest { // GIVEN shade is closed and detector is enabled - shadeRepository.setLegacyShadeExpansion(0f) + shadeTestUtil.setShadeExpansion(0f) detector.enable(action) runCurrent() // WHEN shade expands - shadeRepository.setLegacyShadeTracking(true) - shadeRepository.setLegacyShadeExpansion(.5f) + shadeTestUtil.setTracking(true) + shadeTestUtil.setShadeExpansion(.5f) runCurrent() // THEN action was run @@ -98,9 +91,9 @@ class AuthDialogPanelInteractionDetectorTest : SysuiTestCase() { @Test fun enableDetector_isUserInteractingTrue_shouldNotPostRunnable() = - testComponent.runTest { + testScope.runTest { // GIVEN isInteracting starts true - shadeRepository.setLegacyShadeTracking(true) + shadeTestUtil.setTracking(true) runCurrent() detector.enable(action) @@ -110,33 +103,34 @@ class AuthDialogPanelInteractionDetectorTest : SysuiTestCase() { @Test fun enableDetector_shadeExpandImmediate_shouldNotPostRunnable() = - testComponent.runTest { + testScope.runTest { // GIVEN shade is closed and detector is enabled - shadeRepository.setLegacyShadeExpansion(0f) + shadeTestUtil.setShadeExpansion(0f) detector.enable(action) runCurrent() // WHEN shade expands fully instantly - shadeRepository.setLegacyShadeExpansion(1f) + shadeTestUtil.setShadeExpansion(1f) runCurrent() // THEN action not run verifyZeroInteractions(action) + detector.disable() } @Test fun disableDetector_shouldNotPostRunnable() = - testComponent.runTest { + testScope.runTest { // GIVEN shade is closed and detector is enabled - shadeRepository.setLegacyShadeExpansion(0f) + shadeTestUtil.setShadeExpansion(0f) detector.enable(action) runCurrent() // WHEN detector is disabled and shade opens detector.disable() runCurrent() - shadeRepository.setLegacyShadeTracking(true) - shadeRepository.setLegacyShadeExpansion(.5f) + shadeTestUtil.setTracking(true) + shadeTestUtil.setShadeExpansion(.5f) runCurrent() // THEN action not run @@ -145,17 +139,18 @@ class AuthDialogPanelInteractionDetectorTest : SysuiTestCase() { @Test fun enableDetector_beginCollapse_shouldNotPostRunnable() = - testComponent.runTest { + testScope.runTest { // GIVEN shade is open and detector is enabled - shadeRepository.setLegacyShadeExpansion(1f) + shadeTestUtil.setShadeExpansion(1f) detector.enable(action) runCurrent() // WHEN shade begins to collapse - shadeRepository.setLegacyShadeExpansion(.5f) + shadeTestUtil.programmaticCollapseShade() runCurrent() // THEN action not run verifyZeroInteractions(action) + detector.disable() } } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtil.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtil.kt index 59a5bb5360e3..38ede44efef6 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtil.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtil.kt @@ -59,11 +59,23 @@ class ShadeTestUtil constructor(val delegate: ShadeTestUtilDelegate) { delegate.setLockscreenShadeExpansion(lockscreenShadeExpansion) } - /** Sets whether the user is moving the shade with touch input. */ + /** Sets whether the user is moving the shade with touch input on Lockscreen. */ fun setLockscreenShadeTracking(lockscreenShadeTracking: Boolean) { delegate.assertFlagValid() delegate.setLockscreenShadeTracking(lockscreenShadeTracking) } + + /** Sets whether the user is moving the shade with touch input. */ + fun setTracking(tracking: Boolean) { + delegate.assertFlagValid() + delegate.setTracking(tracking) + } + + /** Sets the shade to half collapsed with no touch input. */ + fun programmaticCollapseShade() { + delegate.assertFlagValid() + delegate.programmaticCollapseShade() + } } /** Sets up shade state for tests for a specific value of the scene container flag. */ @@ -80,11 +92,17 @@ interface ShadeTestUtilDelegate { /** Sets whether the user is moving the shade with touch input. */ fun setLockscreenShadeTracking(lockscreenShadeTracking: Boolean) + /** Sets whether the user is moving the shade with touch input. */ + fun setTracking(tracking: Boolean) + /** Sets shade expansion to a value between 0-1. */ fun setShadeExpansion(shadeExpansion: Float) /** Sets QS expansion to a value between 0-1. */ fun setQsExpansion(qsExpansion: Float) + + /** Sets the shade to half collapsed with no touch input. */ + fun programmaticCollapseShade() } /** Sets up shade state for tests when the scene container flag is disabled. */ @@ -104,6 +122,10 @@ class ShadeTestUtilLegacyImpl(val testScope: TestScope, val shadeRepository: Fak shadeRepository.setLegacyLockscreenShadeTracking(lockscreenShadeTracking) } + override fun setTracking(tracking: Boolean) { + shadeRepository.setLegacyShadeTracking(tracking) + } + override fun assertFlagValid() { Assert.assertFalse(SceneContainerFlag.isEnabled) } @@ -119,6 +141,11 @@ class ShadeTestUtilLegacyImpl(val testScope: TestScope, val shadeRepository: Fak shadeRepository.setQsExpansion(qsExpansion) testScope.runCurrent() } + + override fun programmaticCollapseShade() { + shadeRepository.setLegacyShadeExpansion(.5f) + testScope.runCurrent() + } } /** Sets up shade state for tests when the scene container flag is enabled. */ @@ -127,14 +154,16 @@ class ShadeTestUtilSceneImpl(val testScope: TestScope, val sceneInteractor: Scen val isUserInputOngoing = MutableStateFlow(true) override fun setShadeAndQsExpansion(shadeExpansion: Float, qsExpansion: Float) { - if (shadeExpansion == 0f) { - setTransitionProgress(Scenes.Lockscreen, Scenes.QuickSettings, qsExpansion) - } else if (qsExpansion == 0f) { - setTransitionProgress(Scenes.Lockscreen, Scenes.Shade, shadeExpansion) - } else if (shadeExpansion == 1f) { + if (shadeExpansion == 1f) { setIdleScene(Scenes.Shade) } else if (qsExpansion == 1f) { setIdleScene(Scenes.QuickSettings) + } else if (shadeExpansion == 0f && qsExpansion == 0f) { + setIdleScene(Scenes.Lockscreen) + } else if (shadeExpansion == 0f) { + setTransitionProgress(Scenes.Lockscreen, Scenes.QuickSettings, qsExpansion) + } else if (qsExpansion == 0f) { + setTransitionProgress(Scenes.Lockscreen, Scenes.Shade, shadeExpansion) } else { setTransitionProgress(Scenes.Shade, Scenes.QuickSettings, qsExpansion) } @@ -150,6 +179,10 @@ class ShadeTestUtilSceneImpl(val testScope: TestScope, val sceneInteractor: Scen setShadeAndQsExpansion(0f, qsExpansion) } + override fun programmaticCollapseShade() { + setTransitionProgress(Scenes.Shade, Scenes.Lockscreen, .5f, false) + } + override fun setLockscreenShadeExpansion(lockscreenShadeExpansion: Float) { if (lockscreenShadeExpansion == 0f) { setIdleScene(Scenes.Lockscreen) @@ -161,7 +194,11 @@ class ShadeTestUtilSceneImpl(val testScope: TestScope, val sceneInteractor: Scen } override fun setLockscreenShadeTracking(lockscreenShadeTracking: Boolean) { - isUserInputOngoing.value = lockscreenShadeTracking + setTracking(lockscreenShadeTracking) + } + + override fun setTracking(tracking: Boolean) { + isUserInputOngoing.value = tracking } private fun setIdleScene(scene: SceneKey) { @@ -172,7 +209,12 @@ class ShadeTestUtilSceneImpl(val testScope: TestScope, val sceneInteractor: Scen testScope.runCurrent() } - private fun setTransitionProgress(from: SceneKey, to: SceneKey, progress: Float) { + private fun setTransitionProgress( + from: SceneKey, + to: SceneKey, + progress: Float, + isInitiatedByUserInput: Boolean = true + ) { sceneInteractor.changeScene(from, "test") val transitionState = MutableStateFlow<ObservableTransitionState>( @@ -181,7 +223,7 @@ class ShadeTestUtilSceneImpl(val testScope: TestScope, val sceneInteractor: Scen toScene = to, currentScene = flowOf(to), progress = MutableStateFlow(progress), - isInitiatedByUserInput = true, + isInitiatedByUserInput = isInitiatedByUserInput, isUserInputOngoing = isUserInputOngoing, ) ) |