[flexiglass] Don't dim screen or go to sleep while typing a password.
Fix: 306518856
Test: Manually verified by typing a long password, waiting ~4 seconds
after each character typed, and observing that the screen is not
dimmed. The same verification was done for PIN bouncer as well.
Test: Added new unit tests.
Test: Existing unit tests still pass.
Flag: ACONFIG com.android.systemui.scene_container DEVELOPMENT
Change-Id: Icabae81246217741a9fc4e5b409c4c6c55f49eff
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/PasswordBouncer.kt b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/PasswordBouncer.kt
index df22a70..53e437a 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/PasswordBouncer.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/PasswordBouncer.kt
@@ -66,7 +66,7 @@
LaunchedEffect(Unit) {
// When the UI comes up, request focus on the TextField to bring up the software keyboard.
focusRequester.requestFocus()
- // Also, report that the UI is shown to let the view-model runs some logic.
+ // Also, report that the UI is shown to let the view-model run some logic.
viewModel.onShown()
}
diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt
index 4e1cddc..31ad14d 100644
--- a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt
@@ -26,6 +26,7 @@
import com.android.systemui.classifier.domain.interactor.FalsingInteractor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.res.R
import com.android.systemui.scene.shared.flag.SceneContainerFlags
import com.android.systemui.util.kotlin.pairwise
@@ -52,6 +53,7 @@
private val authenticationInteractor: AuthenticationInteractor,
flags: SceneContainerFlags,
private val falsingInteractor: FalsingInteractor,
+ private val powerInteractor: PowerInteractor,
) {
/** The user-facing message to show in the bouncer. */
@@ -124,6 +126,7 @@
* user's pocket or by the user's face while holding their device up to their ear.
*/
fun onIntentionalUserInput() {
+ powerInteractor.onUserTouch()
falsingInteractor.updateFalseConfidence(FalsingClassifier.Result.passed(0.6))
}
diff --git a/packages/SystemUI/src/com/android/systemui/power/domain/interactor/PowerInteractor.kt b/packages/SystemUI/src/com/android/systemui/power/domain/interactor/PowerInteractor.kt
index dbd62fe..d9e3e55 100644
--- a/packages/SystemUI/src/com/android/systemui/power/domain/interactor/PowerInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/power/domain/interactor/PowerInteractor.kt
@@ -27,10 +27,10 @@
import com.android.systemui.power.shared.model.WakeSleepReason
import com.android.systemui.power.shared.model.WakefulnessState
import com.android.systemui.statusbar.phone.ScreenOffAnimationController
+import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
-import javax.inject.Inject
/** Hosts business logic for interacting with the power system. */
@SysUISingleton
@@ -59,18 +59,28 @@
* Whether we're awake (screen is on and responding to user touch) or asleep (screen is off, or
* on AOD).
*/
- val isAwake = repository.wakefulness
+ val isAwake =
+ repository.wakefulness
.map { it.isAwake() }
.distinctUntilChanged(checkEquivalentUnlessEmitDuplicatesUnderTest)
- /**
- * Helper flow in case "isAsleep" reads better than "!isAwake".
- */
+ /** Helper flow in case "isAsleep" reads better than "!isAwake". */
val isAsleep = isAwake.map { !it }
val screenPowerState = repository.screenPowerState
/**
+ * Notifies the power interactor that a user touch happened.
+ *
+ * @param noChangeLights If true, does not cause the keyboard backlight to turn on because of
+ * this event. This is set when the power key is pressed. We want the device to stay on while
+ * the button is down, but we're about to turn off the screen so we don't want the keyboard
+ * backlight to turn on again. Otherwise the lights flash on and then off and it looks weird.
+ */
+ fun onUserTouch(noChangeLights: Boolean = false) =
+ repository.userTouch(noChangeLights = noChangeLights)
+
+ /**
* Wakes up the device if the device was dozing.
*
* @param why a string explaining why we're waking the device for debugging purposes. Should be
@@ -92,9 +102,7 @@
*/
fun wakeUpForFullScreenIntent() {
if (repository.wakefulness.value.isAsleep() || statusBarStateController.isDozing) {
- repository.wakeUp(
- why = FSI_WAKE_WHY,
- wakeReason = PowerManager.WAKE_REASON_APPLICATION)
+ repository.wakeUp(why = FSI_WAKE_WHY, wakeReason = PowerManager.WAKE_REASON_APPLICATION)
}
}
@@ -120,8 +128,8 @@
* directly.
*/
fun onStartedWakingUp(
- @PowerManager.WakeReason reason: Int,
- powerButtonLaunchGestureTriggeredOnWakeUp: Boolean,
+ @PowerManager.WakeReason reason: Int,
+ powerButtonLaunchGestureTriggeredOnWakeUp: Boolean,
) {
// If the launch gesture was previously detected, either via onCameraLaunchGestureDetected
// or onFinishedGoingToSleep(), carry that state forward. It will be reset by the next
@@ -210,14 +218,14 @@
* reset that flag and then return false.
*/
private val checkEquivalentUnlessEmitDuplicatesUnderTest: (Boolean, Boolean) -> Boolean =
- { old, new ->
- if (emitDuplicateWakefulnessValue) {
- emitDuplicateWakefulnessValue = false
- false
- } else {
- old == new
- }
+ { old, new ->
+ if (emitDuplicateWakefulnessValue) {
+ emitDuplicateWakefulnessValue = false
+ false
+ } else {
+ old == new
}
+ }
/**
* Helper method for tests to simulate the device waking up.
@@ -232,14 +240,14 @@
*/
@JvmOverloads
fun PowerInteractor.setAwakeForTest(
- @PowerManager.WakeReason reason: Int = PowerManager.WAKE_REASON_UNKNOWN,
- forceEmit: Boolean = false
+ @PowerManager.WakeReason reason: Int = PowerManager.WAKE_REASON_UNKNOWN,
+ forceEmit: Boolean = false
) {
emitDuplicateWakefulnessValue = forceEmit
this.onStartedWakingUp(
- reason = reason,
- powerButtonLaunchGestureTriggeredOnWakeUp = false,
+ reason = reason,
+ powerButtonLaunchGestureTriggeredOnWakeUp = false,
)
this.onFinishedWakingUp()
}
@@ -258,15 +266,14 @@
*/
@JvmOverloads
fun PowerInteractor.setAsleepForTest(
- @PowerManager.GoToSleepReason sleepReason: Int =
- PowerManager.GO_TO_SLEEP_REASON_MIN,
- forceEmit: Boolean = false,
+ @PowerManager.GoToSleepReason sleepReason: Int = PowerManager.GO_TO_SLEEP_REASON_MIN,
+ forceEmit: Boolean = false,
) {
emitDuplicateWakefulnessValue = forceEmit
this.onStartedGoingToSleep(reason = sleepReason)
this.onFinishedGoingToSleep(
- powerButtonLaunchGestureTriggeredDuringSleep = false,
+ powerButtonLaunchGestureTriggeredDuringSleep = false,
)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt
index b144003..0abde4d 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt
@@ -18,7 +18,7 @@
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
-import com.android.systemui.power.data.repository.PowerRepository
+import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.scene.data.repository.SceneContainerRepository
import com.android.systemui.scene.shared.logger.SceneLogger
import com.android.systemui.scene.shared.model.ObservableTransitionState
@@ -48,7 +48,7 @@
constructor(
@Application private val applicationScope: CoroutineScope,
private val repository: SceneContainerRepository,
- private val powerRepository: PowerRepository,
+ private val powerInteractor: PowerInteractor,
private val logger: SceneLogger,
) {
@@ -202,7 +202,7 @@
/** Handles a user input event. */
fun onUserInput() {
- powerRepository.userTouch()
+ powerInteractor.onUserTouch()
}
/**
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt
index 6ead0e9..296f966 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt
@@ -291,6 +291,14 @@
assertThat(imeHiddenEvent).isNotNull()
}
+ @Test
+ fun intentionalUserInputEvent_registersTouchEvent() =
+ testScope.runTest {
+ assertThat(utils.powerRepository.userTouchRegistered).isFalse()
+ underTest.onIntentionalUserInput()
+ assertThat(utils.powerRepository.userTouchRegistered).isTrue()
+ }
+
private fun assertTryAgainMessage(
message: String?,
time: Int,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
index 3f032a4..7f4bbbe 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
@@ -341,6 +341,7 @@
@Test
fun userInput() =
testScope.runTest {
+ assertThat(utils.powerRepository.userTouchRegistered).isFalse()
underTest.onUserInput()
assertThat(utils.powerRepository.userTouchRegistered).isTrue()
}
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 e6cd17f..6aaa0a1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
@@ -51,7 +51,6 @@
import com.android.systemui.SysuiTestCase;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository;
-import com.android.systemui.classifier.FalsingCollectorFake;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository;
import com.android.systemui.dump.DumpManager;
@@ -68,7 +67,6 @@
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor;
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
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.res.R;
import com.android.systemui.scene.FakeWindowRootViewComponent;
@@ -128,22 +126,22 @@
@Mock private KeyguardViewMediator mKeyguardViewMediator;
@Mock private KeyguardBypassController mKeyguardBypassController;
@Mock private SysuiColorExtractor mColorExtractor;
- @Mock ColorExtractor.GradientColors mGradientColors;
+ @Mock private ColorExtractor.GradientColors mGradientColors;
@Mock private DumpManager mDumpManager;
@Mock private KeyguardSecurityModel mKeyguardSecurityModel;
@Mock private KeyguardStateController mKeyguardStateController;
@Mock private ScreenOffAnimationController mScreenOffAnimationController;
@Mock private AuthController mAuthController;
- @Mock private ShadeExpansionStateManager mShadeExpansionStateManager;
@Mock private ShadeWindowLogger mShadeWindowLogger;
@Mock private SelectedUserInteractor mSelectedUserInteractor;
@Mock private UserTracker mUserTracker;
@Captor private ArgumentCaptor<WindowManager.LayoutParams> mLayoutParameters;
@Captor private ArgumentCaptor<StatusBarStateController.StateListener> mStateListener;
+
private final Executor mMainExecutor = MoreExecutors.directExecutor();
private final Executor mBackgroundExecutor = MoreExecutors.directExecutor();
- private SceneTestUtils mUtils = new SceneTestUtils(this);
- private TestScope mTestScope = mUtils.getTestScope();
+ private final SceneTestUtils mUtils = new SceneTestUtils(this);
+ private final TestScope mTestScope = mUtils.getTestScope();
private ShadeInteractor mShadeInteractor;
private NotificationShadeWindowControllerImpl mNotificationShadeWindowController;
@@ -167,11 +165,10 @@
FakeKeyguardRepository keyguardRepository = new FakeKeyguardRepository();
FakeFeatureFlagsClassic featureFlags = new FakeFeatureFlagsClassic();
FakeShadeRepository shadeRepository = new FakeShadeRepository();
- FakePowerRepository powerRepository = new FakePowerRepository();
- PowerInteractor powerInteractor = new PowerInteractor(
- powerRepository,
- new FalsingCollectorFake(),
+ PowerInteractor powerInteractor = mUtils.powerInteractor(
+ mUtils.getPowerRepository(),
+ mUtils.falsingCollector(),
mScreenOffAnimationController,
mStatusBarStateController);
@@ -180,7 +177,7 @@
new SceneContainerRepository(
mTestScope.getBackgroundScope(),
mUtils.fakeSceneContainerConfig()),
- powerRepository,
+ powerInteractor,
mock(SceneLogger.class));
FakeConfigurationRepository configurationRepository = new FakeConfigurationRepository();
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 6d04887..52643cd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java
@@ -37,7 +37,6 @@
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository;
-import com.android.systemui.classifier.FalsingCollectorFake;
import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FakeFeatureFlagsClassic;
@@ -58,7 +57,6 @@
import com.android.systemui.media.controls.ui.MediaHierarchyManager;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.QS;
-import com.android.systemui.power.data.repository.FakePowerRepository;
import com.android.systemui.power.domain.interactor.PowerInteractor;
import com.android.systemui.qs.QSFragmentLegacy;
import com.android.systemui.res.R;
@@ -169,6 +167,7 @@
@Mock protected CastController mCastController;
@Mock protected UserSwitcherInteractor mUserSwitcherInteractor;
@Mock protected SelectedUserInteractor mSelectedUserInteractor;
+
protected FakeDisableFlagsRepository mDisableFlagsRepository =
new FakeDisableFlagsRepository();
protected FakeKeyguardRepository mKeyguardRepository = new FakeKeyguardRepository();
@@ -198,12 +197,11 @@
new FakeDeviceProvisioningRepository();
deviceProvisioningRepository.setDeviceProvisioned(true);
FakeFeatureFlagsClassic featureFlags = new FakeFeatureFlagsClassic();
- FakePowerRepository powerRepository = new FakePowerRepository();
FakeConfigurationRepository configurationRepository = new FakeConfigurationRepository();
- PowerInteractor powerInteractor = new PowerInteractor(
- powerRepository,
- new FalsingCollectorFake(),
+ PowerInteractor powerInteractor = mUtils.powerInteractor(
+ mUtils.getPowerRepository(),
+ mUtils.falsingCollector(),
mock(ScreenOffAnimationController.class),
mStatusBarStateController);
@@ -212,7 +210,7 @@
new SceneContainerRepository(
mTestScope.getBackgroundScope(),
mUtils.fakeSceneContainerConfig()),
- powerRepository,
+ powerInteractor,
mock(SceneLogger.class));
FakeSceneContainerFlags sceneContainerFlags = new FakeSceneContainerFlags();
@@ -251,7 +249,7 @@
new InWindowLauncherUnlockAnimationRepository(),
mTestScope.getBackgroundScope(),
keyguardTransitionInteractor,
- () -> new FakeKeyguardSurfaceBehindRepository(),
+ FakeKeyguardSurfaceBehindRepository::new,
mock(ActivityManagerWrapper.class)
)
);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java
index 1e31977..d1423e1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java
@@ -163,7 +163,6 @@
@Mock
private InteractionJankMonitor mJankMonitor;
private FakePowerRepository mPowerRepository;
- private PowerInteractor mPowerInteractor;
@Mock
private UserTracker mUserTracker;
private final FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());
@@ -214,7 +213,7 @@
UserHandle.of(ActivityManager.getCurrentUser()));
mPowerRepository = new FakePowerRepository();
- mPowerInteractor = PowerInteractorFactory.create(
+ PowerInteractor mPowerInteractor = PowerInteractorFactory.create(
mPowerRepository,
new FalsingCollectorFake(),
mScreenOffAnimationController,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
index a580600..102c3fc 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
@@ -93,7 +93,6 @@
import com.android.systemui.SysuiTestCase;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository;
-import com.android.systemui.classifier.FalsingCollectorFake;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository;
import com.android.systemui.dump.DumpManager;
@@ -112,7 +111,6 @@
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
import com.android.systemui.model.SysUiState;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.power.data.repository.FakePowerRepository;
import com.android.systemui.power.domain.interactor.PowerInteractor;
import com.android.systemui.scene.FakeWindowRootViewComponent;
import com.android.systemui.scene.SceneTestUtils;
@@ -125,7 +123,6 @@
import com.android.systemui.shade.NotificationShadeWindowControllerImpl;
import com.android.systemui.shade.NotificationShadeWindowView;
import com.android.systemui.shade.ShadeController;
-import com.android.systemui.shade.ShadeExpansionStateManager;
import com.android.systemui.shade.ShadeWindowLogger;
import com.android.systemui.shade.data.repository.FakeShadeRepository;
import com.android.systemui.shade.domain.interactor.ShadeInteractor;
@@ -249,8 +246,6 @@
private NotificationShadeWindowView mNotificationShadeWindowView;
@Mock
private AuthController mAuthController;
- @Mock
- private ShadeExpansionStateManager mShadeExpansionStateManager;
private SysUiState mSysUiState;
private boolean mSysUiStateBubblesExpanded;
@@ -340,8 +335,8 @@
@Mock
private Icon mAppBubbleIcon;
- private SceneTestUtils mUtils = new SceneTestUtils(this);
- private TestScope mTestScope = mUtils.getTestScope();
+ private final SceneTestUtils mUtils = new SceneTestUtils(this);
+ private final TestScope mTestScope = mUtils.getTestScope();
private ShadeInteractor mShadeInteractor;
private ShellTaskOrganizer mShellTaskOrganizer;
private TaskViewTransitions mTaskViewTransitions;
@@ -352,7 +347,7 @@
private TestableLooper mTestableLooper;
- private FakeDisplayTracker mDisplayTracker = new FakeDisplayTracker(mContext);
+ private final FakeDisplayTracker mDisplayTracker = new FakeDisplayTracker(mContext);
private final FakeFeatureFlags mFeatureFlags = new FakeFeatureFlags();
private UserHandle mUser0;
@@ -388,12 +383,11 @@
FakeKeyguardRepository keyguardRepository = new FakeKeyguardRepository();
FakeFeatureFlagsClassic featureFlags = new FakeFeatureFlagsClassic();
FakeShadeRepository shadeRepository = new FakeShadeRepository();
- FakePowerRepository powerRepository = new FakePowerRepository();
FakeConfigurationRepository configurationRepository = new FakeConfigurationRepository();
PowerInteractor powerInteractor = new PowerInteractor(
- powerRepository,
- new FalsingCollectorFake(),
+ mUtils.getPowerRepository(),
+ mUtils.falsingCollector(),
mock(ScreenOffAnimationController.class),
mStatusBarStateController);
@@ -402,7 +396,7 @@
new SceneContainerRepository(
mTestScope.getBackgroundScope(),
mUtils.fakeSceneContainerConfig()),
- powerRepository,
+ powerInteractor,
mock(SceneLogger.class));
FakeSceneContainerFlags sceneContainerFlags = new FakeSceneContainerFlags();
@@ -441,7 +435,7 @@
new InWindowLauncherUnlockAnimationRepository(),
mTestScope.getBackgroundScope(),
keyguardTransitionInteractor,
- () -> new FakeKeyguardSurfaceBehindRepository(),
+ FakeKeyguardSurfaceBehindRepository::new,
mock(ActivityManagerWrapper.class)
)
);
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 72cc08f..c8869aa 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
@@ -61,7 +61,10 @@
import com.android.systemui.kosmos.Kosmos
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.power.domain.interactor.PowerInteractor
import com.android.systemui.power.domain.interactor.PowerInteractorFactory
import com.android.systemui.scene.data.repository.SceneContainerRepository
import com.android.systemui.scene.domain.interactor.SceneInteractor
@@ -69,6 +72,7 @@
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.phone.ScreenOffAnimationController
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
@@ -137,6 +141,7 @@
private val falsingCollectorFake: FalsingCollector by lazy { FalsingCollectorFake() }
private var falsingInteractor: FalsingInteractor? = null
+ private var powerInteractor: PowerInteractor? = null
fun fakeSceneContainerRepository(
containerConfig: SceneContainerConfig = fakeSceneContainerConfig(),
@@ -159,7 +164,7 @@
return SceneInteractor(
applicationScope = applicationScope(),
repository = repository,
- powerRepository = powerRepository,
+ powerInteractor = powerInteractor(),
logger = mock(),
)
}
@@ -227,6 +232,7 @@
authenticationInteractor = authenticationInteractor,
flags = sceneContainerFlags,
falsingInteractor = falsingInteractor(),
+ powerInteractor = powerInteractor()
)
}
@@ -264,6 +270,22 @@
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
}