Merge "Begin disconnecting KeyguardStatusViewController from NPVC" into udc-qpr-dev
This commit is contained in:
@@ -20,6 +20,7 @@ import static androidx.constraintlayout.widget.ConstraintSet.END;
|
|||||||
import static androidx.constraintlayout.widget.ConstraintSet.PARENT_ID;
|
import static androidx.constraintlayout.widget.ConstraintSet.PARENT_ID;
|
||||||
|
|
||||||
import static com.android.internal.jank.InteractionJankMonitor.CUJ_LOCKSCREEN_CLOCK_MOVE_ANIMATION;
|
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.Animator;
|
||||||
import android.animation.ValueAnimator;
|
import android.animation.ValueAnimator;
|
||||||
@@ -51,6 +52,10 @@ import com.android.systemui.Dumpable;
|
|||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
import com.android.systemui.flags.FeatureFlags;
|
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.plugins.ClockController;
|
||||||
import com.android.systemui.statusbar.notification.AnimatableProperty;
|
import com.android.systemui.statusbar.notification.AnimatableProperty;
|
||||||
import com.android.systemui.statusbar.notification.PropertyAnimator;
|
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.statusbar.policy.KeyguardStateController;
|
||||||
import com.android.systemui.util.ViewController;
|
import com.android.systemui.util.ViewController;
|
||||||
|
|
||||||
|
import kotlin.coroutines.CoroutineContext;
|
||||||
|
import kotlin.coroutines.EmptyCoroutineContext;
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -91,6 +99,7 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV
|
|||||||
private final FeatureFlags mFeatureFlags;
|
private final FeatureFlags mFeatureFlags;
|
||||||
private final InteractionJankMonitor mInteractionJankMonitor;
|
private final InteractionJankMonitor mInteractionJankMonitor;
|
||||||
private final Rect mClipBounds = new Rect();
|
private final Rect mClipBounds = new Rect();
|
||||||
|
private final KeyguardInteractor mKeyguardInteractor;
|
||||||
|
|
||||||
private Boolean mStatusViewCentered = true;
|
private Boolean mStatusViewCentered = true;
|
||||||
|
|
||||||
@@ -122,6 +131,7 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV
|
|||||||
KeyguardLogger logger,
|
KeyguardLogger logger,
|
||||||
FeatureFlags featureFlags,
|
FeatureFlags featureFlags,
|
||||||
InteractionJankMonitor interactionJankMonitor,
|
InteractionJankMonitor interactionJankMonitor,
|
||||||
|
KeyguardInteractor keyguardInteractor,
|
||||||
DumpManager dumpManager) {
|
DumpManager dumpManager) {
|
||||||
super(keyguardStatusView);
|
super(keyguardStatusView);
|
||||||
mKeyguardSliceViewController = keyguardSliceViewController;
|
mKeyguardSliceViewController = keyguardSliceViewController;
|
||||||
@@ -134,12 +144,34 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV
|
|||||||
mInteractionJankMonitor = interactionJankMonitor;
|
mInteractionJankMonitor = interactionJankMonitor;
|
||||||
mFeatureFlags = featureFlags;
|
mFeatureFlags = featureFlags;
|
||||||
mDumpManager = dumpManager;
|
mDumpManager = dumpManager;
|
||||||
|
mKeyguardInteractor = keyguardInteractor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInit() {
|
public void onInit() {
|
||||||
mKeyguardClockSwitchController.init();
|
mKeyguardClockSwitchController.init();
|
||||||
mDumpManager.registerDumpable(this);
|
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
|
@Override
|
||||||
|
|||||||
@@ -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.DozeParameters
|
||||||
import com.android.systemui.statusbar.phone.KeyguardBypassController
|
import com.android.systemui.statusbar.phone.KeyguardBypassController
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController
|
import com.android.systemui.statusbar.policy.KeyguardStateController
|
||||||
|
import com.android.systemui.util.time.SystemClock
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlinx.coroutines.CoroutineDispatcher
|
import kotlinx.coroutines.CoroutineDispatcher
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.channels.awaitClose
|
import kotlinx.coroutines.channels.awaitClose
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.SharingStarted
|
import kotlinx.coroutines.flow.SharingStarted
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import kotlinx.coroutines.flow.asSharedFlow
|
|
||||||
import kotlinx.coroutines.flow.asStateFlow
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
import kotlinx.coroutines.flow.flowOn
|
import kotlinx.coroutines.flow.flowOn
|
||||||
@@ -177,7 +176,7 @@ interface KeyguardRepository {
|
|||||||
val keyguardRootViewVisibility: Flow<KeyguardRootViewVisibilityState>
|
val keyguardRootViewVisibility: Flow<KeyguardRootViewVisibilityState>
|
||||||
|
|
||||||
/** Receive an event for doze time tick */
|
/** Receive an event for doze time tick */
|
||||||
val dozeTimeTick: Flow<Unit>
|
val dozeTimeTick: Flow<Long>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns `true` if the keyguard is showing; `false` otherwise.
|
* Returns `true` if the keyguard is showing; `false` otherwise.
|
||||||
@@ -248,6 +247,7 @@ constructor(
|
|||||||
private val dreamOverlayCallbackController: DreamOverlayCallbackController,
|
private val dreamOverlayCallbackController: DreamOverlayCallbackController,
|
||||||
@Main private val mainDispatcher: CoroutineDispatcher,
|
@Main private val mainDispatcher: CoroutineDispatcher,
|
||||||
@Application private val scope: CoroutineScope,
|
@Application private val scope: CoroutineScope,
|
||||||
|
private val systemClock: SystemClock,
|
||||||
) : KeyguardRepository {
|
) : KeyguardRepository {
|
||||||
private val _animateBottomAreaDozingTransitions = MutableStateFlow(false)
|
private val _animateBottomAreaDozingTransitions = MutableStateFlow(false)
|
||||||
override val animateBottomAreaDozingTransitions =
|
override val animateBottomAreaDozingTransitions =
|
||||||
@@ -398,11 +398,11 @@ constructor(
|
|||||||
_isDozing.value = isDozing
|
_isDozing.value = isDozing
|
||||||
}
|
}
|
||||||
|
|
||||||
private val _dozeTimeTick = MutableSharedFlow<Unit>()
|
private val _dozeTimeTick = MutableStateFlow<Long>(0)
|
||||||
override val dozeTimeTick = _dozeTimeTick.asSharedFlow()
|
override val dozeTimeTick = _dozeTimeTick.asStateFlow()
|
||||||
|
|
||||||
override fun dozeTimeTick() {
|
override fun dozeTimeTick() {
|
||||||
_dozeTimeTick.tryEmit(Unit)
|
_dozeTimeTick.value = systemClock.uptimeMillis()
|
||||||
}
|
}
|
||||||
|
|
||||||
private val _lastDozeTapToWakePosition = MutableStateFlow<Point?>(null)
|
private val _lastDozeTapToWakePosition = MutableStateFlow<Point?>(null)
|
||||||
|
|||||||
@@ -24,14 +24,11 @@ import com.android.systemui.common.ui.data.repository.ConfigurationRepository
|
|||||||
import com.android.systemui.dagger.SysUISingleton
|
import com.android.systemui.dagger.SysUISingleton
|
||||||
import com.android.systemui.dagger.qualifiers.Application
|
import com.android.systemui.dagger.qualifiers.Application
|
||||||
import com.android.systemui.doze.util.BurnInHelperWrapper
|
import com.android.systemui.doze.util.BurnInHelperWrapper
|
||||||
import com.android.systemui.util.time.SystemClock
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
|
||||||
import kotlinx.coroutines.flow.SharingStarted
|
import kotlinx.coroutines.flow.SharingStarted
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import kotlinx.coroutines.flow.asStateFlow
|
|
||||||
import kotlinx.coroutines.flow.flatMapLatest
|
import kotlinx.coroutines.flow.flatMapLatest
|
||||||
import kotlinx.coroutines.flow.mapLatest
|
import kotlinx.coroutines.flow.mapLatest
|
||||||
import kotlinx.coroutines.flow.stateIn
|
import kotlinx.coroutines.flow.stateIn
|
||||||
@@ -46,24 +43,17 @@ constructor(
|
|||||||
private val burnInHelperWrapper: BurnInHelperWrapper,
|
private val burnInHelperWrapper: BurnInHelperWrapper,
|
||||||
@Application private val scope: CoroutineScope,
|
@Application private val scope: CoroutineScope,
|
||||||
private val configurationRepository: ConfigurationRepository,
|
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> =
|
val udfpsBurnInXOffset: StateFlow<Int> =
|
||||||
burnInOffsetDefinedInPixels(R.dimen.udfps_burn_in_offset_x, isXAxis = true)
|
burnInOffsetDefinedInPixels(R.dimen.udfps_burn_in_offset_x, isXAxis = true)
|
||||||
val udfpsBurnInYOffset: StateFlow<Int> =
|
val udfpsBurnInYOffset: StateFlow<Int> =
|
||||||
burnInOffsetDefinedInPixels(R.dimen.udfps_burn_in_offset_y, isXAxis = false)
|
burnInOffsetDefinedInPixels(R.dimen.udfps_burn_in_offset_y, isXAxis = false)
|
||||||
val udfpsBurnInProgress: StateFlow<Float> =
|
val udfpsBurnInProgress: StateFlow<Float> =
|
||||||
dozeTimeTick
|
keyguardInteractor.dozeTimeTick
|
||||||
.mapLatest { burnInHelperWrapper.burnInProgressOffset() }
|
.mapLatest { burnInHelperWrapper.burnInProgressOffset() }
|
||||||
.stateIn(scope, SharingStarted.Lazily, 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
|
* 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
|
* max burn-in offset on any configuration changes. If the max burn-in offset is specified in
|
||||||
@@ -77,7 +67,9 @@ constructor(
|
|||||||
.flatMapLatest {
|
.flatMapLatest {
|
||||||
val maxBurnInOffsetPixels =
|
val maxBurnInOffsetPixels =
|
||||||
context.resources.getDimensionPixelSize(maxBurnInOffsetResourceId)
|
context.resources.getDimensionPixelSize(maxBurnInOffsetResourceId)
|
||||||
dozeTimeTick.mapLatest { calculateOffset(maxBurnInOffsetPixels, isXAxis) }
|
keyguardInteractor.dozeTimeTick.mapLatest {
|
||||||
|
calculateOffset(maxBurnInOffsetPixels, isXAxis)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.stateIn(
|
.stateIn(
|
||||||
scope,
|
scope,
|
||||||
@@ -102,7 +94,9 @@ constructor(
|
|||||||
.flatMapLatest { scale ->
|
.flatMapLatest { scale ->
|
||||||
val maxBurnInOffsetPixels =
|
val maxBurnInOffsetPixels =
|
||||||
context.resources.getDimensionPixelSize(maxBurnInOffsetResourceId)
|
context.resources.getDimensionPixelSize(maxBurnInOffsetResourceId)
|
||||||
dozeTimeTick.mapLatest { calculateOffset(maxBurnInOffsetPixels, isXAxis, scale) }
|
keyguardInteractor.dozeTimeTick.mapLatest {
|
||||||
|
calculateOffset(maxBurnInOffsetPixels, isXAxis, scale)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.stateIn(
|
.stateIn(
|
||||||
scope,
|
scope,
|
||||||
|
|||||||
@@ -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.DozeStateModel.Companion.isDozeOff
|
||||||
import com.android.systemui.keyguard.shared.model.DozeTransitionModel
|
import com.android.systemui.keyguard.shared.model.DozeTransitionModel
|
||||||
import com.android.systemui.keyguard.shared.model.KeyguardRootViewVisibilityState
|
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.StatusBarState
|
||||||
import com.android.systemui.keyguard.shared.model.WakefulnessModel
|
import com.android.systemui.keyguard.shared.model.WakefulnessModel
|
||||||
import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel
|
import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel
|
||||||
@@ -87,7 +88,7 @@ constructor(
|
|||||||
/** Whether the system is in doze mode. */
|
/** Whether the system is in doze mode. */
|
||||||
val isDozing: Flow<Boolean> = repository.isDozing
|
val isDozing: Flow<Boolean> = repository.isDozing
|
||||||
/** Receive an event for doze time tick */
|
/** 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. */
|
/** Whether Always-on Display mode is available. */
|
||||||
val isAodAvailable: Flow<Boolean> = repository.isAodAvailable
|
val isAodAvailable: Flow<Boolean> = repository.isAodAvailable
|
||||||
/** Doze transition information. */
|
/** Doze transition information. */
|
||||||
@@ -122,6 +123,9 @@ constructor(
|
|||||||
/** The device wake/sleep state */
|
/** The device wake/sleep state */
|
||||||
val wakefulnessModel: StateFlow<WakefulnessModel> = repository.wakefulness
|
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
|
* 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.
|
* that doze mode is not running and DREAMING is ok to commence.
|
||||||
|
|||||||
@@ -2820,7 +2820,9 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onScreenTurningOn() {
|
public void onScreenTurningOn() {
|
||||||
mKeyguardStatusViewController.dozeTimeTick();
|
if (!mFeatureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) {
|
||||||
|
mKeyguardStatusViewController.dozeTimeTick();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onMiddleClicked() {
|
private void onMiddleClicked() {
|
||||||
@@ -3070,10 +3072,11 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void dozeTimeTick() {
|
public void dozeTimeTick() {
|
||||||
mLockIconViewController.dozeTimeTick();
|
mLockIconViewController.dozeTimeTick();
|
||||||
mKeyguardStatusViewController.dozeTimeTick();
|
if (!mFeatureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) {
|
||||||
|
mKeyguardStatusViewController.dozeTimeTick();
|
||||||
|
}
|
||||||
if (mInterpolatedDarkAmount > 0) {
|
if (mInterpolatedDarkAmount > 0) {
|
||||||
positionClockAndNotifications();
|
positionClockAndNotifications();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ import com.android.systemui.doze.DozeHost;
|
|||||||
import com.android.systemui.doze.DozeLog;
|
import com.android.systemui.doze.DozeLog;
|
||||||
import com.android.systemui.doze.DozeReceiver;
|
import com.android.systemui.doze.DozeReceiver;
|
||||||
import com.android.systemui.keyguard.WakefulnessLifecycle;
|
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.keyguard.domain.interactor.DozeInteractor;
|
||||||
import com.android.systemui.shade.NotificationShadeWindowViewController;
|
import com.android.systemui.shade.NotificationShadeWindowViewController;
|
||||||
import com.android.systemui.shade.ShadeViewController;
|
import com.android.systemui.shade.ShadeViewController;
|
||||||
@@ -94,7 +93,6 @@ public final class DozeServiceHost implements DozeHost {
|
|||||||
private NotificationShadeWindowViewController mNotificationShadeWindowViewController;
|
private NotificationShadeWindowViewController mNotificationShadeWindowViewController;
|
||||||
private final AuthController mAuthController;
|
private final AuthController mAuthController;
|
||||||
private final NotificationIconAreaController mNotificationIconAreaController;
|
private final NotificationIconAreaController mNotificationIconAreaController;
|
||||||
private final BurnInInteractor mBurnInInteractor;
|
|
||||||
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||||
private ShadeViewController mNotificationPanel;
|
private ShadeViewController mNotificationPanel;
|
||||||
private View mAmbientIndicationContainer;
|
private View mAmbientIndicationContainer;
|
||||||
@@ -118,8 +116,7 @@ public final class DozeServiceHost implements DozeHost {
|
|||||||
NotificationWakeUpCoordinator notificationWakeUpCoordinator,
|
NotificationWakeUpCoordinator notificationWakeUpCoordinator,
|
||||||
AuthController authController,
|
AuthController authController,
|
||||||
NotificationIconAreaController notificationIconAreaController,
|
NotificationIconAreaController notificationIconAreaController,
|
||||||
DozeInteractor dozeInteractor,
|
DozeInteractor dozeInteractor) {
|
||||||
BurnInInteractor burnInInteractor) {
|
|
||||||
super();
|
super();
|
||||||
mDozeLog = dozeLog;
|
mDozeLog = dozeLog;
|
||||||
mPowerManager = powerManager;
|
mPowerManager = powerManager;
|
||||||
@@ -138,7 +135,6 @@ public final class DozeServiceHost implements DozeHost {
|
|||||||
mNotificationWakeUpCoordinator = notificationWakeUpCoordinator;
|
mNotificationWakeUpCoordinator = notificationWakeUpCoordinator;
|
||||||
mAuthController = authController;
|
mAuthController = authController;
|
||||||
mNotificationIconAreaController = notificationIconAreaController;
|
mNotificationIconAreaController = notificationIconAreaController;
|
||||||
mBurnInInteractor = burnInInteractor;
|
|
||||||
mHeadsUpManagerPhone.addListener(mOnHeadsUpChangedListener);
|
mHeadsUpManagerPhone.addListener(mOnHeadsUpChangedListener);
|
||||||
mDozeInteractor = dozeInteractor;
|
mDozeInteractor = dozeInteractor;
|
||||||
}
|
}
|
||||||
@@ -317,7 +313,6 @@ public final class DozeServiceHost implements DozeHost {
|
|||||||
if (mAmbientIndicationContainer instanceof DozeReceiver) {
|
if (mAmbientIndicationContainer instanceof DozeReceiver) {
|
||||||
((DozeReceiver) mAmbientIndicationContainer).dozeTimeTick();
|
((DozeReceiver) mAmbientIndicationContainer).dozeTimeTick();
|
||||||
}
|
}
|
||||||
mBurnInInteractor.dozeTimeTick();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -23,80 +23,21 @@ import static org.mockito.Mockito.when;
|
|||||||
|
|
||||||
import android.test.suitebuilder.annotation.SmallTest;
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
import android.testing.AndroidTestingRunner;
|
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.ClockConfig;
|
||||||
import com.android.systemui.plugins.ClockController;
|
import com.android.systemui.plugins.ClockController;
|
||||||
import com.android.systemui.statusbar.notification.AnimatableProperty;
|
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.ConfigurationController.ConfigurationListener;
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.ArgumentCaptor;
|
import org.mockito.ArgumentCaptor;
|
||||||
import org.mockito.Captor;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.MockitoAnnotations;
|
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
|
@TestableLooper.RunWithLooper(setAsMainLooper = true)
|
||||||
@RunWith(AndroidTestingRunner.class)
|
@RunWith(AndroidTestingRunner.class)
|
||||||
public class KeyguardStatusViewControllerTest extends SysuiTestCase {
|
public class KeyguardStatusViewControllerTest extends KeyguardStatusViewControllerBaseTest {
|
||||||
|
|
||||||
@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);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void dozeTimeTick_updatesSlice() {
|
public void dozeTimeTick_updatesSlice() {
|
||||||
|
|||||||
@@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -49,6 +49,7 @@ import com.android.systemui.statusbar.policy.KeyguardStateController
|
|||||||
import com.android.systemui.util.mockito.argumentCaptor
|
import com.android.systemui.util.mockito.argumentCaptor
|
||||||
import com.android.systemui.util.mockito.whenever
|
import com.android.systemui.util.mockito.whenever
|
||||||
import com.android.systemui.util.mockito.withArgCaptor
|
import com.android.systemui.util.mockito.withArgCaptor
|
||||||
|
import com.android.systemui.util.time.FakeSystemClock
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
@@ -85,13 +86,14 @@ class KeyguardRepositoryImplTest : SysuiTestCase() {
|
|||||||
private val mainDispatcher = StandardTestDispatcher()
|
private val mainDispatcher = StandardTestDispatcher()
|
||||||
private val testDispatcher = StandardTestDispatcher()
|
private val testDispatcher = StandardTestDispatcher()
|
||||||
private val testScope = TestScope(testDispatcher)
|
private val testScope = TestScope(testDispatcher)
|
||||||
|
private lateinit var systemClock: FakeSystemClock
|
||||||
|
|
||||||
private lateinit var underTest: KeyguardRepositoryImpl
|
private lateinit var underTest: KeyguardRepositoryImpl
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
MockitoAnnotations.initMocks(this)
|
MockitoAnnotations.initMocks(this)
|
||||||
|
systemClock = FakeSystemClock()
|
||||||
underTest =
|
underTest =
|
||||||
KeyguardRepositoryImpl(
|
KeyguardRepositoryImpl(
|
||||||
statusBarStateController,
|
statusBarStateController,
|
||||||
@@ -107,6 +109,7 @@ class KeyguardRepositoryImplTest : SysuiTestCase() {
|
|||||||
dreamOverlayCallbackController,
|
dreamOverlayCallbackController,
|
||||||
mainDispatcher,
|
mainDispatcher,
|
||||||
testScope.backgroundScope,
|
testScope.backgroundScope,
|
||||||
|
systemClock,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,11 +170,15 @@ class KeyguardRepositoryImplTest : SysuiTestCase() {
|
|||||||
@Test
|
@Test
|
||||||
fun dozeTimeTick() =
|
fun dozeTimeTick() =
|
||||||
testScope.runTest {
|
testScope.runTest {
|
||||||
var dozeTimeTickValue = collectLastValue(underTest.dozeTimeTick)
|
val lastDozeTimeTick by collectLastValue(underTest.dozeTimeTick)
|
||||||
underTest.dozeTimeTick()
|
assertThat(lastDozeTimeTick).isEqualTo(0L)
|
||||||
runCurrent()
|
|
||||||
|
|
||||||
assertThat(dozeTimeTickValue()).isNull()
|
// WHEN dozeTimeTick updated
|
||||||
|
systemClock.setUptimeMillis(systemClock.uptimeMillis() + 5)
|
||||||
|
underTest.dozeTimeTick()
|
||||||
|
|
||||||
|
// THEN listeners were updated to the latest uptime millis
|
||||||
|
assertThat(systemClock.uptimeMillis()).isEqualTo(lastDozeTimeTick)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -23,10 +23,9 @@ import com.android.systemui.SysuiTestCase
|
|||||||
import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository
|
import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository
|
||||||
import com.android.systemui.coroutines.collectLastValue
|
import com.android.systemui.coroutines.collectLastValue
|
||||||
import com.android.systemui.doze.util.BurnInHelperWrapper
|
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.mockito.whenever
|
||||||
import com.android.systemui.util.time.FakeSystemClock
|
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import junit.framework.Assert.assertEquals
|
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.test.TestScope
|
import kotlinx.coroutines.test.TestScope
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
@@ -48,7 +47,8 @@ class BurnInInteractorTest : SysuiTestCase() {
|
|||||||
@Mock private lateinit var burnInHelperWrapper: BurnInHelperWrapper
|
@Mock private lateinit var burnInHelperWrapper: BurnInHelperWrapper
|
||||||
|
|
||||||
private lateinit var configurationRepository: FakeConfigurationRepository
|
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 testScope: TestScope
|
||||||
private lateinit var underTest: BurnInInteractor
|
private lateinit var underTest: BurnInInteractor
|
||||||
|
|
||||||
@@ -56,8 +56,10 @@ class BurnInInteractorTest : SysuiTestCase() {
|
|||||||
fun setUp() {
|
fun setUp() {
|
||||||
MockitoAnnotations.initMocks(this)
|
MockitoAnnotations.initMocks(this)
|
||||||
configurationRepository = FakeConfigurationRepository()
|
configurationRepository = FakeConfigurationRepository()
|
||||||
systemClock = FakeSystemClock()
|
KeyguardInteractorFactory.create().let {
|
||||||
|
keyguardInteractor = it.keyguardInteractor
|
||||||
|
fakeKeyguardRepository = it.repository
|
||||||
|
}
|
||||||
whenever(burnInHelperWrapper.burnInOffset(anyInt(), anyBoolean())).thenReturn(burnInOffset)
|
whenever(burnInHelperWrapper.burnInOffset(anyInt(), anyBoolean())).thenReturn(burnInOffset)
|
||||||
setBurnInProgress(.65f)
|
setBurnInProgress(.65f)
|
||||||
|
|
||||||
@@ -68,25 +70,10 @@ class BurnInInteractorTest : SysuiTestCase() {
|
|||||||
burnInHelperWrapper,
|
burnInHelperWrapper,
|
||||||
testScope.backgroundScope,
|
testScope.backgroundScope,
|
||||||
configurationRepository,
|
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
|
@Test
|
||||||
fun udfpsBurnInOffset_updatesOnResolutionScaleChange() =
|
fun udfpsBurnInOffset_updatesOnResolutionScaleChange() =
|
||||||
testScope.runTest {
|
testScope.runTest {
|
||||||
@@ -111,25 +98,18 @@ class BurnInInteractorTest : SysuiTestCase() {
|
|||||||
assertThat(udfpsBurnInProgress).isEqualTo(burnInProgress)
|
assertThat(udfpsBurnInProgress).isEqualTo(burnInProgress)
|
||||||
|
|
||||||
setBurnInProgress(.88f)
|
setBurnInProgress(.88f)
|
||||||
incrementUptimeMillis()
|
fakeKeyguardRepository.dozeTimeTick(10)
|
||||||
underTest.dozeTimeTick()
|
|
||||||
assertThat(udfpsBurnInProgress).isEqualTo(burnInProgress)
|
assertThat(udfpsBurnInProgress).isEqualTo(burnInProgress)
|
||||||
|
|
||||||
setBurnInProgress(.92f)
|
setBurnInProgress(.92f)
|
||||||
incrementUptimeMillis()
|
fakeKeyguardRepository.dozeTimeTick(20)
|
||||||
underTest.dozeTimeTick()
|
|
||||||
assertThat(udfpsBurnInProgress).isEqualTo(burnInProgress)
|
assertThat(udfpsBurnInProgress).isEqualTo(burnInProgress)
|
||||||
|
|
||||||
setBurnInProgress(.32f)
|
setBurnInProgress(.32f)
|
||||||
incrementUptimeMillis()
|
fakeKeyguardRepository.dozeTimeTick(30)
|
||||||
underTest.dozeTimeTick()
|
|
||||||
assertThat(udfpsBurnInProgress).isEqualTo(burnInProgress)
|
assertThat(udfpsBurnInProgress).isEqualTo(burnInProgress)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun incrementUptimeMillis() {
|
|
||||||
systemClock.setUptimeMillis(systemClock.uptimeMillis() + 5)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setBurnInProgress(progress: Float) {
|
private fun setBurnInProgress(progress: Float) {
|
||||||
burnInProgress = progress
|
burnInProgress = progress
|
||||||
whenever(burnInHelperWrapper.burnInProgressOffset()).thenReturn(burnInProgress)
|
whenever(burnInHelperWrapper.burnInProgressOffset()).thenReturn(burnInProgress)
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ import com.android.systemui.statusbar.phone.SystemUIDialogManager
|
|||||||
import com.android.systemui.util.mockito.argumentCaptor
|
import com.android.systemui.util.mockito.argumentCaptor
|
||||||
import com.android.systemui.util.mockito.eq
|
import com.android.systemui.util.mockito.eq
|
||||||
import com.android.systemui.util.mockito.whenever
|
import com.android.systemui.util.mockito.whenever
|
||||||
import com.android.systemui.util.time.FakeSystemClock
|
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.test.TestScope
|
import kotlinx.coroutines.test.TestScope
|
||||||
@@ -68,6 +67,7 @@ class UdfpsKeyguardInteractorTest : SysuiTestCase() {
|
|||||||
private lateinit var featureFlags: FakeFeatureFlags
|
private lateinit var featureFlags: FakeFeatureFlags
|
||||||
private lateinit var burnInInteractor: BurnInInteractor
|
private lateinit var burnInInteractor: BurnInInteractor
|
||||||
private lateinit var shadeRepository: FakeShadeRepository
|
private lateinit var shadeRepository: FakeShadeRepository
|
||||||
|
private lateinit var keyguardInteractor: KeyguardInteractor
|
||||||
|
|
||||||
@Mock private lateinit var burnInHelper: BurnInHelperWrapper
|
@Mock private lateinit var burnInHelper: BurnInHelperWrapper
|
||||||
@Mock private lateinit var dialogManager: SystemUIDialogManager
|
@Mock private lateinit var dialogManager: SystemUIDialogManager
|
||||||
@@ -79,35 +79,32 @@ class UdfpsKeyguardInteractorTest : SysuiTestCase() {
|
|||||||
MockitoAnnotations.initMocks(this)
|
MockitoAnnotations.initMocks(this)
|
||||||
testScope = TestScope()
|
testScope = TestScope()
|
||||||
configRepository = FakeConfigurationRepository()
|
configRepository = FakeConfigurationRepository()
|
||||||
keyguardRepository = FakeKeyguardRepository()
|
|
||||||
bouncerRepository = FakeKeyguardBouncerRepository()
|
|
||||||
shadeRepository = FakeShadeRepository()
|
|
||||||
fakeCommandQueue = FakeCommandQueue()
|
|
||||||
featureFlags =
|
featureFlags =
|
||||||
FakeFeatureFlags().apply {
|
FakeFeatureFlags().apply {
|
||||||
set(Flags.REFACTOR_UDFPS_KEYGUARD_VIEWS, true)
|
set(Flags.REFACTOR_UDFPS_KEYGUARD_VIEWS, true)
|
||||||
set(Flags.FACE_AUTH_REFACTOR, false)
|
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 =
|
||||||
BurnInInteractor(
|
BurnInInteractor(
|
||||||
context,
|
context,
|
||||||
burnInHelper,
|
burnInHelper,
|
||||||
testScope.backgroundScope,
|
testScope.backgroundScope,
|
||||||
configRepository,
|
configRepository,
|
||||||
FakeSystemClock(),
|
keyguardInteractor
|
||||||
)
|
)
|
||||||
|
|
||||||
underTest =
|
underTest =
|
||||||
UdfpsKeyguardInteractor(
|
UdfpsKeyguardInteractor(
|
||||||
configRepository,
|
configRepository,
|
||||||
burnInInteractor,
|
burnInInteractor,
|
||||||
KeyguardInteractor(
|
keyguardInteractor,
|
||||||
keyguardRepository,
|
|
||||||
fakeCommandQueue,
|
|
||||||
featureFlags,
|
|
||||||
bouncerRepository,
|
|
||||||
configRepository,
|
|
||||||
),
|
|
||||||
shadeRepository,
|
shadeRepository,
|
||||||
dialogManager,
|
dialogManager,
|
||||||
)
|
)
|
||||||
@@ -215,7 +212,7 @@ class UdfpsKeyguardInteractorTest : SysuiTestCase() {
|
|||||||
|
|
||||||
private fun setAwake() {
|
private fun setAwake() {
|
||||||
keyguardRepository.setDozeAmount(0f)
|
keyguardRepository.setDozeAmount(0f)
|
||||||
burnInInteractor.dozeTimeTick()
|
keyguardRepository.dozeTimeTick()
|
||||||
|
|
||||||
bouncerRepository.setAlternateVisible(false)
|
bouncerRepository.setAlternateVisible(false)
|
||||||
keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD)
|
keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD)
|
||||||
|
|||||||
@@ -20,21 +20,19 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
|
|||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.systemui.RoboPilotTest
|
import com.android.systemui.RoboPilotTest
|
||||||
import com.android.systemui.SysuiTestCase
|
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.bouncer.data.repository.KeyguardBouncerRepository
|
||||||
import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository
|
import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository
|
||||||
import com.android.systemui.coroutines.collectLastValue
|
import com.android.systemui.coroutines.collectLastValue
|
||||||
import com.android.systemui.doze.util.BurnInHelperWrapper
|
import com.android.systemui.doze.util.BurnInHelperWrapper
|
||||||
import com.android.systemui.flags.FakeFeatureFlags
|
import com.android.systemui.flags.FakeFeatureFlags
|
||||||
import com.android.systemui.flags.Flags
|
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.data.repository.FakeKeyguardRepository
|
||||||
import com.android.systemui.keyguard.domain.interactor.BurnInInteractor
|
import com.android.systemui.keyguard.domain.interactor.BurnInInteractor
|
||||||
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
|
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.keyguard.domain.interactor.UdfpsKeyguardInteractor
|
||||||
import com.android.systemui.shade.data.repository.FakeShadeRepository
|
import com.android.systemui.shade.data.repository.FakeShadeRepository
|
||||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager
|
import com.android.systemui.statusbar.phone.SystemUIDialogManager
|
||||||
import com.android.systemui.util.time.FakeSystemClock
|
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.test.TestScope
|
import kotlinx.coroutines.test.TestScope
|
||||||
@@ -58,9 +56,9 @@ class UdfpsAodViewModelTest : SysuiTestCase() {
|
|||||||
private lateinit var configRepository: FakeConfigurationRepository
|
private lateinit var configRepository: FakeConfigurationRepository
|
||||||
private lateinit var bouncerRepository: KeyguardBouncerRepository
|
private lateinit var bouncerRepository: KeyguardBouncerRepository
|
||||||
private lateinit var keyguardRepository: FakeKeyguardRepository
|
private lateinit var keyguardRepository: FakeKeyguardRepository
|
||||||
private lateinit var fakeCommandQueue: FakeCommandQueue
|
|
||||||
private lateinit var featureFlags: FakeFeatureFlags
|
private lateinit var featureFlags: FakeFeatureFlags
|
||||||
private lateinit var shadeRepository: FakeShadeRepository
|
private lateinit var shadeRepository: FakeShadeRepository
|
||||||
|
private lateinit var keyguardInteractor: KeyguardInteractor
|
||||||
|
|
||||||
@Mock private lateinit var dialogManager: SystemUIDialogManager
|
@Mock private lateinit var dialogManager: SystemUIDialogManager
|
||||||
@Mock private lateinit var burnInHelper: BurnInHelperWrapper
|
@Mock private lateinit var burnInHelper: BurnInHelperWrapper
|
||||||
@@ -70,17 +68,21 @@ class UdfpsAodViewModelTest : SysuiTestCase() {
|
|||||||
MockitoAnnotations.initMocks(this)
|
MockitoAnnotations.initMocks(this)
|
||||||
overrideResource(com.android.systemui.R.dimen.lock_icon_padding, defaultPadding)
|
overrideResource(com.android.systemui.R.dimen.lock_icon_padding, defaultPadding)
|
||||||
testScope = TestScope()
|
testScope = TestScope()
|
||||||
configRepository = FakeConfigurationRepository()
|
|
||||||
keyguardRepository = FakeKeyguardRepository()
|
|
||||||
bouncerRepository = FakeKeyguardBouncerRepository()
|
|
||||||
fakeCommandQueue = FakeCommandQueue()
|
|
||||||
shadeRepository = FakeShadeRepository()
|
shadeRepository = FakeShadeRepository()
|
||||||
featureFlags =
|
featureFlags =
|
||||||
FakeFeatureFlags().apply {
|
FakeFeatureFlags().apply {
|
||||||
set(Flags.REFACTOR_UDFPS_KEYGUARD_VIEWS, true)
|
set(Flags.REFACTOR_UDFPS_KEYGUARD_VIEWS, true)
|
||||||
set(Flags.FACE_AUTH_REFACTOR, false)
|
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 =
|
val udfpsKeyguardInteractor =
|
||||||
UdfpsKeyguardInteractor(
|
UdfpsKeyguardInteractor(
|
||||||
configRepository,
|
configRepository,
|
||||||
@@ -89,15 +91,9 @@ class UdfpsAodViewModelTest : SysuiTestCase() {
|
|||||||
burnInHelper,
|
burnInHelper,
|
||||||
testScope.backgroundScope,
|
testScope.backgroundScope,
|
||||||
configRepository,
|
configRepository,
|
||||||
FakeSystemClock(),
|
keyguardInteractor,
|
||||||
),
|
|
||||||
KeyguardInteractor(
|
|
||||||
keyguardRepository,
|
|
||||||
fakeCommandQueue,
|
|
||||||
featureFlags,
|
|
||||||
bouncerRepository,
|
|
||||||
configRepository,
|
|
||||||
),
|
),
|
||||||
|
keyguardInteractor,
|
||||||
shadeRepository,
|
shadeRepository,
|
||||||
dialogManager,
|
dialogManager,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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.FakeKeyguardRepository
|
||||||
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
|
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
|
||||||
import com.android.systemui.keyguard.domain.interactor.BurnInInteractor
|
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.KeyguardTransitionInteractor
|
||||||
import com.android.systemui.keyguard.domain.interactor.UdfpsKeyguardInteractor
|
import com.android.systemui.keyguard.domain.interactor.UdfpsKeyguardInteractor
|
||||||
import com.android.systemui.shade.data.repository.FakeShadeRepository
|
import com.android.systemui.shade.data.repository.FakeShadeRepository
|
||||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager
|
import com.android.systemui.statusbar.phone.SystemUIDialogManager
|
||||||
import com.android.systemui.util.time.FakeSystemClock
|
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.test.TestScope
|
import kotlinx.coroutines.test.TestScope
|
||||||
@@ -90,14 +89,10 @@ class UdfpsFingerprintViewModelTest : SysuiTestCase() {
|
|||||||
testScope.backgroundScope,
|
testScope.backgroundScope,
|
||||||
)
|
)
|
||||||
val keyguardInteractor =
|
val keyguardInteractor =
|
||||||
KeyguardInteractor(
|
KeyguardInteractorFactory.create(
|
||||||
keyguardRepository,
|
featureFlags = featureFlags,
|
||||||
fakeCommandQueue,
|
)
|
||||||
featureFlags,
|
.keyguardInteractor
|
||||||
bouncerRepository,
|
|
||||||
configRepository,
|
|
||||||
)
|
|
||||||
|
|
||||||
underTest =
|
underTest =
|
||||||
FingerprintViewModel(
|
FingerprintViewModel(
|
||||||
context,
|
context,
|
||||||
@@ -109,7 +104,7 @@ class UdfpsFingerprintViewModelTest : SysuiTestCase() {
|
|||||||
burnInHelper,
|
burnInHelper,
|
||||||
testScope.backgroundScope,
|
testScope.backgroundScope,
|
||||||
configRepository,
|
configRepository,
|
||||||
FakeSystemClock(),
|
keyguardInteractor,
|
||||||
),
|
),
|
||||||
keyguardInteractor,
|
keyguardInteractor,
|
||||||
shadeRepository,
|
shadeRepository,
|
||||||
|
|||||||
@@ -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.data.repository.FakeKeyguardTransitionRepository
|
||||||
import com.android.systemui.keyguard.domain.interactor.BurnInInteractor
|
import com.android.systemui.keyguard.domain.interactor.BurnInInteractor
|
||||||
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
|
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.KeyguardTransitionInteractor
|
||||||
import com.android.systemui.keyguard.domain.interactor.UdfpsKeyguardInteractor
|
import com.android.systemui.keyguard.domain.interactor.UdfpsKeyguardInteractor
|
||||||
import com.android.systemui.keyguard.shared.model.KeyguardState
|
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.statusbar.phone.SystemUIDialogManager
|
||||||
import com.android.systemui.util.mockito.argumentCaptor
|
import com.android.systemui.util.mockito.argumentCaptor
|
||||||
import com.android.systemui.util.mockito.mock
|
import com.android.systemui.util.mockito.mock
|
||||||
import com.android.systemui.util.time.FakeSystemClock
|
|
||||||
import com.android.wm.shell.animation.Interpolators
|
import com.android.wm.shell.animation.Interpolators
|
||||||
import com.google.common.collect.Range
|
import com.google.common.collect.Range
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
@@ -72,6 +72,7 @@ class UdfpsLockscreenViewModelTest : SysuiTestCase() {
|
|||||||
private lateinit var transitionRepository: FakeKeyguardTransitionRepository
|
private lateinit var transitionRepository: FakeKeyguardTransitionRepository
|
||||||
private lateinit var configRepository: FakeConfigurationRepository
|
private lateinit var configRepository: FakeConfigurationRepository
|
||||||
private lateinit var keyguardRepository: FakeKeyguardRepository
|
private lateinit var keyguardRepository: FakeKeyguardRepository
|
||||||
|
private lateinit var keyguardInteractor: KeyguardInteractor
|
||||||
private lateinit var bouncerRepository: FakeKeyguardBouncerRepository
|
private lateinit var bouncerRepository: FakeKeyguardBouncerRepository
|
||||||
private lateinit var shadeRepository: FakeShadeRepository
|
private lateinit var shadeRepository: FakeShadeRepository
|
||||||
private lateinit var featureFlags: FakeFeatureFlags
|
private lateinit var featureFlags: FakeFeatureFlags
|
||||||
@@ -81,23 +82,21 @@ class UdfpsLockscreenViewModelTest : SysuiTestCase() {
|
|||||||
MockitoAnnotations.initMocks(this)
|
MockitoAnnotations.initMocks(this)
|
||||||
testScope = TestScope()
|
testScope = TestScope()
|
||||||
transitionRepository = FakeKeyguardTransitionRepository()
|
transitionRepository = FakeKeyguardTransitionRepository()
|
||||||
configRepository = FakeConfigurationRepository()
|
|
||||||
keyguardRepository = FakeKeyguardRepository()
|
|
||||||
bouncerRepository = FakeKeyguardBouncerRepository()
|
|
||||||
shadeRepository = FakeShadeRepository()
|
shadeRepository = FakeShadeRepository()
|
||||||
featureFlags =
|
featureFlags =
|
||||||
FakeFeatureFlags().apply {
|
FakeFeatureFlags().apply {
|
||||||
set(Flags.REFACTOR_UDFPS_KEYGUARD_VIEWS, true)
|
set(Flags.REFACTOR_UDFPS_KEYGUARD_VIEWS, true)
|
||||||
set(Flags.FACE_AUTH_REFACTOR, false)
|
set(Flags.FACE_AUTH_REFACTOR, false)
|
||||||
}
|
}
|
||||||
val keyguardInteractor =
|
KeyguardInteractorFactory.create(
|
||||||
KeyguardInteractor(
|
featureFlags = featureFlags,
|
||||||
keyguardRepository,
|
|
||||||
commandQueue = mock(),
|
|
||||||
featureFlags,
|
|
||||||
bouncerRepository,
|
|
||||||
configRepository,
|
|
||||||
)
|
)
|
||||||
|
.also {
|
||||||
|
keyguardInteractor = it.keyguardInteractor
|
||||||
|
keyguardRepository = it.repository
|
||||||
|
configRepository = it.configurationRepository
|
||||||
|
bouncerRepository = it.bouncerRepository
|
||||||
|
}
|
||||||
|
|
||||||
underTest =
|
underTest =
|
||||||
UdfpsLockscreenViewModel(
|
UdfpsLockscreenViewModel(
|
||||||
@@ -115,7 +114,7 @@ class UdfpsLockscreenViewModelTest : SysuiTestCase() {
|
|||||||
burnInHelperWrapper = mock(),
|
burnInHelperWrapper = mock(),
|
||||||
testScope.backgroundScope,
|
testScope.backgroundScope,
|
||||||
configRepository,
|
configRepository,
|
||||||
FakeSystemClock(),
|
keyguardInteractor,
|
||||||
),
|
),
|
||||||
keyguardInteractor,
|
keyguardInteractor,
|
||||||
shadeRepository,
|
shadeRepository,
|
||||||
|
|||||||
@@ -371,6 +371,7 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase {
|
|||||||
mKeyguardLogger,
|
mKeyguardLogger,
|
||||||
mFeatureFlags,
|
mFeatureFlags,
|
||||||
mInteractionJankMonitor,
|
mInteractionJankMonitor,
|
||||||
|
mKeyguardInteractor,
|
||||||
mDumpManager));
|
mDumpManager));
|
||||||
|
|
||||||
when(mAuthController.isUdfpsEnrolled(anyInt())).thenReturn(false);
|
when(mAuthController.isUdfpsEnrolled(anyInt())).thenReturn(false);
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ import com.android.systemui.biometrics.AuthController;
|
|||||||
import com.android.systemui.doze.DozeHost;
|
import com.android.systemui.doze.DozeHost;
|
||||||
import com.android.systemui.doze.DozeLog;
|
import com.android.systemui.doze.DozeLog;
|
||||||
import com.android.systemui.keyguard.WakefulnessLifecycle;
|
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.keyguard.domain.interactor.DozeInteractor;
|
||||||
import com.android.systemui.shade.NotificationShadeWindowViewController;
|
import com.android.systemui.shade.NotificationShadeWindowViewController;
|
||||||
import com.android.systemui.shade.ShadeViewController;
|
import com.android.systemui.shade.ShadeViewController;
|
||||||
@@ -96,7 +95,6 @@ public class DozeServiceHostTest extends SysuiTestCase {
|
|||||||
@Mock private BiometricUnlockController mBiometricUnlockController;
|
@Mock private BiometricUnlockController mBiometricUnlockController;
|
||||||
@Mock private AuthController mAuthController;
|
@Mock private AuthController mAuthController;
|
||||||
@Mock private DozeHost.Callback mCallback;
|
@Mock private DozeHost.Callback mCallback;
|
||||||
@Mock private BurnInInteractor mBurnInInteractor;
|
|
||||||
|
|
||||||
@Mock private DozeInteractor mDozeInteractor;
|
@Mock private DozeInteractor mDozeInteractor;
|
||||||
@Before
|
@Before
|
||||||
@@ -108,8 +106,7 @@ public class DozeServiceHostTest extends SysuiTestCase {
|
|||||||
() -> mAssistManager, mDozeScrimController,
|
() -> mAssistManager, mDozeScrimController,
|
||||||
mKeyguardUpdateMonitor, mPulseExpansionHandler,
|
mKeyguardUpdateMonitor, mPulseExpansionHandler,
|
||||||
mNotificationShadeWindowController, mNotificationWakeUpCoordinator,
|
mNotificationShadeWindowController, mNotificationWakeUpCoordinator,
|
||||||
mAuthController, mNotificationIconAreaController, mDozeInteractor,
|
mAuthController, mNotificationIconAreaController, mDozeInteractor);
|
||||||
mBurnInInteractor);
|
|
||||||
|
|
||||||
mDozeServiceHost.initialize(
|
mDozeServiceHost.initialize(
|
||||||
mCentralSurfaces,
|
mCentralSurfaces,
|
||||||
@@ -234,11 +231,11 @@ public class DozeServiceHostTest extends SysuiTestCase {
|
|||||||
verifyZeroInteractions(mDozeInteractor);
|
verifyZeroInteractions(mDozeInteractor);
|
||||||
}
|
}
|
||||||
@Test
|
@Test
|
||||||
public void dozeTimeTickSentTBurnInInteractor() {
|
public void dozeTimeTickSentToDozeInteractor() {
|
||||||
// WHEN dozeTimeTick
|
// WHEN dozeTimeTick
|
||||||
mDozeServiceHost.dozeTimeTick();
|
mDozeServiceHost.dozeTimeTick();
|
||||||
|
|
||||||
// THEN burnInInteractor's dozeTimeTick is updated
|
// THEN dozeInteractor's dozeTimeTick is updated
|
||||||
verify(mBurnInInteractor).dozeTimeTick();
|
verify(mDozeInteractor).dozeTimeTick();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.WakefulnessModel
|
||||||
import com.android.systemui.keyguard.shared.model.WakefulnessState
|
import com.android.systemui.keyguard.shared.model.WakefulnessState
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import kotlinx.coroutines.flow.asStateFlow
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
@@ -60,7 +59,7 @@ class FakeKeyguardRepository : KeyguardRepository {
|
|||||||
private val _isDozing = MutableStateFlow(false)
|
private val _isDozing = MutableStateFlow(false)
|
||||||
override val isDozing: StateFlow<Boolean> = _isDozing
|
override val isDozing: StateFlow<Boolean> = _isDozing
|
||||||
|
|
||||||
private val _dozeTimeTick = MutableSharedFlow<Unit>()
|
private val _dozeTimeTick = MutableStateFlow<Long>(0L)
|
||||||
override val dozeTimeTick = _dozeTimeTick
|
override val dozeTimeTick = _dozeTimeTick
|
||||||
|
|
||||||
private val _lastDozeTapToWakePosition = MutableStateFlow<Point?>(null)
|
private val _lastDozeTapToWakePosition = MutableStateFlow<Point?>(null)
|
||||||
@@ -174,7 +173,11 @@ class FakeKeyguardRepository : KeyguardRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun dozeTimeTick() {
|
override fun dozeTimeTick() {
|
||||||
_dozeTimeTick.tryEmit(Unit)
|
_dozeTimeTick.value = _dozeTimeTick.value + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
fun dozeTimeTick(millis: Long) {
|
||||||
|
_dozeTimeTick.value = millis
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setLastDozeTapToWakePosition(position: Point) {
|
override fun setLastDozeTapToWakePosition(position: Point) {
|
||||||
@@ -237,6 +240,10 @@ class FakeKeyguardRepository : KeyguardRepository {
|
|||||||
_isBypassEnabled = isEnabled
|
_isBypassEnabled = isEnabled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setScreenModel(screenModel: ScreenModel) {
|
||||||
|
_screenModel.value = screenModel
|
||||||
|
}
|
||||||
|
|
||||||
override fun isUdfpsSupported(): Boolean {
|
override fun isUdfpsSupported(): Boolean {
|
||||||
return _isUdfpsSupported.value
|
return _isUdfpsSupported.value
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user