diff options
9 files changed, 95 insertions, 221 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/shared/flag/SceneContainerFlagParameterizationTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/shared/flag/SceneContainerFlagParameterizationTest.kt index db31ad52e3b0..4d69f0ddc4b7 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/shared/flag/SceneContainerFlagParameterizationTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/shared/flag/SceneContainerFlagParameterizationTest.kt @@ -24,6 +24,7 @@ import com.android.systemui.Flags.FLAG_EXAMPLE_FLAG import com.android.systemui.Flags.FLAG_SCENE_CONTAINER import com.android.systemui.SysuiTestCase import com.android.systemui.flags.andSceneContainer +import com.android.systemui.flags.parameterizeSceneContainerFlag import com.google.common.truth.Truth import org.junit.Test import org.junit.runner.RunWith @@ -41,6 +42,14 @@ internal class SceneContainerFlagParameterizationTest : SysuiTestCase() { } @Test + fun parameterizeSceneContainer() { + val result = parameterizeSceneContainerFlag() + Truth.assertThat(result).hasSize(2) + Truth.assertThat(result[0].mOverrides[FLAG_SCENE_CONTAINER]).isFalse() + Truth.assertThat(result[1].mOverrides[FLAG_SCENE_CONTAINER]).isTrue() + } + + @Test fun oneUnrelatedAndSceneContainer() { val unrelatedFlag = FLAG_EXAMPLE_FLAG val result = FlagsParameterization.allCombinationsOf(unrelatedFlag).andSceneContainer() diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java index b89ccefddf6b..a8da1160c503 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java @@ -29,7 +29,6 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.clearInvocations; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; @@ -37,12 +36,10 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; -import static kotlinx.coroutines.flow.StateFlowKt.MutableStateFlow; - import android.app.IActivityManager; import android.content.pm.ActivityInfo; import android.content.res.Configuration; -import android.testing.AndroidTestingRunner; +import android.platform.test.flag.junit.FlagsParameterization; import android.testing.TestableLooper.RunWithLooper; import android.view.View; import android.view.WindowManager; @@ -50,51 +47,26 @@ import android.view.WindowManager; import androidx.test.filters.SmallTest; import com.android.internal.colorextraction.ColorExtractor; -import com.android.keyguard.KeyguardSecurityModel; import com.android.systemui.SysuiTestCase; import com.android.systemui.biometrics.AuthController; -import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository; import com.android.systemui.colorextraction.SysuiColorExtractor; -import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository; -import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor; import com.android.systemui.communal.domain.interactor.CommunalInteractor; -import com.android.systemui.deviceentry.domain.interactor.DeviceEntryUdfpsInteractor; import com.android.systemui.dump.DumpManager; -import com.android.systemui.flags.FakeFeatureFlagsClassic; +import com.android.systemui.flags.SceneContainerFlagParameterizationKt; import com.android.systemui.keyguard.KeyguardViewMediator; -import com.android.systemui.keyguard.data.repository.FakeCommandQueue; -import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository; -import com.android.systemui.keyguard.domain.interactor.FromLockscreenTransitionInteractor; -import com.android.systemui.keyguard.domain.interactor.FromPrimaryBouncerTransitionInteractor; -import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor; -import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor; import com.android.systemui.kosmos.KosmosJavaAdapter; import com.android.systemui.plugins.statusbar.StatusBarStateController; -import com.android.systemui.power.domain.interactor.PowerInteractor; import com.android.systemui.res.R; import com.android.systemui.scene.FakeWindowRootViewComponent; -import com.android.systemui.scene.data.repository.SceneContainerRepository; -import com.android.systemui.scene.domain.interactor.SceneInteractor; -import com.android.systemui.scene.shared.logger.SceneLogger; import com.android.systemui.settings.UserTracker; -import com.android.systemui.shade.data.repository.FakeShadeRepository; -import com.android.systemui.shade.domain.interactor.ShadeInteractor; -import com.android.systemui.shade.domain.interactor.ShadeInteractorImpl; -import com.android.systemui.shade.domain.interactor.ShadeInteractorLegacyImpl; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.SysuiStatusBarStateController; -import com.android.systemui.statusbar.disableflags.data.repository.FakeDisableFlagsRepository; -import com.android.systemui.statusbar.notification.stack.domain.interactor.SharedNotificationContainerInteractor; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.KeyguardBypassController; -import com.android.systemui.statusbar.phone.ScreenOffAnimationController; import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; -import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController; -import com.android.systemui.statusbar.policy.data.repository.FakeUserSetupRepository; import com.android.systemui.user.domain.interactor.SelectedUserInteractor; -import com.android.systemui.user.domain.interactor.UserSwitcherInteractor; import com.google.common.util.concurrent.MoreExecutors; @@ -110,13 +82,13 @@ import org.mockito.Spy; import java.util.List; import java.util.concurrent.Executor; -import kotlinx.coroutines.test.TestScope; +import platform.test.runner.parameterized.ParameterizedAndroidJunit4; +import platform.test.runner.parameterized.Parameters; -@RunWith(AndroidTestingRunner.class) +@RunWith(ParameterizedAndroidJunit4.class) @RunWithLooper(setAsMainLooper = true) @SmallTest public class NotificationShadeWindowControllerImplTest extends SysuiTestCase { - @Mock private WindowManager mWindowManager; @Mock private DozeParameters mDozeParameters; @Spy private final NotificationShadeWindowView mNotificationShadeWindowView = spy( @@ -128,29 +100,31 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase { @Mock private SysuiColorExtractor mColorExtractor; @Mock private ColorExtractor.GradientColors mGradientColors; @Mock private DumpManager mDumpManager; - @Mock private KeyguardSecurityModel mKeyguardSecurityModel; @Mock private KeyguardStateController mKeyguardStateController; @Mock private AuthController mAuthController; @Mock private ShadeWindowLogger mShadeWindowLogger; @Mock private SelectedUserInteractor mSelectedUserInteractor; @Mock private UserTracker mUserTracker; - @Mock private LargeScreenHeaderHelper mLargeScreenHeaderHelper; @Captor private ArgumentCaptor<WindowManager.LayoutParams> mLayoutParameters; @Captor private ArgumentCaptor<StatusBarStateController.StateListener> mStateListener; private final Executor mMainExecutor = MoreExecutors.directExecutor(); private final Executor mBackgroundExecutor = MoreExecutors.directExecutor(); private final KosmosJavaAdapter mKosmos = new KosmosJavaAdapter(this); - private final TestScope mTestScope = mKosmos.getTestScope(); - private ShadeInteractor mShadeInteractor; private NotificationShadeWindowControllerImpl mNotificationShadeWindowController; private float mPreferredRefreshRate = -1; - private FromLockscreenTransitionInteractor mFromLockscreenTransitionInteractor; - private FromPrimaryBouncerTransitionInteractor mFromPrimaryBouncerTransitionInteractor; - private ScreenOffAnimationController mScreenOffAnimationController; private SysuiStatusBarStateController mStatusBarStateController; + @Parameters(name = "{0}") + public static List<FlagsParameterization> getParams() { + return SceneContainerFlagParameterizationKt.parameterizeSceneContainerFlag(); + } + + public NotificationShadeWindowControllerImplTest(FlagsParameterization flags) { + mSetFlagsRule.setFlagsParameterization(flags); + } + @Before public void setUp() { MockitoAnnotations.initMocks(this); @@ -164,71 +138,7 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase { when(mDozeParameters.getAlwaysOn()).thenReturn(true); when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors); - FakeKeyguardRepository keyguardRepository = new FakeKeyguardRepository(); - FakeFeatureFlagsClassic featureFlags = new FakeFeatureFlagsClassic(); - FakeShadeRepository shadeRepository = new FakeShadeRepository(); - - mScreenOffAnimationController = mKosmos.getScreenOffAnimationController(); mStatusBarStateController = spy(mKosmos.getStatusBarStateController()); - PowerInteractor powerInteractor = mKosmos.getPowerInteractor(); - - SceneInteractor sceneInteractor = new SceneInteractor( - mTestScope.getBackgroundScope(), - new SceneContainerRepository( - mTestScope.getBackgroundScope(), - mKosmos.getFakeSceneContainerConfig(), - mKosmos.getSceneDataSource()), - mock(SceneLogger.class), - mKosmos.getDeviceUnlockedInteractor()); - - FakeConfigurationRepository configurationRepository = new FakeConfigurationRepository(); - KeyguardTransitionInteractor keyguardTransitionInteractor = - mKosmos.getKeyguardTransitionInteractor(); - KeyguardInteractor keyguardInteractor = new KeyguardInteractor( - keyguardRepository, - new FakeCommandQueue(), - powerInteractor, - new FakeKeyguardBouncerRepository(), - new ConfigurationInteractor(configurationRepository), - shadeRepository, - keyguardTransitionInteractor, - () -> sceneInteractor, - () -> mKosmos.getFromGoneTransitionInteractor(), - () -> mKosmos.getSharedNotificationContainerInteractor(), - mTestScope); - CommunalInteractor communalInteractor = mKosmos.getCommunalInteractor(); - - mFromLockscreenTransitionInteractor = mKosmos.getFromLockscreenTransitionInteractor(); - mFromPrimaryBouncerTransitionInteractor = - mKosmos.getFromPrimaryBouncerTransitionInteractor(); - - DeviceEntryUdfpsInteractor deviceEntryUdfpsInteractor = - mock(DeviceEntryUdfpsInteractor.class); - when(deviceEntryUdfpsInteractor.isUdfpsSupported()).thenReturn(MutableStateFlow(false)); - - mShadeInteractor = new ShadeInteractorImpl( - mTestScope.getBackgroundScope(), - mKosmos.getDeviceProvisioningInteractor(), - new FakeDisableFlagsRepository(), - mock(DozeParameters.class), - keyguardRepository, - keyguardTransitionInteractor, - powerInteractor, - new FakeUserSetupRepository(), - mock(UserSwitcherInteractor.class), - new ShadeInteractorLegacyImpl( - mTestScope.getBackgroundScope(), - keyguardRepository, - new SharedNotificationContainerInteractor( - configurationRepository, - mContext, - new ResourcesSplitShadeStateController(), - keyguardInteractor, - deviceEntryUdfpsInteractor, - () -> mLargeScreenHeaderHelper), - shadeRepository - ) - ); mNotificationShadeWindowController = new NotificationShadeWindowControllerImpl( mContext, @@ -245,13 +155,13 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase { mColorExtractor, mDumpManager, mKeyguardStateController, - mScreenOffAnimationController, + mKosmos.getScreenOffAnimationController(), mAuthController, - () -> mShadeInteractor, + mKosmos::getShadeInteractor, mShadeWindowLogger, () -> mSelectedUserInteractor, mUserTracker, - () -> communalInteractor) { + mKosmos::getCommunalInteractor) { @Override protected boolean isDebuggable() { return false; diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImplTest.kt index 96b2b7a20342..aa0ca186c1ee 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImplTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImplTest.kt @@ -24,7 +24,7 @@ import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository import com.android.systemui.coroutines.collectLastValue -import com.android.systemui.flags.andSceneContainer +import com.android.systemui.flags.parameterizeSceneContainerFlag import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.DozeStateModel @@ -80,7 +80,7 @@ class ShadeInteractorImplTest(flags: FlagsParameterization?) : SysuiTestCase() { @JvmStatic @Parameters(name = "{0}") fun getParams(): List<FlagsParameterization> { - return FlagsParameterization.allCombinationsOf().andSceneContainer() + return parameterizeSceneContainerFlag() } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt index 2ab934c2386e..07c4b00364ff 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt @@ -16,7 +16,7 @@ package com.android.systemui.shade.domain.startable -import androidx.test.ext.junit.runners.AndroidJUnit4 +import android.platform.test.flag.junit.FlagsParameterization import androidx.test.filters.SmallTest import com.android.compose.animation.scene.ObservableTransitionState import com.android.compose.animation.scene.SceneKey @@ -25,9 +25,8 @@ import com.android.systemui.authentication.data.repository.fakeAuthenticationRep import com.android.systemui.authentication.shared.model.AuthenticationMethodModel import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository import com.android.systemui.coroutines.collectLastValue -import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository -import com.android.systemui.deviceentry.domain.interactor.deviceUnlockedInteractor import com.android.systemui.flags.EnableSceneContainer +import com.android.systemui.flags.parameterizeSceneContainerFlag import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus import com.android.systemui.kosmos.testScope @@ -50,24 +49,42 @@ import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.TestScope 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 @OptIn(ExperimentalCoroutinesApi::class) @SmallTest -@RunWith(AndroidJUnit4::class) -class ShadeStartableTest : SysuiTestCase() { +@RunWith(ParameterizedAndroidJunit4::class) +class ShadeStartableTest(flags: FlagsParameterization?) : SysuiTestCase() { private val kosmos = testKosmos() private val testScope = kosmos.testScope - private val shadeInteractor = kosmos.shadeInteractor - private val sceneInteractor = kosmos.sceneInteractor - private val shadeExpansionStateManager = kosmos.shadeExpansionStateManager - private val deviceEntryRepository = kosmos.fakeDeviceEntryRepository - private val deviceUnlockedInteractor = kosmos.deviceUnlockedInteractor - private val fakeConfigurationRepository = kosmos.fakeConfigurationRepository - private val fakeSceneDataSource = kosmos.fakeSceneDataSource - - private val underTest = kosmos.shadeStartable + private val shadeInteractor by lazy { kosmos.shadeInteractor } + private val sceneInteractor by lazy { kosmos.sceneInteractor } + private val shadeExpansionStateManager by lazy { kosmos.shadeExpansionStateManager } + private val fakeConfigurationRepository by lazy { kosmos.fakeConfigurationRepository } + private val fakeSceneDataSource by lazy { kosmos.fakeSceneDataSource } + + private lateinit var underTest: ShadeStartable + + companion object { + @JvmStatic + @Parameters(name = "{0}") + fun getParams(): List<FlagsParameterization> { + return parameterizeSceneContainerFlag() + } + } + + init { + mSetFlagsRule.setFlagsParameterization(flags!!) + } + + @Before + fun setup() { + underTest = kosmos.shadeStartable + } @Test fun hydrateShadeMode() = diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt index 2397de69c063..5312ad809a72 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt @@ -28,6 +28,7 @@ import com.android.systemui.common.ui.data.repository.fakeConfigurationRepositor import com.android.systemui.coroutines.collectLastValue import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor +import com.android.systemui.flags.EnableSceneContainer import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus import com.android.systemui.kosmos.testScope @@ -65,6 +66,7 @@ import org.mockito.MockitoAnnotations @SmallTest @RunWith(AndroidJUnit4::class) @TestableLooper.RunWithLooper +@EnableSceneContainer class ShadeSceneViewModelTest : SysuiTestCase() { private val kosmos = testKosmos() diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt index be5af885c895..fc9535cf6950 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 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. @@ -19,60 +19,32 @@ package com.android.systemui.statusbar import android.animation.ObjectAnimator -import android.testing.AndroidTestingRunner +import android.platform.test.flag.junit.FlagsParameterization import android.testing.TestableLooper import androidx.test.filters.SmallTest import com.android.internal.logging.testing.UiEventLoggerFake import com.android.systemui.SysuiTestCase import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository import com.android.systemui.authentication.shared.model.AuthenticationMethodModel -import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository -import com.android.systemui.classifier.FalsingCollectorFake -import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository -import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor import com.android.systemui.coroutines.collectLastValue -import com.android.systemui.deviceentry.domain.interactor.DeviceEntryUdfpsInteractor import com.android.systemui.deviceentry.domain.interactor.deviceUnlockedInteractor import com.android.systemui.flags.DisableSceneContainer import com.android.systemui.flags.EnableSceneContainer -import com.android.systemui.flags.FakeFeatureFlagsClassic +import com.android.systemui.flags.parameterizeSceneContainerFlag import com.android.systemui.jank.interactionJankMonitor -import com.android.systemui.keyguard.data.repository.FakeCommandQueue -import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository -import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository -import com.android.systemui.keyguard.domain.interactor.FromLockscreenTransitionInteractor -import com.android.systemui.keyguard.domain.interactor.FromPrimaryBouncerTransitionInteractor -import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor -import com.android.systemui.keyguard.domain.interactor.fromGoneTransitionInteractor -import com.android.systemui.keyguard.domain.interactor.fromLockscreenTransitionInteractor -import com.android.systemui.keyguard.domain.interactor.fromPrimaryBouncerTransitionInteractor import com.android.systemui.keyguard.domain.interactor.keyguardClockInteractor -import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus import com.android.systemui.kosmos.testScope import com.android.systemui.plugins.statusbar.StatusBarStateController -import com.android.systemui.power.data.repository.FakePowerRepository -import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.shared.model.Scenes -import com.android.systemui.shade.LargeScreenHeaderHelper -import com.android.systemui.shade.data.repository.FakeShadeRepository -import com.android.systemui.shade.domain.interactor.ShadeInteractor -import com.android.systemui.shade.domain.interactor.ShadeInteractorImpl -import com.android.systemui.shade.domain.interactor.ShadeInteractorLegacyImpl -import com.android.systemui.statusbar.disableflags.data.repository.FakeDisableFlagsRepository -import com.android.systemui.statusbar.notification.stack.domain.interactor.SharedNotificationContainerInteractor -import com.android.systemui.statusbar.notification.stack.domain.interactor.sharedNotificationContainerInteractor -import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController -import com.android.systemui.statusbar.policy.data.repository.FakeUserSetupRepository -import com.android.systemui.statusbar.policy.domain.interactor.deviceProvisioningInteractor +import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.testKosmos import com.android.systemui.util.kotlin.JavaAdapter import com.android.systemui.util.mockito.mock import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals @@ -87,26 +59,34 @@ import org.mockito.Mockito import org.mockito.Mockito.mock import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations -import org.mockito.Mockito.`when` as whenever +import platform.test.runner.parameterized.ParameterizedAndroidJunit4 +import platform.test.runner.parameterized.Parameters @SmallTest -@RunWith(AndroidTestingRunner::class) +@RunWith(ParameterizedAndroidJunit4::class) @TestableLooper.RunWithLooper -class StatusBarStateControllerImplTest : SysuiTestCase() { +class StatusBarStateControllerImplTest(flags: FlagsParameterization?) : SysuiTestCase() { private val kosmos = testKosmos() private val testScope = kosmos.testScope - private lateinit var shadeInteractor: ShadeInteractor - private lateinit var fromLockscreenTransitionInteractor: FromLockscreenTransitionInteractor - private lateinit var fromPrimaryBouncerTransitionInteractor: - FromPrimaryBouncerTransitionInteractor + private val mockDarkAnimator = mock<ObjectAnimator>() - private val deviceEntryUdfpsInteractor = mock<DeviceEntryUdfpsInteractor>() - private val largeScreenHeaderHelper = mock<LargeScreenHeaderHelper>() private lateinit var underTest: StatusBarStateControllerImpl private lateinit var uiEventLogger: UiEventLoggerFake + companion object { + @JvmStatic + @Parameters(name = "{0}") + fun getParams(): List<FlagsParameterization> { + return parameterizeSceneContainerFlag() + } + } + + init { + mSetFlagsRule.setFlagsParameterization(flags!!) + } + @Before fun setUp() { MockitoAnnotations.initMocks(this) @@ -118,7 +98,7 @@ class StatusBarStateControllerImplTest : SysuiTestCase() { uiEventLogger, kosmos.interactionJankMonitor, JavaAdapter(testScope.backgroundScope), - { shadeInteractor }, + { kosmos.shadeInteractor }, { kosmos.deviceUnlockedInteractor }, { kosmos.sceneInteractor }, { kosmos.keyguardClockInteractor }, @@ -127,59 +107,6 @@ class StatusBarStateControllerImplTest : SysuiTestCase() { return mockDarkAnimator } } - - val powerInteractor = - PowerInteractor(FakePowerRepository(), FalsingCollectorFake(), mock(), underTest) - val keyguardRepository = FakeKeyguardRepository() - val keyguardTransitionRepository = FakeKeyguardTransitionRepository() - val featureFlags = FakeFeatureFlagsClassic() - val shadeRepository = FakeShadeRepository() - val configurationRepository = FakeConfigurationRepository() - val keyguardTransitionInteractor = kosmos.keyguardTransitionInteractor - fromLockscreenTransitionInteractor = kosmos.fromLockscreenTransitionInteractor - fromPrimaryBouncerTransitionInteractor = kosmos.fromPrimaryBouncerTransitionInteractor - - val keyguardInteractor = - KeyguardInteractor( - keyguardRepository, - FakeCommandQueue(), - powerInteractor, - FakeKeyguardBouncerRepository(), - ConfigurationInteractor(configurationRepository), - shadeRepository, - keyguardTransitionInteractor, - { kosmos.sceneInteractor }, - { kosmos.fromGoneTransitionInteractor }, - { kosmos.sharedNotificationContainerInteractor }, - testScope, - ) - - whenever(deviceEntryUdfpsInteractor.isUdfpsSupported).thenReturn(MutableStateFlow(false)) - shadeInteractor = - ShadeInteractorImpl( - testScope.backgroundScope, - kosmos.deviceProvisioningInteractor, - FakeDisableFlagsRepository(), - mock(), - keyguardRepository, - keyguardTransitionInteractor, - powerInteractor, - FakeUserSetupRepository(), - mock(), - ShadeInteractorLegacyImpl( - testScope.backgroundScope, - keyguardRepository, - SharedNotificationContainerInteractor( - configurationRepository, - mContext, - ResourcesSplitShadeStateController(), - keyguardInteractor, - deviceEntryUdfpsInteractor, - largeScreenHeaderHelperLazy = { largeScreenHeaderHelper } - ), - shadeRepository, - ) - ) } @Test diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerFlagParameterization.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerFlagParameterization.kt index 4e24233a6681..e2a1fe4e45bf 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerFlagParameterization.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerFlagParameterization.kt @@ -58,3 +58,8 @@ fun FlagsParameterization.andSceneContainer(): Sequence<FlagsParameterization> = */ fun List<FlagsParameterization>.andSceneContainer(): List<FlagsParameterization> = flatMap { it.andSceneContainer() }.toList() + +/** Parameterizes only the scene container flag. */ +fun parameterizeSceneContainerFlag(): List<FlagsParameterization> { + return FlagsParameterization.allCombinationsOf().andSceneContainer() +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt index 162f278b7a8f..8dc4756569f1 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt @@ -30,8 +30,8 @@ import com.android.systemui.communal.data.repository.fakeCommunalRepository import com.android.systemui.communal.domain.interactor.communalInteractor import com.android.systemui.concurrency.fakeExecutor import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor +import com.android.systemui.deviceentry.domain.interactor.deviceEntryUdfpsInteractor import com.android.systemui.deviceentry.domain.interactor.deviceUnlockedInteractor -import com.android.systemui.flags.fakeFeatureFlagsClassic import com.android.systemui.globalactions.domain.interactor.globalActionsInteractor import com.android.systemui.haptics.qs.qsLongPressEffect import com.android.systemui.jank.interactionJankMonitor @@ -50,6 +50,8 @@ import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.sceneContainerConfig import com.android.systemui.scene.shared.model.sceneDataSource import com.android.systemui.settings.brightness.domain.interactor.brightnessMirrorShowingInteractor +import com.android.systemui.shade.data.repository.shadeRepository +import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.shadeController import com.android.systemui.statusbar.notification.stack.domain.interactor.sharedNotificationContainerInteractor import com.android.systemui.statusbar.phone.screenOffAnimationController @@ -69,7 +71,6 @@ class KosmosJavaAdapter( val testDispatcher by lazy { kosmos.testDispatcher } val testScope by lazy { kosmos.testScope } - val fakeFeatureFlags by lazy { kosmos.fakeFeatureFlagsClassic } val fakeExecutor by lazy { kosmos.fakeExecutor } val fakeExecutorHandler by lazy { kosmos.fakeExecutorHandler } val configurationRepository by lazy { kosmos.fakeConfigurationRepository } @@ -91,6 +92,7 @@ class KosmosJavaAdapter( val falsingCollector by lazy { kosmos.falsingCollector } val powerInteractor by lazy { kosmos.powerInteractor } val deviceEntryInteractor by lazy { kosmos.deviceEntryInteractor } + val deviceEntryUdfpsInteractor by lazy { kosmos.deviceEntryUdfpsInteractor } val deviceUnlockedInteractor by lazy { kosmos.deviceUnlockedInteractor } val communalInteractor by lazy { kosmos.communalInteractor } val sceneContainerPlugin by lazy { kosmos.sceneContainerPlugin } @@ -110,6 +112,8 @@ class KosmosJavaAdapter( val brightnessMirrorShowingInteractor by lazy { kosmos.brightnessMirrorShowingInteractor } val qsLongPressEffect by lazy { kosmos.qsLongPressEffect } val shadeController by lazy { kosmos.shadeController } + val shadeRepository by lazy { kosmos.shadeRepository } + val shadeInteractor by lazy { kosmos.shadeInteractor } init { kosmos.applicationContext = testCase.context diff --git a/packages/SystemUI/tests/src/com/android/systemui/scene/FakeWindowRootViewComponent.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/FakeWindowRootViewComponent.kt index 63a05d77c3c1..6ac3a62cc108 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/scene/FakeWindowRootViewComponent.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/FakeWindowRootViewComponent.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. |