diff options
| author | 2024-01-12 16:33:45 -0800 | |
|---|---|---|
| committer | 2024-01-14 09:54:14 -0800 | |
| commit | c5a84d76f8b6779f7c825eee31efb8842f1c6140 (patch) | |
| tree | ae9b8794e7a27f777b5e35eca38d539e69427bb7 | |
| parent | 2ad9a8cf5306be2fa8be083683a4a04e168e49c6 (diff) | |
[Flexiglass] SceneTestUtils uses Kosmos internally.
The next step is to modify all users of SceneTestUtils to use Kosmos
directly and remove SceneTestUtils.
Bug: 309503089
Test: N/A
Flag: N/A
Change-Id: I9401c75b28981913988ceae568da88a5a88be8b6
61 files changed, 823 insertions, 601 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt index 02d30c5ea20a..bc3ca1bd6c56 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt @@ -230,11 +230,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { sceneTransitionStateFlow = MutableStateFlow(ObservableTransitionState.Idle(SceneKey.Lockscreen)) sceneInteractor.setTransitionState(sceneTransitionStateFlow) - deviceEntryInteractor = - sceneTestUtils.deviceEntryInteractor( - authenticationInteractor = sceneTestUtils.authenticationInteractor(), - sceneInteractor = sceneInteractor, - ) + deviceEntryInteractor = sceneTestUtils.deviceEntryInteractor() mSetFlagsRule.disableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR) underTest = @@ -253,7 +249,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { falsingManager, userSwitcherController, featureFlags, - sceneTestUtils.sceneContainerFlags, + sceneTestUtils.fakeSceneContainerFlags, globalSettings, sessionTracker, Optional.of(sideFpsController), @@ -791,6 +787,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { @Test fun dismissesKeyguard_whenSceneChangesToGone() = sceneTestUtils.testScope.runTest { + sceneTestUtils.fakeSceneContainerFlags.enabled = true // Upon init, we have never dismisses the keyguard. underTest.onInit() runCurrent() diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/authentication/data/repository/AuthenticationRepositoryTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/authentication/data/repository/AuthenticationRepositoryTest.kt index b9759cc145f2..b4d4e1f51251 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/authentication/data/repository/AuthenticationRepositoryTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/authentication/data/repository/AuthenticationRepositoryTest.kt @@ -83,7 +83,7 @@ class AuthenticationRepositoryTest : SysuiTestCase() { AuthenticationRepositoryImpl( applicationScope = testScope.backgroundScope, backgroundDispatcher = testUtils.testDispatcher, - flags = testUtils.sceneContainerFlags, + flags = testUtils.fakeSceneContainerFlags, clock = clock, getSecurityMode = getSecurityMode, userRepository = userRepository, diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerActionButtonInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerActionButtonInteractorTest.kt index 67ce86b4e137..63581b3f7070 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerActionButtonInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerActionButtonInteractorTest.kt @@ -16,27 +16,25 @@ package com.android.systemui.bouncer.domain.interactor -import android.app.ActivityTaskManager import android.telecom.TelecomManager import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest +import com.android.app.activityTaskManager import com.android.internal.R +import com.android.internal.logging.fakeMetricsLogger import com.android.internal.logging.nano.MetricsProto -import com.android.internal.logging.testing.FakeMetricsLogger -import com.android.internal.util.EmergencyAffordanceManager +import com.android.internal.util.emergencyAffordanceManager import com.android.systemui.SysuiTestCase import com.android.systemui.authentication.shared.model.AuthenticationMethodModel import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.Flags.REFACTOR_GETCURRENTUSER -import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.scene.SceneTestUtils import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeMobileConnectionsRepository -import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.whenever +import com.android.telecom.telecomManager import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Before @@ -53,27 +51,26 @@ import org.mockito.MockitoAnnotations @RunWith(AndroidJUnit4::class) class BouncerActionButtonInteractorTest : SysuiTestCase() { - @Mock private lateinit var activityTaskManager: ActivityTaskManager - @Mock private lateinit var emergencyAffordanceManager: EmergencyAffordanceManager @Mock private lateinit var selectedUserInteractor: SelectedUserInteractor - @Mock private lateinit var tableLogger: TableLogBuffer @Mock private lateinit var telecomManager: TelecomManager - private lateinit var utils: SceneTestUtils - private lateinit var testScope: TestScope + private val utils = SceneTestUtils(this) + private val testScope = utils.testScope + private val metricsLogger = utils.kosmos.fakeMetricsLogger + private val activityTaskManager = utils.kosmos.activityTaskManager + private val emergencyAffordanceManager = utils.kosmos.emergencyAffordanceManager + private lateinit var mobileConnectionsRepository: FakeMobileConnectionsRepository - private val metricsLogger = FakeMetricsLogger() private var currentUserId: Int = 0 private var needsEmergencyAffordance = true - private lateinit var underTest: BouncerActionButtonInteractor - @Before fun setUp() { - utils = SceneTestUtils(this) - testScope = utils.testScope MockitoAnnotations.initMocks(this) + utils.fakeSceneContainerFlags.enabled = true + + mobileConnectionsRepository = utils.mobileConnectionsRepository overrideResource(R.string.lockscreen_emergency_call, MESSAGE_EMERGENCY_CALL) overrideResource(R.string.lockscreen_return_to_call, MESSAGE_RETURN_TO_CALL) @@ -86,34 +83,18 @@ class BouncerActionButtonInteractorTest : SysuiTestCase() { .thenReturn(needsEmergencyAffordance) whenever(telecomManager.isInCall).thenReturn(false) - utils.featureFlags.set(REFACTOR_GETCURRENTUSER, true) - - mobileConnectionsRepository = - FakeMobileConnectionsRepository(FakeMobileMappingsProxy(), tableLogger) + utils.fakeFeatureFlags.set(REFACTOR_GETCURRENTUSER, true) utils.telephonyRepository.setHasTelephonyRadio(true) - underTest = - utils.bouncerActionButtonInteractor( - mobileConnectionsRepository = mobileConnectionsRepository, - activityTaskManager = activityTaskManager, - telecomManager = telecomManager, - emergencyAffordanceManager = emergencyAffordanceManager, - metricsLogger = metricsLogger, - ) + utils.kosmos.telecomManager = telecomManager } @Test fun noTelephonyRadio_noButton() = testScope.runTest { utils.telephonyRepository.setHasTelephonyRadio(false) - underTest = - utils.bouncerActionButtonInteractor( - mobileConnectionsRepository = mobileConnectionsRepository, - activityTaskManager = activityTaskManager, - telecomManager = telecomManager, - ) - + val underTest = utils.bouncerActionButtonInteractor() val actionButton by collectLastValue(underTest.actionButton) assertThat(actionButton).isNull() } @@ -121,12 +102,8 @@ class BouncerActionButtonInteractorTest : SysuiTestCase() { @Test fun noTelecomManager_noButton() = testScope.runTest { - underTest = - utils.bouncerActionButtonInteractor( - mobileConnectionsRepository = mobileConnectionsRepository, - activityTaskManager = activityTaskManager, - telecomManager = null, - ) + utils.kosmos.telecomManager = null + val underTest = utils.bouncerActionButtonInteractor() val actionButton by collectLastValue(underTest.actionButton) assertThat(actionButton).isNull() } @@ -134,6 +111,7 @@ class BouncerActionButtonInteractorTest : SysuiTestCase() { @Test fun duringCall_returnToCallButton() = testScope.runTest { + val underTest = utils.bouncerActionButtonInteractor() val actionButton by collectLastValue(underTest.actionButton) utils.telephonyRepository.setIsInCall(true) @@ -143,6 +121,7 @@ class BouncerActionButtonInteractorTest : SysuiTestCase() { assertThat(actionButton?.onLongClick).isNull() actionButton?.onClick?.invoke() + runCurrent() assertThat(metricsLogger.logs.size).isEqualTo(1) assertThat(metricsLogger.logs.element().category) @@ -154,6 +133,7 @@ class BouncerActionButtonInteractorTest : SysuiTestCase() { @Test fun noCall_secureAuthMethod_emergencyCallButton() = testScope.runTest { + val underTest = utils.bouncerActionButtonInteractor() val actionButton by collectLastValue(underTest.actionButton) mobileConnectionsRepository.isAnySimSecure.value = false utils.authenticationRepository.setAuthenticationMethod(AuthenticationMethodModel.Pin) @@ -165,6 +145,7 @@ class BouncerActionButtonInteractorTest : SysuiTestCase() { assertThat(actionButton?.onLongClick).isNotNull() actionButton?.onClick?.invoke() + runCurrent() assertThat(metricsLogger.logs.size).isEqualTo(1) assertThat(metricsLogger.logs.element().category) @@ -182,10 +163,12 @@ class BouncerActionButtonInteractorTest : SysuiTestCase() { @Test fun noCall_insecureAuthMethodButSecureSim_emergencyCallButton() = testScope.runTest { + val underTest = utils.bouncerActionButtonInteractor() val actionButton by collectLastValue(underTest.actionButton) mobileConnectionsRepository.isAnySimSecure.value = true utils.authenticationRepository.setAuthenticationMethod(AuthenticationMethodModel.None) utils.telephonyRepository.setIsInCall(false) + runCurrent() assertThat(actionButton).isNotNull() assertThat(actionButton?.label).isEqualTo(MESSAGE_EMERGENCY_CALL) @@ -196,6 +179,7 @@ class BouncerActionButtonInteractorTest : SysuiTestCase() { @Test fun noCall_insecure_noButton() = testScope.runTest { + val underTest = utils.bouncerActionButtonInteractor() val actionButton by collectLastValue(underTest.actionButton) mobileConnectionsRepository.isAnySimSecure.value = false utils.authenticationRepository.setAuthenticationMethod(AuthenticationMethodModel.None) @@ -207,6 +191,7 @@ class BouncerActionButtonInteractorTest : SysuiTestCase() { @Test fun noCall_simSecureButEmergencyNotSupported_noButton() = testScope.runTest { + val underTest = utils.bouncerActionButtonInteractor() val actionButton by collectLastValue(underTest.actionButton) mobileConnectionsRepository.isAnySimSecure.value = true overrideResource(R.bool.config_enable_emergency_call_while_sim_locked, false) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt index 93ba6a48f3dd..4b6199b55b58 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt @@ -25,7 +25,8 @@ import com.android.systemui.authentication.shared.model.AuthenticationMethodMode import com.android.systemui.authentication.shared.model.AuthenticationPatternCoordinate import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectValues -import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFaceAuthInteractor +import com.android.systemui.deviceentry.domain.interactor.deviceEntryFaceAuthInteractor +import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFaceAuthRepository import com.android.systemui.res.R import com.android.systemui.scene.SceneTestUtils import com.google.common.truth.Truth.assertThat @@ -37,8 +38,6 @@ 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.MockitoAnnotations @OptIn(ExperimentalCoroutinesApi::class) @@ -46,9 +45,7 @@ import org.mockito.MockitoAnnotations @RunWith(AndroidJUnit4::class) class BouncerInteractorTest : SysuiTestCase() { - @Mock private lateinit var mDeviceEntryFaceAuthInteractor: DeviceEntryFaceAuthInteractor - - private val utils = SceneTestUtils(this) + private val utils = SceneTestUtils(this).apply { fakeSceneContainerFlags.enabled = true } private val testScope = utils.testScope private val authenticationInteractor = utils.authenticationInteractor() @@ -57,6 +54,7 @@ class BouncerInteractorTest : SysuiTestCase() { @Before fun setUp() { MockitoAnnotations.initMocks(this) + overrideResource(R.string.keyguard_enter_your_pin, MESSAGE_ENTER_YOUR_PIN) overrideResource(R.string.keyguard_enter_your_password, MESSAGE_ENTER_YOUR_PASSWORD) overrideResource(R.string.keyguard_enter_your_pattern, MESSAGE_ENTER_YOUR_PATTERN) @@ -64,11 +62,7 @@ class BouncerInteractorTest : SysuiTestCase() { overrideResource(R.string.kg_wrong_password, MESSAGE_WRONG_PASSWORD) overrideResource(R.string.kg_wrong_pattern, MESSAGE_WRONG_PATTERN) - underTest = - utils.bouncerInteractor( - authenticationInteractor = authenticationInteractor, - deviceEntryFaceAuthInteractor = mDeviceEntryFaceAuthInteractor, - ) + underTest = utils.bouncerInteractor() } @Test @@ -305,8 +299,16 @@ class BouncerInteractorTest : SysuiTestCase() { @Test fun intentionalUserInputEvent_notifiesFaceAuthInteractor() = testScope.runTest { + val isFaceAuthRunning by + collectLastValue(utils.kosmos.fakeDeviceEntryFaceAuthRepository.isAuthRunning) + utils.kosmos.deviceEntryFaceAuthInteractor.onDeviceLifted() + runCurrent() + assertThat(isFaceAuthRunning).isTrue() + underTest.onIntentionalUserInput() - verify(mDeviceEntryFaceAuthInteractor).onPrimaryBouncerUserInput() + runCurrent() + + assertThat(isFaceAuthRunning).isFalse() } companion object { diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/AuthMethodBouncerViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/AuthMethodBouncerViewModelTest.kt index 2f0843b202a0..3043a710276b 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/AuthMethodBouncerViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/AuthMethodBouncerViewModelTest.kt @@ -35,10 +35,7 @@ class AuthMethodBouncerViewModelTest : SysuiTestCase() { private val utils = SceneTestUtils(this) private val testScope = utils.testScope - private val bouncerInteractor = - utils.bouncerInteractor( - authenticationInteractor = utils.authenticationInteractor(), - ) + private val bouncerInteractor = utils.bouncerInteractor() private val underTest = PinBouncerViewModel( applicationContext = context, diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelTest.kt index 47bbe6f49a5e..4b1f9fee48bb 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelTest.kt @@ -41,6 +41,7 @@ import kotlinx.coroutines.test.advanceTimeBy import kotlinx.coroutines.test.currentTime import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest +import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @@ -52,15 +53,14 @@ class BouncerViewModelTest : SysuiTestCase() { private val utils = SceneTestUtils(this) private val testScope = utils.testScope private val authenticationInteractor = utils.authenticationInteractor() - private val bouncerInteractor = - utils.bouncerInteractor( - authenticationInteractor = authenticationInteractor, - ) - private val underTest = - utils.bouncerViewModel( - bouncerInteractor = bouncerInteractor, - authenticationInteractor = authenticationInteractor, - ) + private val bouncerInteractor = utils.bouncerInteractor() + private lateinit var underTest: BouncerViewModel + + @Before + fun setUp() { + utils.fakeSceneContainerFlags.enabled = true + underTest = utils.bouncerViewModel() + } @Test fun authMethod_nonNullForSecureMethods_nullForNotSecureMethods() = @@ -228,13 +228,13 @@ class BouncerViewModelTest : SysuiTestCase() { fun isSideBySideSupported() = testScope.runTest { val isSideBySideSupported by collectLastValue(underTest.isSideBySideSupported) - utils.featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true) + utils.fakeFeatureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true) utils.authenticationRepository.setAuthenticationMethod(Pin) assertThat(isSideBySideSupported).isTrue() utils.authenticationRepository.setAuthenticationMethod(Password) assertThat(isSideBySideSupported).isTrue() - utils.featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, false) + utils.fakeFeatureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, false) utils.authenticationRepository.setAuthenticationMethod(Pin) assertThat(isSideBySideSupported).isTrue() diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PasswordBouncerViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PasswordBouncerViewModelTest.kt index 64e6e5707d75..5c5632f6aa7b 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PasswordBouncerViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PasswordBouncerViewModelTest.kt @@ -47,16 +47,8 @@ class PasswordBouncerViewModelTest : SysuiTestCase() { private val testScope = utils.testScope private val authenticationInteractor = utils.authenticationInteractor() private val sceneInteractor = utils.sceneInteractor() - private val bouncerInteractor = - utils.bouncerInteractor( - authenticationInteractor = authenticationInteractor, - ) - private val bouncerViewModel = - utils.bouncerViewModel( - bouncerInteractor = bouncerInteractor, - authenticationInteractor = authenticationInteractor, - actionButtonInteractor = utils.bouncerActionButtonInteractor(), - ) + private val bouncerInteractor = utils.bouncerInteractor() + private val bouncerViewModel = utils.bouncerViewModel() private val isInputEnabled = MutableStateFlow(true) private val underTest = diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PatternBouncerViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PatternBouncerViewModelTest.kt index 83d1938c93be..9ee344a9527a 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PatternBouncerViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PatternBouncerViewModelTest.kt @@ -48,16 +48,8 @@ class PatternBouncerViewModelTest : SysuiTestCase() { private val testScope = utils.testScope private val authenticationInteractor = utils.authenticationInteractor() private val sceneInteractor = utils.sceneInteractor() - private val bouncerInteractor = - utils.bouncerInteractor( - authenticationInteractor = authenticationInteractor, - ) - private val bouncerViewModel = - utils.bouncerViewModel( - bouncerInteractor = bouncerInteractor, - authenticationInteractor = authenticationInteractor, - actionButtonInteractor = utils.bouncerActionButtonInteractor(), - ) + private val bouncerInteractor = utils.bouncerInteractor() + private val bouncerViewModel = utils.bouncerViewModel() private val underTest = PatternBouncerViewModel( applicationContext = context, diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PinBouncerViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PinBouncerViewModelTest.kt index db98d7632910..75e372f29590 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PinBouncerViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PinBouncerViewModelTest.kt @@ -47,16 +47,8 @@ class PinBouncerViewModelTest : SysuiTestCase() { private val testScope = utils.testScope private val sceneInteractor = utils.sceneInteractor() private val authenticationInteractor = utils.authenticationInteractor() - private val bouncerInteractor = - utils.bouncerInteractor( - authenticationInteractor = authenticationInteractor, - ) - private val bouncerViewModel = - utils.bouncerViewModel( - bouncerInteractor = bouncerInteractor, - authenticationInteractor = authenticationInteractor, - actionButtonInteractor = utils.bouncerActionButtonInteractor(), - ) + private val bouncerInteractor = utils.bouncerInteractor() + private val bouncerViewModel = utils.bouncerViewModel() private val underTest = PinBouncerViewModel( applicationContext = context, diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt index ea19cb799b10..929e879a5406 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt @@ -23,9 +23,8 @@ import com.android.systemui.authentication.data.repository.FakeAuthenticationRep import com.android.systemui.authentication.shared.model.AuthenticationMethodModel import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectValues -import com.android.systemui.deviceentry.data.repository.FakeDeviceEntryRepository -import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFaceAuthRepository -import com.android.systemui.keyguard.data.repository.FakeTrustRepository +import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFaceAuthRepository +import com.android.systemui.keyguard.data.repository.fakeTrustRepository import com.android.systemui.scene.SceneTestUtils import com.android.systemui.scene.shared.model.SceneKey import com.android.systemui.scene.shared.model.SceneModel @@ -33,6 +32,7 @@ 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 @@ -43,19 +43,17 @@ class DeviceEntryInteractorTest : SysuiTestCase() { private val utils = SceneTestUtils(this) private val testScope = utils.testScope - private val repository: FakeDeviceEntryRepository = utils.deviceEntryRepository - private val faceAuthRepository = FakeDeviceEntryFaceAuthRepository() - private val trustRepository = FakeTrustRepository() + private val faceAuthRepository = utils.kosmos.fakeDeviceEntryFaceAuthRepository + private val trustRepository = utils.kosmos.fakeTrustRepository private val sceneInteractor = utils.sceneInteractor() private val authenticationInteractor = utils.authenticationInteractor() - private val underTest = - utils.deviceEntryInteractor( - repository = repository, - authenticationInteractor = authenticationInteractor, - sceneInteractor = sceneInteractor, - faceAuthRepository = faceAuthRepository, - trustRepository = trustRepository, - ) + private lateinit var underTest: DeviceEntryInteractor + + @Before + fun setUp() { + utils.fakeSceneContainerFlags.enabled = true + underTest = utils.deviceEntryInteractor() + } @Test fun canSwipeToEnter_startsNull() = diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorTest.kt index 11939c1120d9..8933d2c93f5a 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorTest.kt @@ -63,7 +63,7 @@ class KeyguardInteractorTest : SysuiTestCase() { repository = repository, commandQueue = commandQueue, powerInteractor = PowerInteractorFactory.create().powerInteractor, - sceneContainerFlags = testUtils.sceneContainerFlags, + sceneContainerFlags = testUtils.fakeSceneContainerFlags, bouncerRepository = bouncerRepository, configurationInteractor = ConfigurationInteractor(FakeConfigurationRepository()), shadeRepository = shadeRepository, @@ -183,6 +183,7 @@ class KeyguardInteractorTest : SysuiTestCase() { @Test fun animationDozingTransitions() = testScope.runTest { + testUtils.fakeSceneContainerFlags.enabled = true val isAnimate by collectLastValue(underTest.animateDozingTransitions) underTest.setAnimateDozingTransitions(true) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenSceneViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenSceneViewModelTest.kt index 74d309c1d359..04e90c8deebf 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenSceneViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenSceneViewModelTest.kt @@ -87,11 +87,7 @@ class LockscreenSceneViewModelTest : SysuiTestCase() { private fun createLockscreenSceneViewModel(): LockscreenSceneViewModel { return LockscreenSceneViewModel( applicationScope = testScope.backgroundScope, - deviceEntryInteractor = - utils.deviceEntryInteractor( - authenticationInteractor = utils.authenticationInteractor(), - sceneInteractor = utils.sceneInteractor(), - ), + deviceEntryInteractor = utils.deviceEntryInteractor(), communalInteractor = utils.communalInteractor(), longPress = KeyguardLongPressViewModel( diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt index 530d127d17a9..ecc2ef15dec8 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt @@ -24,6 +24,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.R import com.android.internal.util.EmergencyAffordanceManager +import com.android.internal.util.emergencyAffordanceManager import com.android.systemui.SysuiTestCase import com.android.systemui.authentication.data.repository.FakeAuthenticationRepository import com.android.systemui.authentication.shared.model.AuthenticationMethodModel @@ -35,13 +36,11 @@ import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.Flags import com.android.systemui.keyguard.ui.viewmodel.KeyguardLongPressViewModel import com.android.systemui.keyguard.ui.viewmodel.LockscreenSceneViewModel -import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.media.controls.pipeline.MediaDataManager import com.android.systemui.media.controls.ui.MediaHost import com.android.systemui.model.SysUiState import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAsleepForTest import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest -import com.android.systemui.power.domain.interactor.PowerInteractorFactory import com.android.systemui.qs.ui.adapter.FakeQSSceneAdapter import com.android.systemui.scene.domain.startable.SceneContainerStartable import com.android.systemui.scene.shared.model.ObservableTransitionState @@ -61,6 +60,7 @@ import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnec import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever +import com.android.telecom.telecomManager import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertWithMessage import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -101,27 +101,12 @@ import org.mockito.MockitoAnnotations @RunWith(AndroidJUnit4::class) class SceneFrameworkIntegrationTest : SysuiTestCase() { - @Mock private lateinit var emergencyAffordanceManager: EmergencyAffordanceManager - @Mock private lateinit var tableLogger: TableLogBuffer - @Mock private lateinit var telecomManager: TelecomManager - - private val utils = SceneTestUtils(this) + private val utils = SceneTestUtils(this).apply { fakeSceneContainerFlags.enabled = true } private val testScope = utils.testScope private val sceneContainerConfig = utils.fakeSceneContainerConfig() - private val sceneRepository = - utils.fakeSceneContainerRepository( - containerConfig = sceneContainerConfig, - ) - private val sceneInteractor = - utils.sceneInteractor( - repository = sceneRepository, - ) + private val sceneInteractor = utils.sceneInteractor() private val authenticationInteractor = utils.authenticationInteractor() - private val deviceEntryInteractor = - utils.deviceEntryInteractor( - authenticationInteractor = authenticationInteractor, - sceneInteractor = sceneInteractor, - ) + private val deviceEntryInteractor = utils.deviceEntryInteractor() private val communalInteractor = utils.communalInteractor() private val transitionState = @@ -135,10 +120,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() { ) .apply { setTransitionState(transitionState) } - private val bouncerInteractor = - utils.bouncerInteractor( - authenticationInteractor = authenticationInteractor, - ) + private val bouncerInteractor = utils.bouncerInteractor() private lateinit var mobileConnectionsRepository: FakeMobileConnectionsRepository private lateinit var bouncerActionButtonInteractor: BouncerActionButtonInteractor @@ -170,19 +152,15 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() { FakeMobileConnectionsRepository(), ), constants = mock(), - utils.featureFlags, + utils.fakeFeatureFlags, scope = testScope.backgroundScope, ) private lateinit var shadeHeaderViewModel: ShadeHeaderViewModel private lateinit var shadeSceneViewModel: ShadeSceneViewModel - private val keyguardRepository = utils.keyguardRepository - private val keyguardInteractor = - utils.keyguardInteractor( - repository = keyguardRepository, - ) - private val powerInteractor = PowerInteractorFactory.create().powerInteractor + private val keyguardInteractor = utils.keyguardInteractor() + private val powerInteractor = utils.powerInteractor() private var bouncerSceneJob: Job? = null @@ -191,21 +169,26 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() { @Mock private lateinit var mediaDataManager: MediaDataManager @Mock private lateinit var mediaHost: MediaHost + private lateinit var emergencyAffordanceManager: EmergencyAffordanceManager + private lateinit var telecomManager: TelecomManager + @Before fun setUp() { MockitoAnnotations.initMocks(this) + overrideResource(R.bool.config_enable_emergency_call_while_sim_locked, true) + telecomManager = checkNotNull(utils.kosmos.telecomManager) whenever(telecomManager.isInCall).thenReturn(false) + emergencyAffordanceManager = utils.kosmos.emergencyAffordanceManager whenever(emergencyAffordanceManager.needsEmergencyAffordance()).thenReturn(true) - utils.featureFlags.apply { + utils.fakeFeatureFlags.apply { set(Flags.NEW_NETWORK_SLICE_UI, false) set(Flags.REFACTOR_GETCURRENTUSER, true) } - mobileConnectionsRepository = - FakeMobileConnectionsRepository(FakeMobileMappingsProxy(), tableLogger) - mobileConnectionsRepository.isAnySimSecure.value = true + mobileConnectionsRepository = utils.mobileConnectionsRepository + mobileConnectionsRepository.isAnySimSecure.value = false utils.telephonyRepository.apply { setHasTelephonyRadio(true) @@ -213,18 +196,8 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() { setIsInCall(false) } - bouncerActionButtonInteractor = - utils.bouncerActionButtonInteractor( - mobileConnectionsRepository = mobileConnectionsRepository, - telecomManager = telecomManager, - emergencyAffordanceManager = emergencyAffordanceManager, - ) - bouncerViewModel = - utils.bouncerViewModel( - bouncerInteractor = bouncerInteractor, - authenticationInteractor = authenticationInteractor, - actionButtonInteractor = bouncerActionButtonInteractor, - ) + bouncerActionButtonInteractor = utils.bouncerActionButtonInteractor() + bouncerViewModel = utils.bouncerViewModel() shadeHeaderViewModel = ShadeHeaderViewModel( @@ -257,7 +230,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() { sceneInteractor = sceneInteractor, deviceEntryInteractor = deviceEntryInteractor, keyguardInteractor = keyguardInteractor, - flags = utils.sceneContainerFlags, + flags = utils.fakeSceneContainerFlags, sysUiState = sysUiState, displayId = displayTracker.defaultDisplayId, sceneLogger = mock(), diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryTest.kt index ddeb05b39e53..339d0263a089 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryTest.kt @@ -39,7 +39,7 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class SceneContainerRepositoryTest : SysuiTestCase() { - private val utils = SceneTestUtils(this) + private val utils = SceneTestUtils(this).apply { fakeSceneContainerFlags.enabled = true } private val testScope = utils.testScope @Test @@ -72,7 +72,7 @@ class SceneContainerRepositoryTest : SysuiTestCase() { @Test(expected = IllegalStateException::class) fun setDesiredScene_noSuchSceneInContainer_throws() { utils.kosmos.sceneKeys = listOf(SceneKey.QuickSettings, SceneKey.Lockscreen) - val underTest = utils.fakeSceneContainerRepository(utils.fakeSceneContainerConfig()) + val underTest = utils.fakeSceneContainerRepository() underTest.setDesiredScene(SceneModel(SceneKey.Shade)) } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt index 7f4bbbe36768..486f7ab6501d 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt @@ -28,6 +28,7 @@ import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.runTest +import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @@ -37,8 +38,14 @@ class SceneInteractorTest : SysuiTestCase() { private val utils = SceneTestUtils(this) private val testScope = utils.testScope - private val repository = utils.fakeSceneContainerRepository() - private val underTest = utils.sceneInteractor(repository = repository) + + private lateinit var underTest: SceneInteractor + + @Before + fun setUp() { + utils.fakeSceneContainerFlags.enabled = true + underTest = utils.sceneInteractor() + } @Test fun allSceneKeys() { diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt index dd22976ee9e1..5fe4ca1fbfe3 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt @@ -28,7 +28,7 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.authentication.shared.model.AuthenticationMethodModel import com.android.systemui.classifier.FalsingCollector import com.android.systemui.coroutines.collectLastValue -import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFaceAuthRepository +import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFaceAuthRepository import com.android.systemui.model.SysUiState import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAsleepForTest import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest @@ -68,17 +68,11 @@ class SceneContainerStartableTest : SysuiTestCase() { private val utils = SceneTestUtils(this) private val testScope = utils.testScope private val sceneInteractor = utils.sceneInteractor() - private val sceneContainerFlags = utils.sceneContainerFlags + private val sceneContainerFlags = utils.fakeSceneContainerFlags private val authenticationInteractor = utils.authenticationInteractor() - private val bouncerInteractor = - utils.bouncerInteractor(authenticationInteractor = authenticationInteractor) - private val faceAuthRepository = FakeDeviceEntryFaceAuthRepository() - private val deviceEntryInteractor = - utils.deviceEntryInteractor( - faceAuthRepository = faceAuthRepository, - authenticationInteractor = authenticationInteractor, - sceneInteractor = sceneInteractor, - ) + private val bouncerInteractor = utils.bouncerInteractor() + private val faceAuthRepository = utils.kosmos.fakeDeviceEntryFaceAuthRepository + private val deviceEntryInteractor = utils.deviceEntryInteractor() private val keyguardInteractor = utils.keyguardInteractor() private val sysUiState: SysUiState = mock() private val falsingCollector: FalsingCollector = mock() diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt index c89cd9e0c1f1..3a4ee642685f 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt @@ -28,6 +28,7 @@ import com.android.systemui.scene.shared.model.SceneModel import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest +import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @@ -37,11 +38,17 @@ class SceneContainerViewModelTest : SysuiTestCase() { private val utils = SceneTestUtils(this) private val interactor = utils.sceneInteractor() - private val underTest = - SceneContainerViewModel( - sceneInteractor = interactor, - falsingInteractor = utils.falsingInteractor(), - ) + private lateinit var underTest: SceneContainerViewModel + + @Before + fun setUp() { + utils.fakeSceneContainerFlags.enabled = true + underTest = + SceneContainerViewModel( + sceneInteractor = interactor, + falsingInteractor = utils.falsingInteractor(), + ) + } @Test fun isVisible() = runTest { 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 1d2497dfd716..a8133a3a4de3 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 @@ -56,12 +56,7 @@ class ShadeSceneViewModelTest : SysuiTestCase() { private val utils = SceneTestUtils(this) private val testScope = utils.testScope private val sceneInteractor = utils.sceneInteractor() - private val authenticationInteractor = utils.authenticationInteractor() - private val deviceEntryInteractor = - utils.deviceEntryInteractor( - authenticationInteractor = authenticationInteractor, - sceneInteractor = sceneInteractor, - ) + private val deviceEntryInteractor = utils.deviceEntryInteractor() private val mobileIconsInteractor = FakeMobileIconsInteractor(FakeMobileMappingsProxy(), mock()) private val flags = FakeFeatureFlagsClassic().also { it.set(Flags.NEW_NETWORK_SLICE_UI, false) } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationStackAppearanceIntegrationTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationStackAppearanceIntegrationTest.kt index 4cdb08afb22e..607996d67d4f 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationStackAppearanceIntegrationTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationStackAppearanceIntegrationTest.kt @@ -27,8 +27,7 @@ import com.android.systemui.flags.Flags import com.android.systemui.flags.fakeFeatureFlagsClassic import com.android.systemui.kosmos.testScope import com.android.systemui.scene.domain.interactor.sceneInteractor -import com.android.systemui.scene.shared.flag.FakeSceneContainerFlags -import com.android.systemui.scene.shared.flag.sceneContainerFlags +import com.android.systemui.scene.shared.flag.fakeSceneContainerFlags import com.android.systemui.scene.shared.model.ObservableTransitionState import com.android.systemui.scene.shared.model.SceneKey import com.android.systemui.scene.shared.model.SceneModel @@ -50,7 +49,7 @@ class NotificationStackAppearanceIntegrationTest : SysuiTestCase() { private val kosmos = testKosmos().apply { - sceneContainerFlags = FakeSceneContainerFlags(enabled = true) + fakeSceneContainerFlags.enabled = true fakeFeatureFlagsClassic.apply { set(Flags.FULL_SCREEN_USER_SWITCHER, false) set(Flags.NSSL_DEBUG_LINES, false) diff --git a/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerBaseTest.java index 3d7d701ee5d6..d8ef981b6a56 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerBaseTest.java @@ -175,7 +175,7 @@ public class LockIconViewControllerBaseTest extends SysuiTestCase { mPrimaryBouncerInteractor, mContext, () -> mDeviceEntryInteractor, - mSceneTestUtils.getSceneContainerFlags() + mSceneTestUtils.getFakeSceneContainerFlags() ); } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerTest.java index 93a5393b41cf..132bdb55180a 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerTest.java @@ -373,7 +373,7 @@ public class LockIconViewControllerTest extends LockIconViewControllerBaseTest { @Test public void longPress_showBouncer_sceneContainerNotEnabled() { init(/* useMigrationFlag= */ false); - mSceneTestUtils.getSceneContainerFlags().setEnabled(false); + mSceneTestUtils.getFakeSceneContainerFlags().setEnabled(false); when(mFalsingManager.isFalseLongTap(anyInt())).thenReturn(false); // WHEN longPress @@ -387,7 +387,7 @@ public class LockIconViewControllerTest extends LockIconViewControllerBaseTest { @Test public void longPress_showBouncer() { init(/* useMigrationFlag= */ false); - mSceneTestUtils.getSceneContainerFlags().setEnabled(true); + mSceneTestUtils.getFakeSceneContainerFlags().setEnabled(true); when(mFalsingManager.isFalseLongTap(anyInt())).thenReturn(false); // WHEN longPress @@ -401,7 +401,7 @@ public class LockIconViewControllerTest extends LockIconViewControllerBaseTest { @Test public void longPress_falsingTriggered_doesNotShowBouncer() { init(/* useMigrationFlag= */ false); - mSceneTestUtils.getSceneContainerFlags().setEnabled(true); + mSceneTestUtils.getFakeSceneContainerFlags().setEnabled(true); when(mFalsingManager.isFalseLongTap(anyInt())).thenReturn(true); // WHEN longPress diff --git a/packages/SystemUI/tests/src/com/android/systemui/deviceentry/data/repository/DeviceEntryHapticsInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/deviceentry/data/repository/DeviceEntryHapticsInteractorTest.kt index d5c3641e75a9..0dfdeca60fcd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/deviceentry/data/repository/DeviceEntryHapticsInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/deviceentry/data/repository/DeviceEntryHapticsInteractorTest.kt @@ -36,9 +36,9 @@ import com.android.systemui.power.data.repository.powerRepository import com.android.systemui.power.shared.model.WakeSleepReason import com.android.systemui.power.shared.model.WakefulnessState import com.android.systemui.testKosmos -import com.android.systemui.util.time.fakeSystemClock import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.advanceTimeBy import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Test @@ -72,8 +72,8 @@ class DeviceEntryHapticsInteractorTest : SysuiTestCase() { // It's been 10 seconds since the last power button wakeup setAwakeFromPowerButton() + advanceTimeBy(10000) runCurrent() - kosmos.fakeSystemClock.setUptimeMillis(kosmos.fakeSystemClock.uptimeMillis() + 10000) enterDeviceFromBiometricUnlock() assertThat(playSuccessHaptic).isNotNull() @@ -89,8 +89,8 @@ class DeviceEntryHapticsInteractorTest : SysuiTestCase() { // It's been 10 seconds since the last power button wakeup setAwakeFromPowerButton() + advanceTimeBy(10000) runCurrent() - kosmos.fakeSystemClock.setUptimeMillis(kosmos.fakeSystemClock.uptimeMillis() + 10000) enterDeviceFromBiometricUnlock() assertThat(playSuccessHaptic).isNull() @@ -106,8 +106,8 @@ class DeviceEntryHapticsInteractorTest : SysuiTestCase() { // It's only been 50ms since the last power button wakeup setAwakeFromPowerButton() + advanceTimeBy(50) runCurrent() - kosmos.fakeSystemClock.setUptimeMillis(kosmos.fakeSystemClock.uptimeMillis() + 50) enterDeviceFromBiometricUnlock() assertThat(playSuccessHaptic).isNull() diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java index 791c080e9219..971c8a3d1c05 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java @@ -131,7 +131,6 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase { @Spy private final NotificationShadeWindowView mNotificationShadeWindowView = spy( new NotificationShadeWindowView(mContext, null)); @Mock private IActivityManager mActivityManager; - @Mock private SysuiStatusBarStateController mStatusBarStateController; @Mock private ConfigurationController mConfigurationController; @Mock private KeyguardViewMediator mKeyguardViewMediator; @Mock private KeyguardBypassController mKeyguardBypassController; @@ -140,7 +139,6 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase { @Mock private DumpManager mDumpManager; @Mock private KeyguardSecurityModel mKeyguardSecurityModel; @Mock private KeyguardStateController mKeyguardStateController; - @Mock private ScreenOffAnimationController mScreenOffAnimationController; @Mock private AuthController mAuthController; @Mock private ShadeWindowLogger mShadeWindowLogger; @Mock private SelectedUserInteractor mSelectedUserInteractor; @@ -160,6 +158,8 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase { private float mPreferredRefreshRate = -1; private FromLockscreenTransitionInteractor mFromLockscreenTransitionInteractor; private FromPrimaryBouncerTransitionInteractor mFromPrimaryBouncerTransitionInteractor; + private ScreenOffAnimationController mScreenOffAnimationController; + private SysuiStatusBarStateController mStatusBarStateController; @Before public void setUp() { @@ -178,11 +178,9 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase { FakeFeatureFlagsClassic featureFlags = new FakeFeatureFlagsClassic(); FakeShadeRepository shadeRepository = new FakeShadeRepository(); - PowerInteractor powerInteractor = mUtils.powerInteractor( - mUtils.getPowerRepository(), - mUtils.falsingCollector(), - mScreenOffAnimationController, - mStatusBarStateController); + mScreenOffAnimationController = mUtils.getScreenOffAnimationController(); + mStatusBarStateController = spy(mUtils.getStatusBarStateController()); + PowerInteractor powerInteractor = mUtils.powerInteractor(); SceneInteractor sceneInteractor = new SceneInteractor( mTestScope.getBackgroundScope(), diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java index a369f8280190..ca68fd867b39 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java @@ -85,7 +85,6 @@ import com.android.systemui.statusbar.NotificationRemoteInputManager; import com.android.systemui.statusbar.NotificationShadeDepthController; import com.android.systemui.statusbar.PulseExpansionHandler; import com.android.systemui.statusbar.QsFrameTranslateController; -import com.android.systemui.statusbar.StatusBarStateControllerImpl; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.disableflags.data.repository.FakeDisableFlagsRepository; import com.android.systemui.statusbar.notification.data.repository.ActiveNotificationListRepository; @@ -99,7 +98,6 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.KeyguardStatusBarView; import com.android.systemui.statusbar.phone.LightBarController; import com.android.systemui.statusbar.phone.LockscreenGestureLogger; -import com.android.systemui.statusbar.phone.ScreenOffAnimationController; import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager; @@ -172,7 +170,6 @@ public class QuickSettingsControllerBaseTest extends SysuiTestCase { @Mock protected LockscreenGestureLogger mLockscreenGestureLogger; @Mock protected MetricsLogger mMetricsLogger; @Mock protected FeatureFlags mFeatureFlags; - @Mock protected InteractionJankMonitor mInteractionJankMonitor; @Mock protected ShadeLogger mShadeLogger; @Mock protected DumpManager mDumpManager; @Mock protected UiEventLogger mUiEventLogger; @@ -186,6 +183,7 @@ public class QuickSettingsControllerBaseTest extends SysuiTestCase { protected FakeKeyguardRepository mKeyguardRepository = new FakeKeyguardRepository(); protected FakeShadeRepository mShadeRepository = new FakeShadeRepository(); + protected InteractionJankMonitor mInteractionJankMonitor; protected SysuiStatusBarStateController mStatusBarStateController; protected ShadeInteractor mShadeInteractor; @@ -205,8 +203,8 @@ public class QuickSettingsControllerBaseTest extends SysuiTestCase { public void setup() { MockitoAnnotations.initMocks(this); when(mPanelViewControllerLazy.get()).thenReturn(mNotificationPanelViewController); - mStatusBarStateController = new StatusBarStateControllerImpl(mUiEventLogger, - mInteractionJankMonitor, mock(JavaAdapter.class), () -> mShadeInteractor); + mStatusBarStateController = mUtils.getStatusBarStateController(); + mInteractionJankMonitor = mUtils.getInteractionJankMonitor(); FakeDeviceProvisioningRepository deviceProvisioningRepository = new FakeDeviceProvisioningRepository(); @@ -214,11 +212,7 @@ public class QuickSettingsControllerBaseTest extends SysuiTestCase { FakeFeatureFlagsClassic featureFlags = new FakeFeatureFlagsClassic(); FakeConfigurationRepository configurationRepository = new FakeConfigurationRepository(); - PowerInteractor powerInteractor = mUtils.powerInteractor( - mUtils.getPowerRepository(), - mUtils.falsingCollector(), - mock(ScreenOffAnimationController.class), - mStatusBarStateController); + PowerInteractor powerInteractor = mUtils.powerInteractor(); SceneInteractor sceneInteractor = new SceneInteractor( mTestScope.getBackgroundScope(), diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java index 5102b4f7a817..5fa7f13ecd6e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java @@ -166,7 +166,7 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase { mKeyguardRepository, mCommandQueue, PowerInteractorFactory.create().getPowerInteractor(), - mSceneTestUtils.getSceneContainerFlags(), + mSceneTestUtils.getFakeSceneContainerFlags(), new FakeKeyguardBouncerRepository(), new ConfigurationInteractor(new FakeConfigurationRepository()), new FakeShadeRepository(), diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ui/viewmodel/KeyguardStatusBarViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ui/viewmodel/KeyguardStatusBarViewModelTest.kt index 9419d638b1c7..5f9c096b1f3c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ui/viewmodel/KeyguardStatusBarViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ui/viewmodel/KeyguardStatusBarViewModelTest.kt @@ -55,7 +55,7 @@ class KeyguardStatusBarViewModelTest : SysuiTestCase() { keyguardRepository, mock<CommandQueue>(), PowerInteractorFactory.create().powerInteractor, - sceneTestUtils.sceneContainerFlags, + sceneTestUtils.fakeSceneContainerFlags, FakeKeyguardBouncerRepository(), ConfigurationInteractor(FakeConfigurationRepository()), FakeShadeRepository(), diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserSwitcherInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserSwitcherInteractorTest.kt index fb5375a1ab83..e6b9d9b09246 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserSwitcherInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserSwitcherInteractorTest.kt @@ -121,10 +121,10 @@ class UserSwitcherInteractorTest : SysuiTestCase() { SUPERVISED_USER_CREATION_APP_PACKAGE, ) - utils.featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, false) + utils.fakeFeatureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, false) mSetFlagsRule.enableFlags(AConfigFlags.FLAG_SWITCH_USER_ON_BG) spyContext = spy(context) - keyguardReply = KeyguardInteractorFactory.create(featureFlags = utils.featureFlags) + keyguardReply = KeyguardInteractorFactory.create(featureFlags = utils.fakeFeatureFlags) keyguardRepository = keyguardReply.repository userRepository = FakeUserRepository() refreshUsersScheduler = @@ -363,7 +363,7 @@ class UserSwitcherInteractorTest : SysuiTestCase() { fun actions_deviceUnlocked_fullScreen() { createUserInteractor() testScope.runTest { - utils.featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true) + utils.fakeFeatureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true) val userInfos = createUserInfos(count = 2, includeGuest = false) userRepository.setUserInfos(userInfos) @@ -447,7 +447,7 @@ class UserSwitcherInteractorTest : SysuiTestCase() { fun actions_deviceLockedAddFromLockscreenSet_fullList_fullScreen() { createUserInteractor() testScope.runTest { - utils.featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true) + utils.fakeFeatureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true) val userInfos = createUserInfos(count = 2, includeGuest = false) userRepository.setUserInfos(userInfos) userRepository.setSelectedUserInfo(userInfos[0]) @@ -792,7 +792,7 @@ class UserSwitcherInteractorTest : SysuiTestCase() { fun userRecordsFullScreen() { createUserInteractor() testScope.runTest { - utils.featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true) + utils.fakeFeatureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true) val userInfos = createUserInfos(count = 3, includeGuest = false) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setUserInfos(userInfos) @@ -901,7 +901,7 @@ class UserSwitcherInteractorTest : SysuiTestCase() { fun showUserSwitcher_fullScreenEnabled_launchesFullScreenDialog() { createUserInteractor() testScope.runTest { - utils.featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true) + utils.fakeFeatureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true) val expandable = mock<Expandable>() underTest.showUserSwitcher(expandable) @@ -1139,7 +1139,7 @@ class UserSwitcherInteractorTest : SysuiTestCase() { resetOrExitSessionReceiver = resetOrExitSessionReceiver, ), uiEventLogger = uiEventLogger, - featureFlags = utils.featureFlags, + featureFlags = utils.fakeFeatureFlags, userRestrictionChecker = mock(), ) } diff --git a/packages/SystemUI/tests/utils/src/android/content/ContextKosmos.kt b/packages/SystemUI/tests/utils/src/android/content/ContextKosmos.kt index f96c5080bb95..5e254bf4f879 100644 --- a/packages/SystemUI/tests/utils/src/android/content/ContextKosmos.kt +++ b/packages/SystemUI/tests/utils/src/android/content/ContextKosmos.kt @@ -16,9 +16,7 @@ package android.content -import com.android.systemui.SysuiTestableContext import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.testCase -val Kosmos.testableContext: SysuiTestableContext by Kosmos.Fixture { testCase.context } -var Kosmos.applicationContext: Context by Kosmos.Fixture { testableContext } +var Kosmos.applicationContext: Context by Kosmos.Fixture { testCase.context } diff --git a/packages/SystemUI/tests/utils/src/android/telephony/TelephonyManagerKosmos.kt b/packages/SystemUI/tests/utils/src/android/telephony/TelephonyManagerKosmos.kt new file mode 100644 index 000000000000..a4ee7026fdff --- /dev/null +++ b/packages/SystemUI/tests/utils/src/android/telephony/TelephonyManagerKosmos.kt @@ -0,0 +1,32 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.telephony + +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.util.mockito.mock +import com.android.systemui.util.mockito.whenever +import org.mockito.ArgumentMatchers.anyInt +import org.mockito.ArgumentMatchers.anyString + +val Kosmos.telephonyManager by Fixture { + mock<TelephonyManager> { + whenever(createForSubscriptionId(anyInt())).thenReturn(this) + whenever(supplyIccLockPin(anyString())) + .thenReturn(PinResult(PinResult.PIN_RESULT_TYPE_SUCCESS, 3)) + } +} diff --git a/packages/SystemUI/tests/utils/src/com/android/app/ActivityTaskManagerKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/app/ActivityTaskManagerKosmos.kt new file mode 100644 index 000000000000..fa3e8f96923a --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/app/ActivityTaskManagerKosmos.kt @@ -0,0 +1,24 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.app + +import android.app.ActivityTaskManager +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.util.mockito.mock + +val Kosmos.activityTaskManager by Fixture { mock<ActivityTaskManager>() } diff --git a/packages/SystemUI/tests/utils/src/com/android/internal/logging/MetricsLoggerKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/internal/logging/MetricsLoggerKosmos.kt index a1815c527b35..eedc0b9ee988 100644 --- a/packages/SystemUI/tests/utils/src/com/android/internal/logging/MetricsLoggerKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/internal/logging/MetricsLoggerKosmos.kt @@ -16,8 +16,9 @@ package com.android.internal.logging +import com.android.internal.logging.testing.FakeMetricsLogger import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture -import com.android.systemui.util.mockito.mock -var Kosmos.metricsLogger by Fixture { mock<MetricsLogger>() } +val Kosmos.fakeMetricsLogger by Fixture { FakeMetricsLogger() } +val Kosmos.metricsLogger by Fixture<MetricsLogger> { fakeMetricsLogger } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/SceneContainerConfigKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/internal/util/EmergencyAffordanceManagerKosmos.kt index f9cdc1bea309..313343729fd9 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/SceneContainerConfigKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/internal/util/EmergencyAffordanceManagerKosmos.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. @@ -14,9 +14,10 @@ * limitations under the License. */ -package com.android.systemui.scene.shared.model +package com.android.internal.util import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.util.mockito.mock -val Kosmos.sceneContainerConfig by - Kosmos.Fixture { FakeSceneContainerConfigModule().sceneContainerConfig } +val Kosmos.emergencyAffordanceManager by Fixture { mock<EmergencyAffordanceManager>() } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/BouncerRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/BouncerRepositoryKosmos.kt new file mode 100644 index 000000000000..c0f8638e3d32 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/BouncerRepositoryKosmos.kt @@ -0,0 +1,27 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.bouncer.data.repository + +import com.android.systemui.flags.featureFlagsClassic +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture + +val Kosmos.bouncerRepository by Fixture { + BouncerRepository( + flags = featureFlagsClassic, + ) +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/EmergencyServicesRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/EmergencyServicesRepositoryKosmos.kt new file mode 100644 index 000000000000..88517092934a --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/EmergencyServicesRepositoryKosmos.kt @@ -0,0 +1,31 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.bouncer.data.repository + +import android.content.res.mainResources +import com.android.systemui.common.ui.data.repository.configurationRepository +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.kosmos.testScope + +val Kosmos.emergencyServicesRepository by Fixture { + EmergencyServicesRepository( + applicationScope = testScope.backgroundScope, + resources = mainResources, + configurationRepository = configurationRepository, + ) +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/SimBouncerRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/SimBouncerRepositoryKosmos.kt new file mode 100644 index 000000000000..7af39dfa46b0 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/SimBouncerRepositoryKosmos.kt @@ -0,0 +1,24 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.bouncer.data.repository + +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture + +val Kosmos.fakeSimBouncerRepository by Fixture { FakeSimBouncerRepository() } + +val Kosmos.simBouncerRepository by Fixture<SimBouncerRepository> { fakeSimBouncerRepository } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/AlternateBouncerInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/AlternateBouncerInteractorKosmos.kt index 86a4509b4d62..c4fc30de3d06 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/AlternateBouncerInteractorKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/AlternateBouncerInteractorKosmos.kt @@ -25,7 +25,7 @@ import com.android.systemui.kosmos.testScope import com.android.systemui.plugins.statusbar.statusBarStateController import com.android.systemui.statusbar.policy.KeyguardStateControllerImpl import com.android.systemui.util.mockito.mock -import com.android.systemui.util.time.fakeSystemClock +import com.android.systemui.util.time.systemClock var Kosmos.alternateBouncerInteractor by Kosmos.Fixture { @@ -35,7 +35,7 @@ var Kosmos.alternateBouncerInteractor by bouncerRepository = keyguardBouncerRepository, fingerprintPropertyRepository = fingerprintPropertyRepository, biometricSettingsRepository = biometricSettingsRepository, - systemClock = fakeSystemClock, + systemClock = systemClock, keyguardUpdateMonitor = keyguardUpdateMonitor, scope = testScope.backgroundScope, ) diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/BouncerActionButtonInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/BouncerActionButtonInteractorKosmos.kt new file mode 100644 index 000000000000..5ced578ad974 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/BouncerActionButtonInteractorKosmos.kt @@ -0,0 +1,54 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.bouncer.domain.interactor + +import android.content.Intent +import android.content.applicationContext +import com.android.app.activityTaskManager +import com.android.internal.logging.metricsLogger +import com.android.internal.util.emergencyAffordanceManager +import com.android.systemui.authentication.domain.interactor.authenticationInteractor +import com.android.systemui.bouncer.data.repository.emergencyServicesRepository +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.kosmos.testDispatcher +import com.android.systemui.statusbar.pipeline.mobile.data.repository.mobileConnectionsRepository +import com.android.systemui.telephony.domain.interactor.telephonyInteractor +import com.android.systemui.user.domain.interactor.selectedUserInteractor +import com.android.systemui.util.mockito.mock +import com.android.telecom.telecomManager + +val Kosmos.bouncerActionButtonInteractor by Fixture { + BouncerActionButtonInteractor( + applicationContext = applicationContext, + backgroundDispatcher = testDispatcher, + repository = emergencyServicesRepository, + mobileConnectionsRepository = mobileConnectionsRepository, + telephonyInteractor = telephonyInteractor, + authenticationInteractor = authenticationInteractor, + selectedUserInteractor = selectedUserInteractor, + activityTaskManager = activityTaskManager, + telecomManager = telecomManager, + emergencyAffordanceManager = emergencyAffordanceManager, + emergencyDialerIntentFactory = + object : EmergencyDialerIntentFactory { + override fun invoke(): Intent = Intent() + }, + metricsLogger = metricsLogger, + dozeLogger = mock(), + ) +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorKosmos.kt new file mode 100644 index 000000000000..27803b22de29 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorKosmos.kt @@ -0,0 +1,40 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.bouncer.domain.interactor + +import android.content.applicationContext +import com.android.systemui.authentication.domain.interactor.authenticationInteractor +import com.android.systemui.bouncer.data.repository.bouncerRepository +import com.android.systemui.classifier.domain.interactor.falsingInteractor +import com.android.systemui.deviceentry.domain.interactor.deviceEntryFaceAuthInteractor +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.kosmos.testScope +import com.android.systemui.power.domain.interactor.powerInteractor + +val Kosmos.bouncerInteractor by Fixture { + BouncerInteractor( + applicationScope = testScope.backgroundScope, + applicationContext = applicationContext, + repository = bouncerRepository, + authenticationInteractor = authenticationInteractor, + deviceEntryFaceAuthInteractor = deviceEntryFaceAuthInteractor, + falsingInteractor = falsingInteractor, + powerInteractor = powerInteractor, + simBouncerInteractor = simBouncerInteractor, + ) +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/SimBouncerInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/SimBouncerInteractorKosmos.kt new file mode 100644 index 000000000000..8ed9f45bd1ba --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/SimBouncerInteractorKosmos.kt @@ -0,0 +1,44 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.bouncer.domain.interactor + +import android.content.Context +import android.content.applicationContext +import android.content.res.mainResources +import android.telephony.euicc.EuiccManager +import android.telephony.telephonyManager +import com.android.keyguard.keyguardUpdateMonitor +import com.android.systemui.bouncer.data.repository.simBouncerRepository +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.kosmos.testDispatcher +import com.android.systemui.kosmos.testScope +import com.android.systemui.statusbar.pipeline.mobile.data.repository.mobileConnectionsRepository + +val Kosmos.simBouncerInteractor by Fixture { + SimBouncerInteractor( + applicationContext = applicationContext, + backgroundDispatcher = testDispatcher, + applicationScope = testScope.backgroundScope, + repository = simBouncerRepository, + telephonyManager = telephonyManager, + resources = mainResources, + keyguardUpdateMonitor = keyguardUpdateMonitor, + euiccManager = applicationContext.getSystemService(Context.EUICC_SERVICE) as EuiccManager, + mobileConnectionsRepository = mobileConnectionsRepository, + ) +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelKosmos.kt new file mode 100644 index 000000000000..d91c5974815c --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelKosmos.kt @@ -0,0 +1,49 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.bouncer.ui.viewmodel + +import android.content.applicationContext +import com.android.systemui.authentication.domain.interactor.authenticationInteractor +import com.android.systemui.bouncer.domain.interactor.bouncerActionButtonInteractor +import com.android.systemui.bouncer.domain.interactor.bouncerInteractor +import com.android.systemui.bouncer.domain.interactor.simBouncerInteractor +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.kosmos.testDispatcher +import com.android.systemui.kosmos.testScope +import com.android.systemui.scene.shared.flag.sceneContainerFlags +import com.android.systemui.user.ui.viewmodel.userSwitcherViewModel +import com.android.systemui.util.mockito.mock +import com.android.systemui.util.time.systemClock + +val Kosmos.bouncerViewModel by Fixture { + BouncerViewModel( + applicationContext = applicationContext, + applicationScope = testScope.backgroundScope, + mainDispatcher = testDispatcher, + bouncerInteractor = bouncerInteractor, + simBouncerInteractor = simBouncerInteractor, + authenticationInteractor = authenticationInteractor, + flags = sceneContainerFlags, + selectedUser = userSwitcherViewModel.selectedUser, + users = userSwitcherViewModel.users, + userSwitcherMenu = userSwitcherViewModel.menu, + actionButton = bouncerActionButtonInteractor.actionButton, + clock = systemClock, + devicePolicyManager = mock(), + ) +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/classifier/domain/interactor/FalsingInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/classifier/domain/interactor/FalsingInteractorKosmos.kt new file mode 100644 index 000000000000..8fee5b2b305c --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/classifier/domain/interactor/FalsingInteractorKosmos.kt @@ -0,0 +1,27 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.classifier.domain.interactor + +import com.android.systemui.classifier.falsingCollector +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture + +val Kosmos.falsingInteractor by Fixture { + FalsingInteractor( + collector = falsingCollector, + ) +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/CommunalMediaRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/CommunalMediaRepositoryKosmos.kt index 7946446cb976..07681064a97d 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/CommunalMediaRepositoryKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/CommunalMediaRepositoryKosmos.kt @@ -18,6 +18,7 @@ package com.android.systemui.communal.data.repository import com.android.systemui.kosmos.Kosmos -var Kosmos.communalMediaRepository: CommunalMediaRepository by - Kosmos.Fixture { fakeCommunalMediaRepository } val Kosmos.fakeCommunalMediaRepository by Kosmos.Fixture { FakeCommunalMediaRepository() } + +val Kosmos.communalMediaRepository by + Kosmos.Fixture<CommunalMediaRepository> { fakeCommunalMediaRepository } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/CommunalRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/CommunalRepositoryKosmos.kt index be56d2b20ded..1f5af5c38491 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/CommunalRepositoryKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/CommunalRepositoryKosmos.kt @@ -17,6 +17,8 @@ package com.android.systemui.communal.data.repository import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture -var Kosmos.communalRepository: CommunalRepository by Kosmos.Fixture { fakeCommunalRepository } -val Kosmos.fakeCommunalRepository by Kosmos.Fixture { FakeCommunalRepository() } +val Kosmos.fakeCommunalRepository by Fixture { FakeCommunalRepository() } + +val Kosmos.communalRepository by Fixture<CommunalRepository> { fakeCommunalRepository } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryKosmos.kt index 5a17f2f857cf..c225e3c8b9dc 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryKosmos.kt @@ -17,9 +17,14 @@ package com.android.systemui.communal.data.repository import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture import com.android.systemui.kosmos.applicationCoroutineScope -var Kosmos.communalWidgetRepository: CommunalWidgetRepository by - Kosmos.Fixture { fakeCommunalWidgetRepository } -val Kosmos.fakeCommunalWidgetRepository by - Kosmos.Fixture { FakeCommunalWidgetRepository(applicationCoroutineScope) } +val Kosmos.fakeCommunalWidgetRepository by Fixture { + FakeCommunalWidgetRepository( + coroutineScope = applicationCoroutineScope, + ) +} + +val Kosmos.communalWidgetRepository by + Fixture<CommunalWidgetRepository> { fakeCommunalWidgetRepository } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/domain/interactor/CommunalInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/communal/domain/interactor/CommunalInteractorKosmos.kt new file mode 100644 index 000000000000..649b373258ef --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/communal/domain/interactor/CommunalInteractorKosmos.kt @@ -0,0 +1,38 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.communal.domain.interactor + +import com.android.systemui.communal.data.repository.communalMediaRepository +import com.android.systemui.communal.data.repository.communalRepository +import com.android.systemui.communal.data.repository.communalWidgetRepository +import com.android.systemui.keyguard.domain.interactor.keyguardInteractor +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.smartspace.data.repository.smartspaceRepository +import com.android.systemui.util.mockito.mock + +val Kosmos.communalInteractor by Fixture { + CommunalInteractor( + communalRepository = communalRepository, + widgetRepository = communalWidgetRepository, + mediaRepository = communalMediaRepository, + smartspaceRepository = smartspaceRepository, + appWidgetHost = mock(), + keyguardInteractor = keyguardInteractor, + editWidgetsActivityStarter = mock(), + ) +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryHapticsInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryHapticsInteractorKosmos.kt index 6bf527df4026..de58ae5e9452 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryHapticsInteractorKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryHapticsInteractorKosmos.kt @@ -24,7 +24,7 @@ import com.android.systemui.keyevent.domain.interactor.keyEventInteractor import com.android.systemui.keyguard.data.repository.biometricSettingsRepository import com.android.systemui.kosmos.Kosmos import com.android.systemui.power.domain.interactor.powerInteractor -import com.android.systemui.util.time.fakeSystemClock +import com.android.systemui.util.time.systemClock import kotlinx.coroutines.ExperimentalCoroutinesApi val Kosmos.deviceEntryHapticsInteractor by @@ -37,7 +37,7 @@ val Kosmos.deviceEntryHapticsInteractor by biometricSettingsRepository = biometricSettingsRepository, keyEventInteractor = keyEventInteractor, powerInteractor = powerInteractor, - systemClock = fakeSystemClock, + systemClock = systemClock, logger = biometricUnlockLogger, ) } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/flags/FeatureFlagsClassicKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/flags/FeatureFlagsClassicKosmos.kt index abadaf754c30..7b36a29ad607 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/flags/FeatureFlagsClassicKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/flags/FeatureFlagsClassicKosmos.kt @@ -30,7 +30,13 @@ var Kosmos.featureFlagsClassic: FeatureFlagsClassic by Kosmos.Fixture { fakeFeat * Fixture supplying a shared [FakeFeatureFlagsClassic] instance. Can be accessed in tests in order * to override flag values. */ -val Kosmos.fakeFeatureFlagsClassic by Kosmos.Fixture { FakeFeatureFlagsClassic() } +val Kosmos.fakeFeatureFlagsClassic by + Kosmos.Fixture { + FakeFeatureFlagsClassic().apply { + set(Flags.FULL_SCREEN_USER_SWITCHER, false) + set(Flags.NSSL_DEBUG_LINES, false) + } + } /** * Fixture supplying a real [FeatureFlagsClassicRelease] instance, for use by tests that want to diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/jank/InteractionJankMonitorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/jank/InteractionJankMonitorKosmos.kt new file mode 100644 index 000000000000..5c5016daf029 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/jank/InteractionJankMonitorKosmos.kt @@ -0,0 +1,24 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.jank + +import com.android.internal.jank.InteractionJankMonitor +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.util.mockito.mock + +val Kosmos.interactionJankMonitor by Fixture<InteractionJankMonitor> { mock() } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/plugins/statusbar/StatusBarStateControllerKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/plugins/statusbar/StatusBarStateControllerKosmos.kt index cac2646a58f2..73b7c50eb8be 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/plugins/statusbar/StatusBarStateControllerKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/plugins/statusbar/StatusBarStateControllerKosmos.kt @@ -16,7 +16,20 @@ package com.android.systemui.plugins.statusbar +import com.android.systemui.jank.interactionJankMonitor import com.android.systemui.kosmos.Kosmos +import com.android.systemui.qs.uiEventLogger +import com.android.systemui.shade.domain.interactor.shadeInteractor +import com.android.systemui.statusbar.StatusBarStateControllerImpl import com.android.systemui.util.mockito.mock -var Kosmos.statusBarStateController by Kosmos.Fixture { mock<StatusBarStateController>() } +var Kosmos.statusBarStateController by + Kosmos.Fixture { + StatusBarStateControllerImpl( + uiEventLogger, + interactionJankMonitor, + mock(), + ) { + shadeInteractor + } + } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneTestUtils.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneTestUtils.kt index 09ab6557c663..d314a25658e8 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneTestUtils.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneTestUtils.kt @@ -16,182 +16,108 @@ package com.android.systemui.scene -import android.app.ActivityTaskManager -import android.app.admin.DevicePolicyManager import android.content.Context -import android.content.Intent -import android.content.pm.UserInfo -import android.graphics.Bitmap -import android.graphics.drawable.BitmapDrawable -import android.telecom.TelecomManager -import android.telephony.PinResult -import android.telephony.PinResult.PIN_RESULT_TYPE_SUCCESS -import android.telephony.TelephonyManager -import android.telephony.euicc.EuiccManager -import com.android.internal.logging.MetricsLogger -import com.android.internal.util.EmergencyAffordanceManager +import android.content.applicationContext import com.android.systemui.SysuiTestCase -import com.android.systemui.authentication.data.repository.AuthenticationRepository -import com.android.systemui.authentication.data.repository.FakeAuthenticationRepository +import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository import com.android.systemui.authentication.domain.interactor.AuthenticationInteractor -import com.android.systemui.bouncer.data.repository.BouncerRepository -import com.android.systemui.bouncer.data.repository.EmergencyServicesRepository -import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository -import com.android.systemui.bouncer.data.repository.FakeSimBouncerRepository +import com.android.systemui.authentication.domain.interactor.authenticationInteractor +import com.android.systemui.bouncer.data.repository.bouncerRepository +import com.android.systemui.bouncer.data.repository.fakeSimBouncerRepository import com.android.systemui.bouncer.domain.interactor.BouncerActionButtonInteractor import com.android.systemui.bouncer.domain.interactor.BouncerInteractor -import com.android.systemui.bouncer.domain.interactor.EmergencyDialerIntentFactory -import com.android.systemui.bouncer.domain.interactor.SimBouncerInteractor +import com.android.systemui.bouncer.domain.interactor.bouncerActionButtonInteractor +import com.android.systemui.bouncer.domain.interactor.bouncerInteractor +import com.android.systemui.bouncer.domain.interactor.simBouncerInteractor import com.android.systemui.bouncer.ui.viewmodel.BouncerViewModel +import com.android.systemui.bouncer.ui.viewmodel.bouncerViewModel import com.android.systemui.classifier.FalsingCollector -import com.android.systemui.classifier.FalsingCollectorFake import com.android.systemui.classifier.domain.interactor.FalsingInteractor -import com.android.systemui.common.shared.model.Text -import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository -import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor -import com.android.systemui.communal.data.repository.FakeCommunalRepository +import com.android.systemui.classifier.domain.interactor.falsingInteractor +import com.android.systemui.classifier.falsingCollector +import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository +import com.android.systemui.common.ui.domain.interactor.configurationInteractor +import com.android.systemui.communal.data.repository.fakeCommunalRepository import com.android.systemui.communal.domain.interactor.CommunalInteractor -import com.android.systemui.communal.domain.interactor.CommunalInteractorFactory -import com.android.systemui.deviceentry.data.repository.DeviceEntryFaceAuthRepository -import com.android.systemui.deviceentry.data.repository.DeviceEntryRepository -import com.android.systemui.deviceentry.data.repository.FakeDeviceEntryRepository -import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFaceAuthInteractor +import com.android.systemui.communal.domain.interactor.communalInteractor +import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor -import com.android.systemui.doze.DozeLogger -import com.android.systemui.flags.FakeFeatureFlagsClassic -import com.android.systemui.flags.Flags -import com.android.systemui.keyguard.data.repository.FakeCommandQueue -import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFaceAuthRepository -import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository -import com.android.systemui.keyguard.data.repository.FakeTrustRepository -import com.android.systemui.keyguard.data.repository.KeyguardRepository -import com.android.systemui.keyguard.data.repository.TrustRepository +import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor +import com.android.systemui.flags.fakeFeatureFlagsClassic +import com.android.systemui.jank.interactionJankMonitor +import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor -import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel +import com.android.systemui.keyguard.domain.interactor.keyguardInteractor import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.testCase import com.android.systemui.kosmos.testDispatcher 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.data.repository.PowerRepository +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.power.domain.interactor.PowerInteractorFactory +import com.android.systemui.power.domain.interactor.powerInteractor import com.android.systemui.scene.data.repository.SceneContainerRepository +import com.android.systemui.scene.data.repository.sceneContainerRepository import com.android.systemui.scene.domain.interactor.SceneInteractor -import com.android.systemui.scene.shared.flag.FakeSceneContainerFlags +import com.android.systemui.scene.domain.interactor.sceneInteractor +import com.android.systemui.scene.shared.flag.fakeSceneContainerFlags import com.android.systemui.scene.shared.model.SceneContainerConfig import com.android.systemui.scene.shared.model.SceneKey -import com.android.systemui.shade.data.repository.FakeShadeRepository -import com.android.systemui.statusbar.notification.stack.data.repository.NotificationStackAppearanceRepository -import com.android.systemui.statusbar.notification.stack.domain.interactor.NotificationStackAppearanceInteractor import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel -import com.android.systemui.statusbar.phone.ScreenOffAnimationController -import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeMobileConnectionsRepository -import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepository -import com.android.systemui.telephony.data.repository.FakeTelephonyRepository -import com.android.systemui.telephony.data.repository.TelephonyRepository +import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationsPlaceholderViewModel +import com.android.systemui.statusbar.phone.screenOffAnimationController +import com.android.systemui.statusbar.pipeline.mobile.data.repository.fakeMobileConnectionsRepository +import com.android.systemui.telephony.data.repository.fakeTelephonyRepository import com.android.systemui.telephony.domain.interactor.TelephonyInteractor -import com.android.systemui.user.data.repository.FakeUserRepository +import com.android.systemui.telephony.domain.interactor.telephonyInteractor import com.android.systemui.user.domain.interactor.SelectedUserInteractor -import com.android.systemui.user.ui.viewmodel.UserActionViewModel -import com.android.systemui.user.ui.viewmodel.UserViewModel -import com.android.systemui.util.mockito.mock -import com.android.systemui.util.mockito.whenever -import com.android.systemui.util.time.SystemClock -import kotlinx.coroutines.CoroutineScope +import com.android.systemui.user.domain.interactor.selectedUserInteractor +import com.android.systemui.util.time.systemClock import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.flowOf -import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.test.currentTime -import org.mockito.ArgumentMatchers.anyInt -import org.mockito.ArgumentMatchers.anyString /** * Utilities for creating scene container framework related repositories, interactors, and * view-models for tests. */ @OptIn(ExperimentalCoroutinesApi::class) -class SceneTestUtils( - private val context: Context, -) { - constructor(test: SysuiTestCase) : this(context = test.context) +@Deprecated("Please use Kosmos instead.") +class SceneTestUtils { val kosmos = Kosmos() - val testDispatcher = kosmos.testDispatcher - val testScope = kosmos.testScope - val featureFlags = - FakeFeatureFlagsClassic().apply { - set(Flags.FULL_SCREEN_USER_SWITCHER, false) - set(Flags.NSSL_DEBUG_LINES, false) - } - val sceneContainerFlags = FakeSceneContainerFlags().apply { enabled = true } - val deviceEntryRepository: FakeDeviceEntryRepository by lazy { FakeDeviceEntryRepository() } - val authenticationRepository: FakeAuthenticationRepository by lazy { - FakeAuthenticationRepository( - currentTime = { testScope.currentTime }, - ) - } - val configurationRepository: FakeConfigurationRepository by lazy { - FakeConfigurationRepository() - } - val configurationInteractor: ConfigurationInteractor by lazy { - ConfigurationInteractor(configurationRepository) - } - private val emergencyServicesRepository: EmergencyServicesRepository by lazy { - EmergencyServicesRepository( - applicationScope = applicationScope(), - resources = context.resources, - configurationRepository = configurationRepository, - ) - } - val telephonyRepository: FakeTelephonyRepository by lazy { FakeTelephonyRepository() } - val bouncerRepository = BouncerRepository(featureFlags) - val communalRepository: FakeCommunalRepository by lazy { FakeCommunalRepository() } - val keyguardRepository: FakeKeyguardRepository by lazy { FakeKeyguardRepository() } - val powerRepository: FakePowerRepository by lazy { FakePowerRepository() } - val simBouncerRepository: FakeSimBouncerRepository by lazy { FakeSimBouncerRepository() } - - val clock: SystemClock = mock { - whenever(elapsedRealtime()).thenAnswer { testScope.currentTime } - } - val telephonyManager: TelephonyManager = mock { - whenever(createForSubscriptionId(anyInt())).thenReturn(this) - whenever(supplyIccLockPin(anyString())).thenReturn(PinResult(PIN_RESULT_TYPE_SUCCESS, 3)) - } - val devicePolicyManager: DevicePolicyManager = mock {} - val mobileConnectionsRepository: FakeMobileConnectionsRepository by lazy { - FakeMobileConnectionsRepository(mock(), mock()) - } - - val simBouncerInteractor = - SimBouncerInteractor( - applicationContext = context, - backgroundDispatcher = testDispatcher, - applicationScope = applicationScope(), - repository = simBouncerRepository, - telephonyManager = telephonyManager, - resources = context.resources, - keyguardUpdateMonitor = mock(), - euiccManager = context.getSystemService(Context.EUICC_SERVICE) as EuiccManager, - mobileConnectionsRepository = mobileConnectionsRepository, - ) - - val userRepository: FakeUserRepository by lazy { - FakeUserRepository().apply { - val users = listOf(UserInfo(/* id= */ 0, "name", /* flags= */ 0)) - setUserInfos(users) - runBlocking { setSelectedUserInfo(users.first()) } - } - } - - private val falsingCollectorFake: FalsingCollector by lazy { FalsingCollectorFake() } - private var falsingInteractor: FalsingInteractor? = null - private var powerInteractor: PowerInteractor? = null - fun fakeSceneContainerRepository( - containerConfig: SceneContainerConfig = fakeSceneContainerConfig(), - ): SceneContainerRepository { - return SceneContainerRepository(applicationScope(), containerConfig) + constructor( + context: Context, + ) { + kosmos.applicationContext = context + } + + constructor(testCase: SysuiTestCase) : this(context = testCase.context) { + kosmos.testCase = testCase + } + + val testDispatcher by lazy { kosmos.testDispatcher } + val testScope by lazy { kosmos.testScope } + val fakeFeatureFlags by lazy { kosmos.fakeFeatureFlagsClassic } + val fakeSceneContainerFlags by lazy { kosmos.fakeSceneContainerFlags } + val deviceEntryRepository by lazy { kosmos.fakeDeviceEntryRepository } + val authenticationRepository by lazy { kosmos.fakeAuthenticationRepository } + val configurationRepository by lazy { kosmos.fakeConfigurationRepository } + val configurationInteractor by lazy { kosmos.configurationInteractor } + val telephonyRepository by lazy { kosmos.fakeTelephonyRepository } + val bouncerRepository by lazy { kosmos.bouncerRepository } + val communalRepository by lazy { kosmos.fakeCommunalRepository } + val keyguardRepository by lazy { kosmos.fakeKeyguardRepository } + val powerRepository by lazy { kosmos.fakePowerRepository } + val simBouncerRepository by lazy { kosmos.fakeSimBouncerRepository } + val clock by lazy { kosmos.systemClock } + val mobileConnectionsRepository by lazy { kosmos.fakeMobileConnectionsRepository } + val simBouncerInteractor by lazy { kosmos.simBouncerInteractor } + val statusBarStateController by lazy { kosmos.statusBarStateController } + val interactionJankMonitor by lazy { kosmos.interactionJankMonitor } + val screenOffAnimationController by lazy { kosmos.screenOffAnimationController } + + fun fakeSceneContainerRepository(): SceneContainerRepository { + return kosmos.sceneContainerRepository } fun fakeSceneKeys(): List<SceneKey> { @@ -202,222 +128,59 @@ class SceneTestUtils( return kosmos.sceneContainerConfig } - @JvmOverloads - fun sceneInteractor( - repository: SceneContainerRepository = fakeSceneContainerRepository() - ): SceneInteractor { - return SceneInteractor( - applicationScope = applicationScope(), - repository = repository, - powerInteractor = powerInteractor(), - logger = mock(), - ) + fun sceneInteractor(): SceneInteractor { + return kosmos.sceneInteractor } - fun deviceEntryInteractor( - repository: DeviceEntryRepository = deviceEntryRepository, - authenticationInteractor: AuthenticationInteractor, - sceneInteractor: SceneInteractor, - faceAuthRepository: DeviceEntryFaceAuthRepository = FakeDeviceEntryFaceAuthRepository(), - trustRepository: TrustRepository = FakeTrustRepository(), - ): DeviceEntryInteractor { - return DeviceEntryInteractor( - applicationScope = applicationScope(), - repository = repository, - authenticationInteractor = authenticationInteractor, - sceneInteractor = sceneInteractor, - deviceEntryFaceAuthRepository = faceAuthRepository, - trustRepository = trustRepository, - flags = FakeSceneContainerFlags(enabled = true) - ) + fun deviceEntryInteractor(): DeviceEntryInteractor { + return kosmos.deviceEntryInteractor } - fun authenticationInteractor( - repository: AuthenticationRepository = authenticationRepository, - ): AuthenticationInteractor { - return AuthenticationInteractor( - applicationScope = applicationScope(), - repository = repository, - selectedUserInteractor = selectedUserInteractor(), - ) + fun authenticationInteractor(): AuthenticationInteractor { + return kosmos.authenticationInteractor } - fun keyguardInteractor( - repository: KeyguardRepository = keyguardRepository - ): KeyguardInteractor { - return KeyguardInteractor( - repository = repository, - commandQueue = FakeCommandQueue(), - sceneContainerFlags = sceneContainerFlags, - bouncerRepository = FakeKeyguardBouncerRepository(), - configurationInteractor = configurationInteractor, - shadeRepository = FakeShadeRepository(), - sceneInteractorProvider = { sceneInteractor() }, - powerInteractor = PowerInteractorFactory.create().powerInteractor, - ) + fun keyguardInteractor(): KeyguardInteractor { + return kosmos.keyguardInteractor } fun communalInteractor(): CommunalInteractor { - return CommunalInteractorFactory.create( - communalRepository = communalRepository, - ) - .communalInteractor + return kosmos.communalInteractor } - fun bouncerInteractor( - authenticationInteractor: AuthenticationInteractor, - deviceEntryFaceAuthInteractor: DeviceEntryFaceAuthInteractor = mock(), - ): BouncerInteractor { - return BouncerInteractor( - applicationScope = applicationScope(), - applicationContext = context, - repository = bouncerRepository, - authenticationInteractor = authenticationInteractor, - deviceEntryFaceAuthInteractor = deviceEntryFaceAuthInteractor, - falsingInteractor = falsingInteractor(), - powerInteractor = powerInteractor(), - simBouncerInteractor = simBouncerInteractor, - ) + fun bouncerInteractor(): BouncerInteractor { + return kosmos.bouncerInteractor } - fun keyguardRootViewModel(): KeyguardRootViewModel = mock() - fun notificationsPlaceholderViewModel(): NotificationsPlaceholderViewModel { - return NotificationsPlaceholderViewModel( - interactor = - NotificationStackAppearanceInteractor( - repository = NotificationStackAppearanceRepository(), - ), - flags = sceneContainerFlags, - featureFlags = featureFlags, - ) + return kosmos.notificationsPlaceholderViewModel } - fun bouncerViewModel( - bouncerInteractor: BouncerInteractor, - authenticationInteractor: AuthenticationInteractor, - actionButtonInteractor: BouncerActionButtonInteractor = bouncerActionButtonInteractor(), - users: List<UserViewModel> = createUsers(), - ): BouncerViewModel { - return BouncerViewModel( - applicationContext = context, - applicationScope = applicationScope(), - mainDispatcher = testDispatcher, - bouncerInteractor = bouncerInteractor, - simBouncerInteractor = simBouncerInteractor, - authenticationInteractor = authenticationInteractor, - flags = sceneContainerFlags, - selectedUser = flowOf(users.first { it.isSelectionMarkerVisible }), - users = flowOf(users), - userSwitcherMenu = flowOf(createMenuActions()), - actionButton = actionButtonInteractor.actionButton, - clock = clock, - devicePolicyManager = devicePolicyManager, - ) + fun bouncerViewModel(): BouncerViewModel { + return kosmos.bouncerViewModel } - fun telephonyInteractor( - repository: TelephonyRepository = telephonyRepository, - ): TelephonyInteractor { - return TelephonyInteractor(repository = repository) + fun telephonyInteractor(): TelephonyInteractor { + return kosmos.telephonyInteractor } - fun falsingInteractor(collector: FalsingCollector = falsingCollector()): FalsingInteractor { - return falsingInteractor ?: FalsingInteractor(collector).also { falsingInteractor = it } + fun falsingInteractor(): FalsingInteractor { + return kosmos.falsingInteractor } fun falsingCollector(): FalsingCollector { - return falsingCollectorFake - } - - fun powerInteractor( - repository: PowerRepository = powerRepository, - falsingCollector: FalsingCollector = falsingCollector(), - screenOffAnimationController: ScreenOffAnimationController = mock(), - statusBarStateController: StatusBarStateController = mock(), - ): PowerInteractor { - return powerInteractor - ?: PowerInteractor( - repository = repository, - falsingCollector = falsingCollector, - screenOffAnimationController = screenOffAnimationController, - statusBarStateController = statusBarStateController, - ) - .also { powerInteractor = it } - } - - private fun applicationScope(): CoroutineScope { - return testScope.backgroundScope - } - - private fun createUsers( - count: Int = 3, - selectedIndex: Int = 0, - ): List<UserViewModel> { - check(selectedIndex in 0 until count) - - return buildList { - repeat(count) { index -> - add( - UserViewModel( - viewKey = index, - name = Text.Loaded("name_$index"), - image = BitmapDrawable(Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888)), - isSelectionMarkerVisible = index == selectedIndex, - alpha = 1f, - onClicked = {}, - ) - ) - } - } + return kosmos.falsingCollector } - private fun createMenuActions(): List<UserActionViewModel> { - return buildList { - repeat(3) { index -> - add( - UserActionViewModel( - viewKey = index.toLong(), - iconResourceId = 0, - textResourceId = 0, - onClicked = {}, - ) - ) - } - } + fun powerInteractor(): PowerInteractor { + return kosmos.powerInteractor } fun selectedUserInteractor(): SelectedUserInteractor { - return SelectedUserInteractor(userRepository) + return kosmos.selectedUserInteractor } - fun bouncerActionButtonInteractor( - mobileConnectionsRepository: MobileConnectionsRepository = mock(), - activityTaskManager: ActivityTaskManager = mock(), - telecomManager: TelecomManager? = null, - emergencyAffordanceManager: EmergencyAffordanceManager = - EmergencyAffordanceManager(context), - emergencyDialerIntentFactory: EmergencyDialerIntentFactory = - object : EmergencyDialerIntentFactory { - override fun invoke(): Intent = Intent() - }, - metricsLogger: MetricsLogger = mock(), - dozeLogger: DozeLogger = mock(), - ): BouncerActionButtonInteractor { - return BouncerActionButtonInteractor( - applicationContext = context, - backgroundDispatcher = testDispatcher, - repository = emergencyServicesRepository, - mobileConnectionsRepository = mobileConnectionsRepository, - telephonyInteractor = telephonyInteractor(), - authenticationInteractor = authenticationInteractor(), - selectedUserInteractor = selectedUserInteractor(), - activityTaskManager = activityTaskManager, - telecomManager = telecomManager, - emergencyAffordanceManager = emergencyAffordanceManager, - emergencyDialerIntentFactory = emergencyDialerIntentFactory, - metricsLogger = metricsLogger, - dozeLogger = dozeLogger, - ) + fun bouncerActionButtonInteractor(): BouncerActionButtonInteractor { + return kosmos.bouncerActionButtonInteractor } } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryKosmos.kt index 7c4e160f6d05..e19941cfbaa0 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryKosmos.kt @@ -18,7 +18,7 @@ package com.android.systemui.scene.data.repository import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.applicationCoroutineScope -import com.android.systemui.scene.shared.model.sceneContainerConfig +import com.android.systemui.scene.sceneContainerConfig val Kosmos.sceneContainerRepository by Kosmos.Fixture { SceneContainerRepository(applicationCoroutineScope, sceneContainerConfig) } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/flag/SceneContainerFlagsKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/flag/SceneContainerFlagsKosmos.kt index c2cdbed21abe..979d8e76f3ee 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/flag/SceneContainerFlagsKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/flag/SceneContainerFlagsKosmos.kt @@ -18,4 +18,5 @@ package com.android.systemui.scene.shared.flag import com.android.systemui.kosmos.Kosmos -var Kosmos.sceneContainerFlags by Kosmos.Fixture { FakeSceneContainerFlags() } +var Kosmos.fakeSceneContainerFlags by Kosmos.Fixture { FakeSceneContainerFlags() } +val Kosmos.sceneContainerFlags by Kosmos.Fixture<SceneContainerFlags> { fakeSceneContainerFlags } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeSceneContainerConfigModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeSceneContainerConfigModule.kt index b4fc948cd2e0..8811b8db1cc0 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeSceneContainerConfigModule.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeSceneContainerConfigModule.kt @@ -30,6 +30,7 @@ data class FakeSceneContainerConfigModule( SceneKey.Lockscreen, SceneKey.Bouncer, SceneKey.Gone, + SceneKey.Communal, ), initialSceneKey = SceneKey.Lockscreen, ), diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/smartspace/data/repository/SmartspaceRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/smartspace/data/repository/SmartspaceRepositoryKosmos.kt index e671d4527be1..0e4c923a3078 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/smartspace/data/repository/SmartspaceRepositoryKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/smartspace/data/repository/SmartspaceRepositoryKosmos.kt @@ -17,6 +17,8 @@ package com.android.systemui.smartspace.data.repository import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture -var Kosmos.smartspaceRepository: SmartspaceRepository by Kosmos.Fixture { fakeSmartspaceRepository } -val Kosmos.fakeSmartspaceRepository by Kosmos.Fixture { FakeSmartspaceRepository() } +val Kosmos.fakeSmartspaceRepository by Fixture { FakeSmartspaceRepository() } + +val Kosmos.smartspaceRepository by Fixture<SmartspaceRepository> { fakeSmartspaceRepository } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/LockscreenShadeScrimTransitionControllerKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/LockscreenShadeScrimTransitionControllerKosmos.kt index 93a7adf620d2..83854033e89f 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/LockscreenShadeScrimTransitionControllerKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/LockscreenShadeScrimTransitionControllerKosmos.kt @@ -16,7 +16,7 @@ package com.android.systemui.statusbar -import android.content.testableContext +import android.content.applicationContext import com.android.systemui.dump.dumpManager import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture @@ -27,7 +27,7 @@ import com.android.systemui.statusbar.policy.splitShadeStateController val Kosmos.lockscreenShadeScrimTransitionController by Fixture { LockscreenShadeScrimTransitionController( scrimController = scrimController, - context = testableContext, + context = applicationContext, configurationController = configurationController, dumpManager = dumpManager, splitShadeStateController = splitShadeStateController, diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerKosmos.kt index 2752cc23f88b..1c6ce7987cd5 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerKosmos.kt @@ -16,7 +16,7 @@ package com.android.systemui.statusbar -import android.content.testableContext +import android.content.applicationContext import com.android.systemui.classifier.falsingCollector import com.android.systemui.classifier.falsingManager import com.android.systemui.dump.dumpManager @@ -47,7 +47,7 @@ val Kosmos.lockscreenShadeTransitionController by Fixture { scrimTransitionController = lockscreenShadeScrimTransitionController, keyguardTransitionControllerFactory = lockscreenShadeKeyguardTransitionControllerFactory, depthController = notificationShadeDepthController, - context = testableContext, + context = applicationContext, splitShadeOverScrollerFactory = splitShadeLockScreenOverScrollerFactory, singleShadeOverScrollerFactory = singleShadeLockScreenOverScrollerFactory, activityStarter = activityStarter, diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/AmbientStateKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/AmbientStateKosmos.kt index 83ac330ee3b4..7f6f698c2932 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/AmbientStateKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/AmbientStateKosmos.kt @@ -16,7 +16,7 @@ package com.android.systemui.statusbar.notification.stack -import android.content.testableContext +import android.content.applicationContext import com.android.systemui.dump.dumpManager import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture @@ -27,7 +27,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi @OptIn(ExperimentalCoroutinesApi::class) val Kosmos.ambientState by Fixture { AmbientState( - /*context=*/ testableContext, + /*context=*/ applicationContext, /*dumpManager=*/ dumpManager, /*sectionProvider=*/ stackScrollAlgorithmSectionProvider, /*bypassController=*/ stackScrollAlgorithmBypassController, diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileConnectionsRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileConnectionsRepositoryKosmos.kt new file mode 100644 index 000000000000..9d62ea5d2b0b --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileConnectionsRepositoryKosmos.kt @@ -0,0 +1,28 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.pipeline.mobile.data.repository + +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.util.mockito.mock + +val Kosmos.fakeMobileConnectionsRepository by Fixture { + FakeMobileConnectionsRepository(tableLogBuffer = mock()) +} + +val Kosmos.mobileConnectionsRepository by + Fixture<MobileConnectionsRepository> { fakeMobileConnectionsRepository } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModelKosmos.kt new file mode 100644 index 000000000000..0b9f897a6204 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModelKosmos.kt @@ -0,0 +1,29 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.user.ui.viewmodel + +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.user.domain.interactor.guestUserInteractor +import com.android.systemui.user.domain.interactor.userSwitcherInteractor + +val Kosmos.userSwitcherViewModel by Fixture { + UserSwitcherViewModel( + userSwitcherInteractor = userSwitcherInteractor, + guestUserInteractor = guestUserInteractor, + ) +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/util/time/FakeSystemClockKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/util/time/FakeSystemClockKosmos.kt index 914e65427f41..f3a8b14abab8 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/util/time/FakeSystemClockKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/util/time/FakeSystemClockKosmos.kt @@ -17,5 +17,19 @@ package com.android.systemui.util.time import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.testScope +import com.android.systemui.util.mockito.mock +import com.android.systemui.util.mockito.whenever +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.currentTime -var Kosmos.fakeSystemClock by Kosmos.Fixture { FakeSystemClock() } +@OptIn(ExperimentalCoroutinesApi::class) +val Kosmos.systemClock by + Kosmos.Fixture<SystemClock> { + mock { + whenever(elapsedRealtime()).thenAnswer { testScope.currentTime } + whenever(uptimeMillis()).thenAnswer { testScope.currentTime } + } + } + +val Kosmos.fakeSystemClock by Kosmos.Fixture { FakeSystemClock() } diff --git a/packages/SystemUI/tests/utils/src/com/android/telecom/TelecomManagerKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/telecom/TelecomManagerKosmos.kt new file mode 100644 index 000000000000..4e0c0883eb02 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/telecom/TelecomManagerKosmos.kt @@ -0,0 +1,24 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.telecom + +import android.telecom.TelecomManager +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.util.mockito.mock + +var Kosmos.telecomManager by Fixture<TelecomManager?> { mock() } |