diff options
| author | 2023-07-31 16:19:25 +0000 | |
|---|---|---|
| committer | 2023-07-31 16:19:25 +0000 | |
| commit | 5b0bec26d4123e8b90f359cecc6fd1540039e94b (patch) | |
| tree | 9160208756c8026b0f4fb5f46741a7c8e5dc4507 | |
| parent | 88c874299e6e303c814b246a802b0b39d9396a71 (diff) | |
| parent | a3933a7d147ec196ef897d9b3ccb9147be232dbb (diff) | |
Merge "Begin disconnecting KeyguardStatusViewController from NPVC" into udc-qpr-dev
18 files changed, 318 insertions, 192 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java index a04d13b93ddd..fe6bbc16ef9f 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java @@ -20,6 +20,7 @@ import static androidx.constraintlayout.widget.ConstraintSet.END; import static androidx.constraintlayout.widget.ConstraintSet.PARENT_ID; import static com.android.internal.jank.InteractionJankMonitor.CUJ_LOCKSCREEN_CLOCK_MOVE_ANIMATION; +import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow; import android.animation.Animator; import android.animation.ValueAnimator; @@ -51,6 +52,10 @@ import com.android.systemui.Dumpable; import com.android.systemui.R; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.flags.Flags; +import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor; +import com.android.systemui.keyguard.shared.model.ScreenModel; +import com.android.systemui.keyguard.shared.model.ScreenState; import com.android.systemui.plugins.ClockController; import com.android.systemui.statusbar.notification.AnimatableProperty; import com.android.systemui.statusbar.notification.PropertyAnimator; @@ -62,6 +67,9 @@ import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.ViewController; +import kotlin.coroutines.CoroutineContext; +import kotlin.coroutines.EmptyCoroutineContext; + import java.io.PrintWriter; import javax.inject.Inject; @@ -91,6 +99,7 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV private final FeatureFlags mFeatureFlags; private final InteractionJankMonitor mInteractionJankMonitor; private final Rect mClipBounds = new Rect(); + private final KeyguardInteractor mKeyguardInteractor; private Boolean mStatusViewCentered = true; @@ -122,6 +131,7 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV KeyguardLogger logger, FeatureFlags featureFlags, InteractionJankMonitor interactionJankMonitor, + KeyguardInteractor keyguardInteractor, DumpManager dumpManager) { super(keyguardStatusView); mKeyguardSliceViewController = keyguardSliceViewController; @@ -134,12 +144,34 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV mInteractionJankMonitor = interactionJankMonitor; mFeatureFlags = featureFlags; mDumpManager = dumpManager; + mKeyguardInteractor = keyguardInteractor; } @Override public void onInit() { mKeyguardClockSwitchController.init(); mDumpManager.registerDumpable(this); + if (mFeatureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) { + startCoroutines(EmptyCoroutineContext.INSTANCE); + } + } + + void startCoroutines(CoroutineContext context) { + collectFlow(mView, mKeyguardInteractor.getDozeTimeTick(), + (Long millis) -> { + dozeTimeTick(); + }, context); + + collectFlow(mView, mKeyguardInteractor.getScreenModel(), + (ScreenModel model) -> { + if (model.getState() == ScreenState.SCREEN_TURNING_ON) { + dozeTimeTick(); + } + }, context); + } + + public KeyguardStatusView getView() { + return mView; } @Override diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt index 9ee990243b96..f1b344199516 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt @@ -47,16 +47,15 @@ import com.android.systemui.statusbar.phone.BiometricUnlockController.WakeAndUnl import com.android.systemui.statusbar.phone.DozeParameters import com.android.systemui.statusbar.phone.KeyguardBypassController import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.util.time.SystemClock import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flowOn @@ -177,7 +176,7 @@ interface KeyguardRepository { val keyguardRootViewVisibility: Flow<KeyguardRootViewVisibilityState> /** Receive an event for doze time tick */ - val dozeTimeTick: Flow<Unit> + val dozeTimeTick: Flow<Long> /** * Returns `true` if the keyguard is showing; `false` otherwise. @@ -248,6 +247,7 @@ constructor( private val dreamOverlayCallbackController: DreamOverlayCallbackController, @Main private val mainDispatcher: CoroutineDispatcher, @Application private val scope: CoroutineScope, + private val systemClock: SystemClock, ) : KeyguardRepository { private val _animateBottomAreaDozingTransitions = MutableStateFlow(false) override val animateBottomAreaDozingTransitions = @@ -398,11 +398,11 @@ constructor( _isDozing.value = isDozing } - private val _dozeTimeTick = MutableSharedFlow<Unit>() - override val dozeTimeTick = _dozeTimeTick.asSharedFlow() + private val _dozeTimeTick = MutableStateFlow<Long>(0) + override val dozeTimeTick = _dozeTimeTick.asStateFlow() override fun dozeTimeTick() { - _dozeTimeTick.tryEmit(Unit) + _dozeTimeTick.value = systemClock.uptimeMillis() } private val _lastDozeTapToWakePosition = MutableStateFlow<Point?>(null) diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/BurnInInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/BurnInInteractor.kt index 252982fd019f..ac936b10fe43 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/BurnInInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/BurnInInteractor.kt @@ -24,14 +24,11 @@ import com.android.systemui.common.ui.data.repository.ConfigurationRepository import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.doze.util.BurnInHelperWrapper -import com.android.systemui.util.time.SystemClock import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.stateIn @@ -46,24 +43,17 @@ constructor( private val burnInHelperWrapper: BurnInHelperWrapper, @Application private val scope: CoroutineScope, private val configurationRepository: ConfigurationRepository, - private val systemClock: SystemClock, + private val keyguardInteractor: KeyguardInteractor, ) { - private val _dozeTimeTick = MutableStateFlow<Long>(0) - val dozeTimeTick: StateFlow<Long> = _dozeTimeTick.asStateFlow() - val udfpsBurnInXOffset: StateFlow<Int> = burnInOffsetDefinedInPixels(R.dimen.udfps_burn_in_offset_x, isXAxis = true) val udfpsBurnInYOffset: StateFlow<Int> = burnInOffsetDefinedInPixels(R.dimen.udfps_burn_in_offset_y, isXAxis = false) val udfpsBurnInProgress: StateFlow<Float> = - dozeTimeTick + keyguardInteractor.dozeTimeTick .mapLatest { burnInHelperWrapper.burnInProgressOffset() } .stateIn(scope, SharingStarted.Lazily, burnInHelperWrapper.burnInProgressOffset()) - fun dozeTimeTick() { - _dozeTimeTick.value = systemClock.uptimeMillis() - } - /** * Use for max burn-in offsets that are NOT specified in pixels. This flow will recalculate the * max burn-in offset on any configuration changes. If the max burn-in offset is specified in @@ -77,7 +67,9 @@ constructor( .flatMapLatest { val maxBurnInOffsetPixels = context.resources.getDimensionPixelSize(maxBurnInOffsetResourceId) - dozeTimeTick.mapLatest { calculateOffset(maxBurnInOffsetPixels, isXAxis) } + keyguardInteractor.dozeTimeTick.mapLatest { + calculateOffset(maxBurnInOffsetPixels, isXAxis) + } } .stateIn( scope, @@ -102,7 +94,9 @@ constructor( .flatMapLatest { scale -> val maxBurnInOffsetPixels = context.resources.getDimensionPixelSize(maxBurnInOffsetResourceId) - dozeTimeTick.mapLatest { calculateOffset(maxBurnInOffsetPixels, isXAxis, scale) } + keyguardInteractor.dozeTimeTick.mapLatest { + calculateOffset(maxBurnInOffsetPixels, isXAxis, scale) + } } .stateIn( scope, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt index cc159168009e..864c4dbb1941 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt @@ -34,6 +34,7 @@ import com.android.systemui.keyguard.shared.model.DozeStateModel import com.android.systemui.keyguard.shared.model.DozeStateModel.Companion.isDozeOff import com.android.systemui.keyguard.shared.model.DozeTransitionModel import com.android.systemui.keyguard.shared.model.KeyguardRootViewVisibilityState +import com.android.systemui.keyguard.shared.model.ScreenModel import com.android.systemui.keyguard.shared.model.StatusBarState import com.android.systemui.keyguard.shared.model.WakefulnessModel import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel @@ -87,7 +88,7 @@ constructor( /** Whether the system is in doze mode. */ val isDozing: Flow<Boolean> = repository.isDozing /** Receive an event for doze time tick */ - val dozeTimeTick: Flow<Unit> = repository.dozeTimeTick + val dozeTimeTick: Flow<Long> = repository.dozeTimeTick /** Whether Always-on Display mode is available. */ val isAodAvailable: Flow<Boolean> = repository.isAodAvailable /** Doze transition information. */ @@ -122,6 +123,9 @@ constructor( /** The device wake/sleep state */ val wakefulnessModel: StateFlow<WakefulnessModel> = repository.wakefulness + /** The device screen state */ + val screenModel: StateFlow<ScreenModel> = repository.screenModel + /** * Dozing and dreaming have overlapping events. If the doze state remains in FINISH, it means * that doze mode is not running and DREAMING is ok to commence. diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index 773f35e0c665..2192b436c905 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -2820,7 +2820,9 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump @Override public void onScreenTurningOn() { - mKeyguardStatusViewController.dozeTimeTick(); + if (!mFeatureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) { + mKeyguardStatusViewController.dozeTimeTick(); + } } private void onMiddleClicked() { @@ -3070,10 +3072,11 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump } } - @Override public void dozeTimeTick() { mLockIconViewController.dozeTimeTick(); - mKeyguardStatusViewController.dozeTimeTick(); + if (!mFeatureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) { + mKeyguardStatusViewController.dozeTimeTick(); + } if (mInterpolatedDarkAmount > 0) { positionClockAndNotifications(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java index ed9722e04da0..801cdbf0e83e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java @@ -38,7 +38,6 @@ import com.android.systemui.doze.DozeHost; import com.android.systemui.doze.DozeLog; import com.android.systemui.doze.DozeReceiver; import com.android.systemui.keyguard.WakefulnessLifecycle; -import com.android.systemui.keyguard.domain.interactor.BurnInInteractor; import com.android.systemui.keyguard.domain.interactor.DozeInteractor; import com.android.systemui.shade.NotificationShadeWindowViewController; import com.android.systemui.shade.ShadeViewController; @@ -94,7 +93,6 @@ public final class DozeServiceHost implements DozeHost { private NotificationShadeWindowViewController mNotificationShadeWindowViewController; private final AuthController mAuthController; private final NotificationIconAreaController mNotificationIconAreaController; - private final BurnInInteractor mBurnInInteractor; private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; private ShadeViewController mNotificationPanel; private View mAmbientIndicationContainer; @@ -118,8 +116,7 @@ public final class DozeServiceHost implements DozeHost { NotificationWakeUpCoordinator notificationWakeUpCoordinator, AuthController authController, NotificationIconAreaController notificationIconAreaController, - DozeInteractor dozeInteractor, - BurnInInteractor burnInInteractor) { + DozeInteractor dozeInteractor) { super(); mDozeLog = dozeLog; mPowerManager = powerManager; @@ -138,7 +135,6 @@ public final class DozeServiceHost implements DozeHost { mNotificationWakeUpCoordinator = notificationWakeUpCoordinator; mAuthController = authController; mNotificationIconAreaController = notificationIconAreaController; - mBurnInInteractor = burnInInteractor; mHeadsUpManagerPhone.addListener(mOnHeadsUpChangedListener); mDozeInteractor = dozeInteractor; } @@ -317,7 +313,6 @@ public final class DozeServiceHost implements DozeHost { if (mAmbientIndicationContainer instanceof DozeReceiver) { ((DozeReceiver) mAmbientIndicationContainer).dozeTimeTick(); } - mBurnInInteractor.dozeTimeTick(); } @Override diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerBaseTest.java new file mode 100644 index 000000000000..ba3dbf0a0cb7 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerBaseTest.java @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2020 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.keyguard; + +import static org.mockito.Mockito.atLeast; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.view.View; +import android.view.ViewTreeObserver; + +import com.android.internal.jank.InteractionJankMonitor; +import com.android.keyguard.logging.KeyguardLogger; +import com.android.systemui.SysuiTestCase; +import com.android.systemui.dump.DumpManager; +import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository; +import com.android.systemui.keyguard.domain.interactor.KeyguardInteractorFactory; +import com.android.systemui.statusbar.notification.AnimatableProperty; +import com.android.systemui.statusbar.phone.DozeParameters; +import com.android.systemui.statusbar.phone.ScreenOffAnimationController; +import com.android.systemui.statusbar.policy.ConfigurationController; +import com.android.systemui.statusbar.policy.KeyguardStateController; + +import org.junit.Before; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +public class KeyguardStatusViewControllerBaseTest extends SysuiTestCase { + + @Mock protected KeyguardStatusView mKeyguardStatusView; + @Mock protected KeyguardSliceViewController mKeyguardSliceViewController; + @Mock protected KeyguardClockSwitchController mKeyguardClockSwitchController; + @Mock protected KeyguardStateController mKeyguardStateController; + @Mock protected KeyguardUpdateMonitor mKeyguardUpdateMonitor; + @Mock protected ConfigurationController mConfigurationController; + @Mock protected DozeParameters mDozeParameters; + @Mock protected ScreenOffAnimationController mScreenOffAnimationController; + @Mock protected KeyguardLogger mKeyguardLogger; + @Mock protected KeyguardStatusViewController mControllerMock; + @Mock protected FeatureFlags mFeatureFlags; + @Mock protected InteractionJankMonitor mInteractionJankMonitor; + @Mock protected ViewTreeObserver mViewTreeObserver; + @Mock protected DumpManager mDumpManager; + protected FakeKeyguardRepository mFakeKeyguardRepository; + + protected KeyguardStatusViewController mController; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + + KeyguardInteractorFactory.WithDependencies deps = KeyguardInteractorFactory.create(); + mFakeKeyguardRepository = deps.getRepository(); + + mController = new KeyguardStatusViewController( + mKeyguardStatusView, + mKeyguardSliceViewController, + mKeyguardClockSwitchController, + mKeyguardStateController, + mKeyguardUpdateMonitor, + mConfigurationController, + mDozeParameters, + mScreenOffAnimationController, + mKeyguardLogger, + mFeatureFlags, + mInteractionJankMonitor, + deps.getKeyguardInteractor(), + mDumpManager) { + @Override + void setProperty( + AnimatableProperty property, + float value, + boolean animate) { + // Route into the mock version for verification + mControllerMock.setProperty(property, value, animate); + } + }; + + when(mKeyguardStatusView.getViewTreeObserver()).thenReturn(mViewTreeObserver); + } + + protected void givenViewAttached() { + ArgumentCaptor<View.OnAttachStateChangeListener> captor = + ArgumentCaptor.forClass(View.OnAttachStateChangeListener.class); + verify(mKeyguardStatusView, atLeast(1)).addOnAttachStateChangeListener(captor.capture()); + + for (View.OnAttachStateChangeListener listener : captor.getAllValues()) { + listener.onViewAttachedToWindow(mKeyguardStatusView); + } + } +} diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerTest.java index 7114c22b5701..20d9ef1e86b1 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerTest.java @@ -23,80 +23,21 @@ import static org.mockito.Mockito.when; import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; +import android.testing.TestableLooper; -import com.android.internal.jank.InteractionJankMonitor; -import com.android.keyguard.logging.KeyguardLogger; -import com.android.systemui.SysuiTestCase; -import com.android.systemui.dump.DumpManager; -import com.android.systemui.flags.FeatureFlags; import com.android.systemui.plugins.ClockConfig; import com.android.systemui.plugins.ClockController; import com.android.systemui.statusbar.notification.AnimatableProperty; -import com.android.systemui.statusbar.phone.DozeParameters; -import com.android.systemui.statusbar.phone.ScreenOffAnimationController; -import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener; -import com.android.systemui.statusbar.policy.KeyguardStateController; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; @SmallTest +@TestableLooper.RunWithLooper(setAsMainLooper = true) @RunWith(AndroidTestingRunner.class) -public class KeyguardStatusViewControllerTest extends SysuiTestCase { - - @Mock private KeyguardStatusView mKeyguardStatusView; - @Mock private KeyguardSliceViewController mKeyguardSliceViewController; - @Mock private KeyguardClockSwitchController mKeyguardClockSwitchController; - @Mock private KeyguardStateController mKeyguardStateController; - @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; - @Mock private ConfigurationController mConfigurationController; - @Mock private DozeParameters mDozeParameters; - @Mock private ScreenOffAnimationController mScreenOffAnimationController; - @Mock private KeyguardLogger mKeyguardLogger; - @Mock private KeyguardStatusViewController mControllerMock; - @Mock private FeatureFlags mFeatureFlags; - @Mock private InteractionJankMonitor mInteractionJankMonitor; - - @Mock private DumpManager mDumpManager; - - @Captor - private ArgumentCaptor<KeyguardUpdateMonitorCallback> mKeyguardUpdateMonitorCallbackCaptor; - - private KeyguardStatusViewController mController; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - - mController = new KeyguardStatusViewController( - mKeyguardStatusView, - mKeyguardSliceViewController, - mKeyguardClockSwitchController, - mKeyguardStateController, - mKeyguardUpdateMonitor, - mConfigurationController, - mDozeParameters, - mScreenOffAnimationController, - mKeyguardLogger, - mFeatureFlags, - mInteractionJankMonitor, - mDumpManager) { - @Override - void setProperty( - AnimatableProperty property, - float value, - boolean animate) { - // Route into the mock version for verification - mControllerMock.setProperty(property, value, animate); - } - }; - } +public class KeyguardStatusViewControllerTest extends KeyguardStatusViewControllerBaseTest { @Test public void dozeTimeTick_updatesSlice() { diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerWithCoroutinesTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerWithCoroutinesTest.kt new file mode 100644 index 000000000000..2b9797ee56d4 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerWithCoroutinesTest.kt @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2023 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.keyguard + +import android.test.suitebuilder.annotation.SmallTest +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper +import com.android.systemui.keyguard.shared.model.ScreenModel +import com.android.systemui.keyguard.shared.model.ScreenState +import kotlinx.coroutines.cancelChildren +import kotlinx.coroutines.test.runCurrent +import kotlinx.coroutines.test.runTest +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito.clearInvocations +import org.mockito.Mockito.never +import org.mockito.Mockito.times +import org.mockito.Mockito.verify + +@RunWith(AndroidTestingRunner::class) +@TestableLooper.RunWithLooper(setAsMainLooper = true) +@SmallTest +class KeyguardStatusViewControllerWithCoroutinesTest : KeyguardStatusViewControllerBaseTest() { + + @Test + fun dozeTimeTickUpdatesSlices() = runTest { + mController.startCoroutines(coroutineContext) + givenViewAttached() + runCurrent() + clearInvocations(mKeyguardSliceViewController) + + mFakeKeyguardRepository.dozeTimeTick() + runCurrent() + verify(mKeyguardSliceViewController).refresh() + + coroutineContext.cancelChildren() + } + + @Test + fun onScreenTurningOnUpdatesSlices() = runTest { + mController.startCoroutines(coroutineContext) + givenViewAttached() + runCurrent() + clearInvocations(mKeyguardSliceViewController) + + mFakeKeyguardRepository.setScreenModel(ScreenModel(ScreenState.SCREEN_ON)) + runCurrent() + verify(mKeyguardSliceViewController, never()).refresh() + + // Should only be called during a 'turning on' event + mFakeKeyguardRepository.setScreenModel(ScreenModel(ScreenState.SCREEN_TURNING_ON)) + runCurrent() + verify(mKeyguardSliceViewController).refresh() + + coroutineContext.cancelChildren() + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt index ba7d3490e56d..5e3376a45488 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt @@ -49,6 +49,7 @@ import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.util.mockito.argumentCaptor import com.android.systemui.util.mockito.whenever import com.android.systemui.util.mockito.withArgCaptor +import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.launchIn @@ -85,13 +86,14 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { private val mainDispatcher = StandardTestDispatcher() private val testDispatcher = StandardTestDispatcher() private val testScope = TestScope(testDispatcher) + private lateinit var systemClock: FakeSystemClock private lateinit var underTest: KeyguardRepositoryImpl @Before fun setUp() { MockitoAnnotations.initMocks(this) - + systemClock = FakeSystemClock() underTest = KeyguardRepositoryImpl( statusBarStateController, @@ -107,6 +109,7 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { dreamOverlayCallbackController, mainDispatcher, testScope.backgroundScope, + systemClock, ) } @@ -167,11 +170,15 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { @Test fun dozeTimeTick() = testScope.runTest { - var dozeTimeTickValue = collectLastValue(underTest.dozeTimeTick) + val lastDozeTimeTick by collectLastValue(underTest.dozeTimeTick) + assertThat(lastDozeTimeTick).isEqualTo(0L) + + // WHEN dozeTimeTick updated + systemClock.setUptimeMillis(systemClock.uptimeMillis() + 5) underTest.dozeTimeTick() - runCurrent() - assertThat(dozeTimeTickValue()).isNull() + // THEN listeners were updated to the latest uptime millis + assertThat(systemClock.uptimeMillis()).isEqualTo(lastDozeTimeTick) } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/BurnInInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/BurnInInteractorTest.kt index 069a4862ccdc..630826954057 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/BurnInInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/BurnInInteractorTest.kt @@ -23,10 +23,9 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository import com.android.systemui.coroutines.collectLastValue import com.android.systemui.doze.util.BurnInHelperWrapper +import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.util.mockito.whenever -import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat -import junit.framework.Assert.assertEquals import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runTest @@ -48,7 +47,8 @@ class BurnInInteractorTest : SysuiTestCase() { @Mock private lateinit var burnInHelperWrapper: BurnInHelperWrapper private lateinit var configurationRepository: FakeConfigurationRepository - private lateinit var systemClock: FakeSystemClock + private lateinit var keyguardInteractor: KeyguardInteractor + private lateinit var fakeKeyguardRepository: FakeKeyguardRepository private lateinit var testScope: TestScope private lateinit var underTest: BurnInInteractor @@ -56,8 +56,10 @@ class BurnInInteractorTest : SysuiTestCase() { fun setUp() { MockitoAnnotations.initMocks(this) configurationRepository = FakeConfigurationRepository() - systemClock = FakeSystemClock() - + KeyguardInteractorFactory.create().let { + keyguardInteractor = it.keyguardInteractor + fakeKeyguardRepository = it.repository + } whenever(burnInHelperWrapper.burnInOffset(anyInt(), anyBoolean())).thenReturn(burnInOffset) setBurnInProgress(.65f) @@ -68,26 +70,11 @@ class BurnInInteractorTest : SysuiTestCase() { burnInHelperWrapper, testScope.backgroundScope, configurationRepository, - systemClock, + keyguardInteractor, ) } @Test - fun dozeTimeTick_updatesOnDozeTimeTick() = - testScope.runTest { - // Initial state set to 0 - val lastDozeTimeTick by collectLastValue(underTest.dozeTimeTick) - assertEquals(0L, lastDozeTimeTick) - - // WHEN dozeTimeTick updated - incrementUptimeMillis() - underTest.dozeTimeTick() - - // THEN listeners were updated to the latest uptime millis - assertThat(systemClock.uptimeMillis()).isEqualTo(lastDozeTimeTick) - } - - @Test fun udfpsBurnInOffset_updatesOnResolutionScaleChange() = testScope.runTest { val udfpsBurnInOffsetX by collectLastValue(underTest.udfpsBurnInXOffset) @@ -111,25 +98,18 @@ class BurnInInteractorTest : SysuiTestCase() { assertThat(udfpsBurnInProgress).isEqualTo(burnInProgress) setBurnInProgress(.88f) - incrementUptimeMillis() - underTest.dozeTimeTick() + fakeKeyguardRepository.dozeTimeTick(10) assertThat(udfpsBurnInProgress).isEqualTo(burnInProgress) setBurnInProgress(.92f) - incrementUptimeMillis() - underTest.dozeTimeTick() + fakeKeyguardRepository.dozeTimeTick(20) assertThat(udfpsBurnInProgress).isEqualTo(burnInProgress) setBurnInProgress(.32f) - incrementUptimeMillis() - underTest.dozeTimeTick() + fakeKeyguardRepository.dozeTimeTick(30) assertThat(udfpsBurnInProgress).isEqualTo(burnInProgress) } - private fun incrementUptimeMillis() { - systemClock.setUptimeMillis(systemClock.uptimeMillis() + 5) - } - private fun setBurnInProgress(progress: Float) { burnInProgress = progress whenever(burnInHelperWrapper.burnInProgressOffset()).thenReturn(burnInProgress) diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/UdfpsKeyguardInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/UdfpsKeyguardInteractorTest.kt index b019a21387da..6efec99ba834 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/UdfpsKeyguardInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/UdfpsKeyguardInteractorTest.kt @@ -38,7 +38,6 @@ import com.android.systemui.statusbar.phone.SystemUIDialogManager import com.android.systemui.util.mockito.argumentCaptor import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.whenever -import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.TestScope @@ -68,6 +67,7 @@ class UdfpsKeyguardInteractorTest : SysuiTestCase() { private lateinit var featureFlags: FakeFeatureFlags private lateinit var burnInInteractor: BurnInInteractor private lateinit var shadeRepository: FakeShadeRepository + private lateinit var keyguardInteractor: KeyguardInteractor @Mock private lateinit var burnInHelper: BurnInHelperWrapper @Mock private lateinit var dialogManager: SystemUIDialogManager @@ -79,35 +79,32 @@ class UdfpsKeyguardInteractorTest : SysuiTestCase() { MockitoAnnotations.initMocks(this) testScope = TestScope() configRepository = FakeConfigurationRepository() - keyguardRepository = FakeKeyguardRepository() - bouncerRepository = FakeKeyguardBouncerRepository() - shadeRepository = FakeShadeRepository() - fakeCommandQueue = FakeCommandQueue() featureFlags = FakeFeatureFlags().apply { set(Flags.REFACTOR_UDFPS_KEYGUARD_VIEWS, true) set(Flags.FACE_AUTH_REFACTOR, false) } + KeyguardInteractorFactory.create(featureFlags = featureFlags).let { + keyguardInteractor = it.keyguardInteractor + keyguardRepository = it.repository + } + bouncerRepository = FakeKeyguardBouncerRepository() + shadeRepository = FakeShadeRepository() + fakeCommandQueue = FakeCommandQueue() burnInInteractor = BurnInInteractor( context, burnInHelper, testScope.backgroundScope, configRepository, - FakeSystemClock(), + keyguardInteractor ) underTest = UdfpsKeyguardInteractor( configRepository, burnInInteractor, - KeyguardInteractor( - keyguardRepository, - fakeCommandQueue, - featureFlags, - bouncerRepository, - configRepository, - ), + keyguardInteractor, shadeRepository, dialogManager, ) @@ -215,7 +212,7 @@ class UdfpsKeyguardInteractorTest : SysuiTestCase() { private fun setAwake() { keyguardRepository.setDozeAmount(0f) - burnInInteractor.dozeTimeTick() + keyguardRepository.dozeTimeTick() bouncerRepository.setAlternateVisible(false) keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD) diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsAodViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsAodViewModelTest.kt index b985b3ca83da..bd17de3ee939 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsAodViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsAodViewModelTest.kt @@ -20,21 +20,19 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase -import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository import com.android.systemui.bouncer.data.repository.KeyguardBouncerRepository import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository import com.android.systemui.coroutines.collectLastValue import com.android.systemui.doze.util.BurnInHelperWrapper import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags -import com.android.systemui.keyguard.data.repository.FakeCommandQueue import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.domain.interactor.BurnInInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor +import com.android.systemui.keyguard.domain.interactor.KeyguardInteractorFactory import com.android.systemui.keyguard.domain.interactor.UdfpsKeyguardInteractor import com.android.systemui.shade.data.repository.FakeShadeRepository import com.android.systemui.statusbar.phone.SystemUIDialogManager -import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.TestScope @@ -58,9 +56,9 @@ class UdfpsAodViewModelTest : SysuiTestCase() { private lateinit var configRepository: FakeConfigurationRepository private lateinit var bouncerRepository: KeyguardBouncerRepository private lateinit var keyguardRepository: FakeKeyguardRepository - private lateinit var fakeCommandQueue: FakeCommandQueue private lateinit var featureFlags: FakeFeatureFlags private lateinit var shadeRepository: FakeShadeRepository + private lateinit var keyguardInteractor: KeyguardInteractor @Mock private lateinit var dialogManager: SystemUIDialogManager @Mock private lateinit var burnInHelper: BurnInHelperWrapper @@ -70,17 +68,21 @@ class UdfpsAodViewModelTest : SysuiTestCase() { MockitoAnnotations.initMocks(this) overrideResource(com.android.systemui.R.dimen.lock_icon_padding, defaultPadding) testScope = TestScope() - configRepository = FakeConfigurationRepository() - keyguardRepository = FakeKeyguardRepository() - bouncerRepository = FakeKeyguardBouncerRepository() - fakeCommandQueue = FakeCommandQueue() shadeRepository = FakeShadeRepository() featureFlags = FakeFeatureFlags().apply { set(Flags.REFACTOR_UDFPS_KEYGUARD_VIEWS, true) set(Flags.FACE_AUTH_REFACTOR, false) } - + KeyguardInteractorFactory.create( + featureFlags = featureFlags, + ) + .also { + keyguardInteractor = it.keyguardInteractor + keyguardRepository = it.repository + configRepository = it.configurationRepository + bouncerRepository = it.bouncerRepository + } val udfpsKeyguardInteractor = UdfpsKeyguardInteractor( configRepository, @@ -89,15 +91,9 @@ class UdfpsAodViewModelTest : SysuiTestCase() { burnInHelper, testScope.backgroundScope, configRepository, - FakeSystemClock(), - ), - KeyguardInteractor( - keyguardRepository, - fakeCommandQueue, - featureFlags, - bouncerRepository, - configRepository, + keyguardInteractor, ), + keyguardInteractor, shadeRepository, dialogManager, ) diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsFingerprintViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsFingerprintViewModelTest.kt index 0fbcec23f247..80ab418fbd30 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsFingerprintViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsFingerprintViewModelTest.kt @@ -30,12 +30,11 @@ import com.android.systemui.keyguard.data.repository.FakeCommandQueue import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository import com.android.systemui.keyguard.domain.interactor.BurnInInteractor -import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor +import com.android.systemui.keyguard.domain.interactor.KeyguardInteractorFactory import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor import com.android.systemui.keyguard.domain.interactor.UdfpsKeyguardInteractor import com.android.systemui.shade.data.repository.FakeShadeRepository import com.android.systemui.statusbar.phone.SystemUIDialogManager -import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.TestScope @@ -90,14 +89,10 @@ class UdfpsFingerprintViewModelTest : SysuiTestCase() { testScope.backgroundScope, ) val keyguardInteractor = - KeyguardInteractor( - keyguardRepository, - fakeCommandQueue, - featureFlags, - bouncerRepository, - configRepository, - ) - + KeyguardInteractorFactory.create( + featureFlags = featureFlags, + ) + .keyguardInteractor underTest = FingerprintViewModel( context, @@ -109,7 +104,7 @@ class UdfpsFingerprintViewModelTest : SysuiTestCase() { burnInHelper, testScope.backgroundScope, configRepository, - FakeSystemClock(), + keyguardInteractor, ), keyguardInteractor, shadeRepository, diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsLockscreenViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsLockscreenViewModelTest.kt index 41ae93183850..0456824abfbc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsLockscreenViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsLockscreenViewModelTest.kt @@ -29,6 +29,7 @@ import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository import com.android.systemui.keyguard.domain.interactor.BurnInInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor +import com.android.systemui.keyguard.domain.interactor.KeyguardInteractorFactory import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor import com.android.systemui.keyguard.domain.interactor.UdfpsKeyguardInteractor import com.android.systemui.keyguard.shared.model.KeyguardState @@ -39,7 +40,6 @@ import com.android.systemui.shade.data.repository.FakeShadeRepository import com.android.systemui.statusbar.phone.SystemUIDialogManager import com.android.systemui.util.mockito.argumentCaptor import com.android.systemui.util.mockito.mock -import com.android.systemui.util.time.FakeSystemClock import com.android.wm.shell.animation.Interpolators import com.google.common.collect.Range import com.google.common.truth.Truth.assertThat @@ -72,6 +72,7 @@ class UdfpsLockscreenViewModelTest : SysuiTestCase() { private lateinit var transitionRepository: FakeKeyguardTransitionRepository private lateinit var configRepository: FakeConfigurationRepository private lateinit var keyguardRepository: FakeKeyguardRepository + private lateinit var keyguardInteractor: KeyguardInteractor private lateinit var bouncerRepository: FakeKeyguardBouncerRepository private lateinit var shadeRepository: FakeShadeRepository private lateinit var featureFlags: FakeFeatureFlags @@ -81,23 +82,21 @@ class UdfpsLockscreenViewModelTest : SysuiTestCase() { MockitoAnnotations.initMocks(this) testScope = TestScope() transitionRepository = FakeKeyguardTransitionRepository() - configRepository = FakeConfigurationRepository() - keyguardRepository = FakeKeyguardRepository() - bouncerRepository = FakeKeyguardBouncerRepository() shadeRepository = FakeShadeRepository() featureFlags = FakeFeatureFlags().apply { set(Flags.REFACTOR_UDFPS_KEYGUARD_VIEWS, true) set(Flags.FACE_AUTH_REFACTOR, false) } - val keyguardInteractor = - KeyguardInteractor( - keyguardRepository, - commandQueue = mock(), - featureFlags, - bouncerRepository, - configRepository, - ) + KeyguardInteractorFactory.create( + featureFlags = featureFlags, + ) + .also { + keyguardInteractor = it.keyguardInteractor + keyguardRepository = it.repository + configRepository = it.configurationRepository + bouncerRepository = it.bouncerRepository + } underTest = UdfpsLockscreenViewModel( @@ -115,7 +114,7 @@ class UdfpsLockscreenViewModelTest : SysuiTestCase() { burnInHelperWrapper = mock(), testScope.backgroundScope, configRepository, - FakeSystemClock(), + keyguardInteractor, ), keyguardInteractor, shadeRepository, diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java index 47ca49d03cc7..c759e078a56d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java @@ -371,6 +371,7 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase { mKeyguardLogger, mFeatureFlags, mInteractionJankMonitor, + mKeyguardInteractor, mDumpManager)); when(mAuthController.isUdfpsEnrolled(anyInt())).thenReturn(false); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java index 57037e0c9c63..ff6f40d539fc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java @@ -43,7 +43,6 @@ import com.android.systemui.biometrics.AuthController; import com.android.systemui.doze.DozeHost; import com.android.systemui.doze.DozeLog; import com.android.systemui.keyguard.WakefulnessLifecycle; -import com.android.systemui.keyguard.domain.interactor.BurnInInteractor; import com.android.systemui.keyguard.domain.interactor.DozeInteractor; import com.android.systemui.shade.NotificationShadeWindowViewController; import com.android.systemui.shade.ShadeViewController; @@ -96,7 +95,6 @@ public class DozeServiceHostTest extends SysuiTestCase { @Mock private BiometricUnlockController mBiometricUnlockController; @Mock private AuthController mAuthController; @Mock private DozeHost.Callback mCallback; - @Mock private BurnInInteractor mBurnInInteractor; @Mock private DozeInteractor mDozeInteractor; @Before @@ -108,8 +106,7 @@ public class DozeServiceHostTest extends SysuiTestCase { () -> mAssistManager, mDozeScrimController, mKeyguardUpdateMonitor, mPulseExpansionHandler, mNotificationShadeWindowController, mNotificationWakeUpCoordinator, - mAuthController, mNotificationIconAreaController, mDozeInteractor, - mBurnInInteractor); + mAuthController, mNotificationIconAreaController, mDozeInteractor); mDozeServiceHost.initialize( mCentralSurfaces, @@ -234,11 +231,11 @@ public class DozeServiceHostTest extends SysuiTestCase { verifyZeroInteractions(mDozeInteractor); } @Test - public void dozeTimeTickSentTBurnInInteractor() { + public void dozeTimeTickSentToDozeInteractor() { // WHEN dozeTimeTick mDozeServiceHost.dozeTimeTick(); - // THEN burnInInteractor's dozeTimeTick is updated - verify(mBurnInInteractor).dozeTimeTick(); + // THEN dozeInteractor's dozeTimeTick is updated + verify(mDozeInteractor).dozeTimeTick(); } } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt index e6894d7240f8..15ce055bcc63 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt @@ -30,7 +30,6 @@ import com.android.systemui.keyguard.shared.model.WakeSleepReason import com.android.systemui.keyguard.shared.model.WakefulnessModel import com.android.systemui.keyguard.shared.model.WakefulnessState import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow @@ -60,7 +59,7 @@ class FakeKeyguardRepository : KeyguardRepository { private val _isDozing = MutableStateFlow(false) override val isDozing: StateFlow<Boolean> = _isDozing - private val _dozeTimeTick = MutableSharedFlow<Unit>() + private val _dozeTimeTick = MutableStateFlow<Long>(0L) override val dozeTimeTick = _dozeTimeTick private val _lastDozeTapToWakePosition = MutableStateFlow<Point?>(null) @@ -174,7 +173,11 @@ class FakeKeyguardRepository : KeyguardRepository { } override fun dozeTimeTick() { - _dozeTimeTick.tryEmit(Unit) + _dozeTimeTick.value = _dozeTimeTick.value + 1 + } + + fun dozeTimeTick(millis: Long) { + _dozeTimeTick.value = millis } override fun setLastDozeTapToWakePosition(position: Point) { @@ -237,6 +240,10 @@ class FakeKeyguardRepository : KeyguardRepository { _isBypassEnabled = isEnabled } + fun setScreenModel(screenModel: ScreenModel) { + _screenModel.value = screenModel + } + override fun isUdfpsSupported(): Boolean { return _isUdfpsSupported.value } |