Loading packages/SystemUI/src/com/android/systemui/assist/AssistHandleLikeHomeBehavior.java +37 −9 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import androidx.annotation.Nullable; import com.android.systemui.assist.AssistHandleBehaviorController.BehaviorController; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.shared.system.QuickStepContract; Loading @@ -39,26 +40,33 @@ import dagger.Lazy; @Singleton final class AssistHandleLikeHomeBehavior implements BehaviorController { private final StatusBarStateController.StateListener mStatusBarStateListener = new StatusBarStateController.StateListener() { @Override public void onDozingChanged(boolean isDozing) { handleDozingChanged(isDozing); } }; private final WakefulnessLifecycle.Observer mWakefulnessLifecycleObserver = new WakefulnessLifecycle.Observer() { @Override public void onStartedWakingUp() { handleDozingChanged(/* isDozing = */ true); handleWakefullnessChanged(/* isAwake = */ false); } @Override public void onFinishedWakingUp() { handleDozingChanged(/* isDozing = */ false); handleWakefullnessChanged(/* isAwake = */ true); } @Override public void onStartedGoingToSleep() { handleDozingChanged(/* isDozing = */ true); handleWakefullnessChanged(/* isAwake = */ false); } @Override public void onFinishedGoingToSleep() { handleDozingChanged(/* isDozing = */ true); handleWakefullnessChanged(/* isAwake = */ false); } }; private final OverviewProxyService.OverviewProxyListener mOverviewProxyListener = Loading @@ -69,19 +77,22 @@ final class AssistHandleLikeHomeBehavior implements BehaviorController { } }; private final Lazy<StatusBarStateController> mStatusBarStateController; private final Lazy<WakefulnessLifecycle> mWakefulnessLifecycle; private final Lazy<OverviewProxyService> mOverviewProxyService; private boolean mIsDozing; private boolean mIsAwake; private boolean mIsHomeHandleHiding; @Nullable private AssistHandleCallbacks mAssistHandleCallbacks; @Inject AssistHandleLikeHomeBehavior( Lazy<StatusBarStateController> statusBarStateController, Lazy<WakefulnessLifecycle> wakefulnessLifecycle, Lazy<OverviewProxyService> overviewProxyService) { mStatusBarStateController = statusBarStateController; mWakefulnessLifecycle = wakefulnessLifecycle; mOverviewProxyService = overviewProxyService; } Loading @@ -89,8 +100,10 @@ final class AssistHandleLikeHomeBehavior implements BehaviorController { @Override public void onModeActivated(Context context, AssistHandleCallbacks callbacks) { mAssistHandleCallbacks = callbacks; mIsDozing = mWakefulnessLifecycle.get().getWakefulness() != WakefulnessLifecycle.WAKEFULNESS_AWAKE; mIsDozing = mStatusBarStateController.get().isDozing(); mStatusBarStateController.get().addCallback(mStatusBarStateListener); mIsAwake = mWakefulnessLifecycle.get().getWakefulness() == WakefulnessLifecycle.WAKEFULNESS_AWAKE; mWakefulnessLifecycle.get().addObserver(mWakefulnessLifecycleObserver); mOverviewProxyService.get().addCallback(mOverviewProxyListener); callbackForCurrentState(); Loading @@ -99,6 +112,7 @@ final class AssistHandleLikeHomeBehavior implements BehaviorController { @Override public void onModeDeactivated() { mAssistHandleCallbacks = null; mStatusBarStateController.get().removeCallback(mStatusBarStateListener); mWakefulnessLifecycle.get().removeObserver(mWakefulnessLifecycleObserver); mOverviewProxyService.get().removeCallback(mOverviewProxyListener); } Loading @@ -116,6 +130,15 @@ final class AssistHandleLikeHomeBehavior implements BehaviorController { callbackForCurrentState(); } private void handleWakefullnessChanged(boolean isAwake) { if (mIsAwake == isAwake) { return; } mIsAwake = isAwake; callbackForCurrentState(); } private void handleSystemUiStateChange(int sysuiStateFlags) { boolean isHomeHandleHiding = isHomeHandleHiding(sysuiStateFlags); if (mIsHomeHandleHiding == isHomeHandleHiding) { Loading @@ -131,18 +154,23 @@ final class AssistHandleLikeHomeBehavior implements BehaviorController { return; } if (mIsHomeHandleHiding || mIsDozing) { if (mIsHomeHandleHiding || !isFullyAwake()) { mAssistHandleCallbacks.hide(); } else { mAssistHandleCallbacks.showAndStay(); } } private boolean isFullyAwake() { return mIsAwake && !mIsDozing; } @Override public void dump(PrintWriter pw, String prefix) { pw.println("Current AssistHandleLikeHomeBehavior State:"); pw.println(prefix + "Current AssistHandleLikeHomeBehavior State:"); pw.println(prefix + " mIsDozing=" + mIsDozing); pw.println(prefix + " mIsAwake=" + mIsAwake); pw.println(prefix + " mIsHomeHandleHiding=" + mIsHomeHandleHiding); } } packages/SystemUI/src/com/android/systemui/assist/AssistHandleReminderExpBehavior.java +43 −8 Original line number Diff line number Diff line Loading @@ -93,6 +93,11 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { public void onStateChanged(int newState) { handleStatusBarStateChanged(newState); } @Override public void onDozingChanged(boolean isDozing) { handleDozingChanged(isDozing); } }; private final TaskStackChangeListener mTaskStackChangeListener = new TaskStackChangeListener() { Loading Loading @@ -120,14 +125,24 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { }; private final WakefulnessLifecycle.Observer mWakefulnessLifecycleObserver = new WakefulnessLifecycle.Observer() { @Override public void onStartedWakingUp() { handleWakefullnessChanged(/* isAwake = */ false); } @Override public void onFinishedWakingUp() { handleDozingChanged(false); handleWakefullnessChanged(/* isAwake = */ true); } @Override public void onStartedGoingToSleep() { handleDozingChanged(true); handleWakefullnessChanged(/* isAwake = */ false); } @Override public void onFinishedGoingToSleep() { handleWakefullnessChanged(/* isAwake = */ false); } }; private final BroadcastReceiver mDefaultHomeBroadcastReceiver = new BroadcastReceiver() { Loading @@ -150,6 +165,7 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { private boolean mOnLockscreen; private boolean mIsDozing; private boolean mIsAwake; private int mRunningTaskId; private boolean mIsNavBarHidden; private boolean mIsLauncherShowing; Loading Loading @@ -200,14 +216,15 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { mDefaultHome = getCurrentDefaultHome(); context.registerReceiver(mDefaultHomeBroadcastReceiver, mDefaultHomeIntentFilter); mOnLockscreen = onLockscreen(mStatusBarStateController.get().getState()); mIsDozing = mStatusBarStateController.get().isDozing(); mStatusBarStateController.get().addCallback(mStatusBarStateListener); ActivityManager.RunningTaskInfo runningTaskInfo = mActivityManagerWrapper.get().getRunningTask(); mRunningTaskId = runningTaskInfo == null ? 0 : runningTaskInfo.taskId; mActivityManagerWrapper.get().registerTaskStackListener(mTaskStackChangeListener); mOverviewProxyService.get().addCallback(mOverviewProxyListener); mIsDozing = mWakefulnessLifecycle.get().getWakefulness() != WakefulnessLifecycle.WAKEFULNESS_AWAKE; mIsAwake = mWakefulnessLifecycle.get().getWakefulness() == WakefulnessLifecycle.WAKEFULNESS_AWAKE; mWakefulnessLifecycle.get().addObserver(mWakefulnessLifecycleObserver); mLearningTimeElapsed = Settings.Secure.getLong( Loading Loading @@ -249,7 +266,10 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { @Override public void onAssistHandlesRequested() { if (mAssistHandleCallbacks != null && !mIsDozing && !mIsNavBarHidden && !mOnLockscreen) { if (mAssistHandleCallbacks != null && isFullyAwake() && !mIsNavBarHidden && !mOnLockscreen) { mAssistHandleCallbacks.showAndGo(); } } Loading Loading @@ -296,6 +316,16 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { callbackForCurrentState(/* justUnlocked = */ false); } private void handleWakefullnessChanged(boolean isAwake) { if (mIsAwake == isAwake) { return; } resetConsecutiveTaskSwitches(); mIsAwake = isAwake; callbackForCurrentState(/* justUnlocked = */ false); } private void handleTaskStackTopChanged(int taskId, @Nullable ComponentName taskComponentName) { if (mRunningTaskId == taskId || taskComponentName == null) { return; Loading Loading @@ -349,7 +379,7 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { return; } if (mIsDozing || mIsNavBarHidden || mOnLockscreen || !getShowWhenTaught()) { if (!isFullyAwake() || mIsNavBarHidden || mOnLockscreen || !getShowWhenTaught()) { mAssistHandleCallbacks.hide(); } else if (justUnlocked) { long currentEpochDay = LocalDate.now().toEpochDay(); Loading @@ -371,7 +401,7 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { return; } if (mIsDozing || mIsNavBarHidden || isSuppressed()) { if (!isFullyAwake() || mIsNavBarHidden || isSuppressed()) { mAssistHandleCallbacks.hide(); } else if (mOnLockscreen) { mAssistHandleCallbacks.showAndStay(); Loading Loading @@ -422,6 +452,10 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { mHandler.postDelayed(mResetConsecutiveTaskSwitches, getShowAndGoDelayResetTimeoutMs()); } private boolean isFullyAwake() { return mIsAwake && !mIsDozing; } private long getLearningTimeMs() { return mPhenotypeHelper.getLong( SystemUiDeviceConfigFlags.ASSIST_HANDLES_LEARN_TIME_MS, Loading Loading @@ -481,6 +515,7 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { pw.println(prefix + "Current AssistHandleReminderExpBehavior State:"); pw.println(prefix + " mOnLockscreen=" + mOnLockscreen); pw.println(prefix + " mIsDozing=" + mIsDozing); pw.println(prefix + " mIsAwake=" + mIsAwake); pw.println(prefix + " mRunningTaskId=" + mRunningTaskId); pw.println(prefix + " mDefaultHome=" + mDefaultHome); pw.println(prefix + " mIsNavBarHidden=" + mIsNavBarHidden); Loading packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleLikeHomeBehaviorTest.java +136 −22 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.shared.system.QuickStepContract; Loading @@ -47,6 +48,7 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { private AssistHandleLikeHomeBehavior mAssistHandleLikeHomeBehavior; @Mock private StatusBarStateController mMockStatusBarStateController; @Mock private WakefulnessLifecycle mMockWakefulnessLifecycle; @Mock private OverviewProxyService mMockOverviewProxyService; @Mock private AssistHandleCallbacks mMockAssistHandleCallbacks; Loading @@ -55,7 +57,9 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { public void setup() { MockitoAnnotations.initMocks(this); mAssistHandleLikeHomeBehavior = new AssistHandleLikeHomeBehavior( () -> mMockWakefulnessLifecycle, () -> mMockOverviewProxyService); () -> mMockStatusBarStateController, () -> mMockWakefulnessLifecycle, () -> mMockOverviewProxyService); } @Test Loading @@ -66,6 +70,9 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); // Assert verify(mMockStatusBarStateController).isDozing(); verify(mMockStatusBarStateController).addCallback( any(StatusBarStateController.StateListener.class)); verify(mMockWakefulnessLifecycle).getWakefulness(); verify(mMockWakefulnessLifecycle).addObserver(any(WakefulnessLifecycle.Observer.class)); verify(mMockOverviewProxyService).addCallback(any( Loading @@ -74,8 +81,9 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { } @Test public void onModeActivated_showsHandlesWhenAwake() { public void onModeActivated_showsHandlesWhenFullyAwake() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(false); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); Loading @@ -90,6 +98,7 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { @Test public void onModeActivated_hidesHandlesWhenNotAwake() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(true); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_ASLEEP); Loading @@ -101,73 +110,140 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { verifyNoMoreInteractions(mMockAssistHandleCallbacks); } @Test public void onModeActivated_hidesHandlesWhenDozing() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(true); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); // Act mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions(mMockAssistHandleCallbacks); } @Test public void onModeDeactivated_stopsObserving() { // Arrange mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); ArgumentCaptor<StatusBarStateController.StateListener> stateListener = ArgumentCaptor.forClass(StatusBarStateController.StateListener.class); ArgumentCaptor<WakefulnessLifecycle.Observer> observer = ArgumentCaptor.forClass(WakefulnessLifecycle.Observer.class); ArgumentCaptor<OverviewProxyService.OverviewProxyListener> overviewProxyListener = ArgumentCaptor.forClass(OverviewProxyService.OverviewProxyListener.class); verify(mMockStatusBarStateController).addCallback(stateListener.capture()); verify(mMockWakefulnessLifecycle).addObserver(observer.capture()); verify(mMockOverviewProxyService).addCallback(overviewProxyListener.capture()); reset(mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act mAssistHandleLikeHomeBehavior.onModeDeactivated(); // Assert verify(mMockStatusBarStateController).removeCallback(eq(stateListener.getValue())); verify(mMockWakefulnessLifecycle).removeObserver(eq(observer.getValue())); verify(mMockOverviewProxyService).removeCallback(eq(overviewProxyListener.getValue())); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); } @Test public void onAssistantGesturePerformed_doesNothing() { // Arrange mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); reset(mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act mAssistHandleLikeHomeBehavior.onAssistantGesturePerformed(); // Assert verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); } @Test public void onAssistHandlesRequested_doesNothing() { // Arrange mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); reset(mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act mAssistHandleLikeHomeBehavior.onAssistHandlesRequested(); // Assert verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); } @Test public void onWake_handlesShow() { public void onBothAwakeAndUnDoze_handlesShow() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(true); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_ASLEEP); ArgumentCaptor<StatusBarStateController.StateListener> stateListener = ArgumentCaptor.forClass(StatusBarStateController.StateListener.class); ArgumentCaptor<WakefulnessLifecycle.Observer> observer = ArgumentCaptor.forClass(WakefulnessLifecycle.Observer.class); mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); verify(mMockStatusBarStateController).addCallback(stateListener.capture()); verify(mMockWakefulnessLifecycle).addObserver(observer.capture()); reset(mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act observer.getValue().onStartedWakingUp(); observer.getValue().onFinishedWakingUp(); // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Arrange observer.getValue().onFinishedGoingToSleep(); reset(mMockAssistHandleCallbacks); // Act stateListener.getValue().onDozingChanged(false); // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act observer.getValue().onFinishedWakingUp(); Loading @@ -175,19 +251,30 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).showAndStay(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); } @Test public void onSleep_handlesHide() { public void onSleepOrDoze_handlesHide() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(false); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); ArgumentCaptor<StatusBarStateController.StateListener> stateListener = ArgumentCaptor.forClass(StatusBarStateController.StateListener.class); ArgumentCaptor<WakefulnessLifecycle.Observer> observer = ArgumentCaptor.forClass(WakefulnessLifecycle.Observer.class); mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); verify(mMockStatusBarStateController).addCallback(stateListener.capture()); verify(mMockWakefulnessLifecycle).addObserver(observer.capture()); reset(mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act observer.getValue().onStartedGoingToSleep(); Loading @@ -195,26 +282,42 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Arrange observer.getValue().onFinishedWakingUp(); reset(mMockAssistHandleCallbacks); // Act observer.getValue().onFinishedGoingToSleep(); stateListener.getValue().onDozingChanged(true); // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); } @Test public void onHomeHandleHide_handlesHide() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(false); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); ArgumentCaptor<OverviewProxyService.OverviewProxyListener> sysUiStateCallback = ArgumentCaptor.forClass(OverviewProxyService.OverviewProxyListener.class); mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); verify(mMockOverviewProxyService).addCallback(sysUiStateCallback.capture()); reset(mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act sysUiStateCallback.getValue().onSystemUiStateChanged( Loading @@ -223,12 +326,16 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); } @Test public void onHomeHandleUnhide_handlesShow() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(false); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); ArgumentCaptor<OverviewProxyService.OverviewProxyListener> sysUiStateCallback = Loading @@ -237,7 +344,11 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { verify(mMockOverviewProxyService).addCallback(sysUiStateCallback.capture()); sysUiStateCallback.getValue().onSystemUiStateChanged( QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN); reset(mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act sysUiStateCallback.getValue().onSystemUiStateChanged( Loading @@ -246,6 +357,9 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).showAndStay(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); } } Loading
packages/SystemUI/src/com/android/systemui/assist/AssistHandleLikeHomeBehavior.java +37 −9 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import androidx.annotation.Nullable; import com.android.systemui.assist.AssistHandleBehaviorController.BehaviorController; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.shared.system.QuickStepContract; Loading @@ -39,26 +40,33 @@ import dagger.Lazy; @Singleton final class AssistHandleLikeHomeBehavior implements BehaviorController { private final StatusBarStateController.StateListener mStatusBarStateListener = new StatusBarStateController.StateListener() { @Override public void onDozingChanged(boolean isDozing) { handleDozingChanged(isDozing); } }; private final WakefulnessLifecycle.Observer mWakefulnessLifecycleObserver = new WakefulnessLifecycle.Observer() { @Override public void onStartedWakingUp() { handleDozingChanged(/* isDozing = */ true); handleWakefullnessChanged(/* isAwake = */ false); } @Override public void onFinishedWakingUp() { handleDozingChanged(/* isDozing = */ false); handleWakefullnessChanged(/* isAwake = */ true); } @Override public void onStartedGoingToSleep() { handleDozingChanged(/* isDozing = */ true); handleWakefullnessChanged(/* isAwake = */ false); } @Override public void onFinishedGoingToSleep() { handleDozingChanged(/* isDozing = */ true); handleWakefullnessChanged(/* isAwake = */ false); } }; private final OverviewProxyService.OverviewProxyListener mOverviewProxyListener = Loading @@ -69,19 +77,22 @@ final class AssistHandleLikeHomeBehavior implements BehaviorController { } }; private final Lazy<StatusBarStateController> mStatusBarStateController; private final Lazy<WakefulnessLifecycle> mWakefulnessLifecycle; private final Lazy<OverviewProxyService> mOverviewProxyService; private boolean mIsDozing; private boolean mIsAwake; private boolean mIsHomeHandleHiding; @Nullable private AssistHandleCallbacks mAssistHandleCallbacks; @Inject AssistHandleLikeHomeBehavior( Lazy<StatusBarStateController> statusBarStateController, Lazy<WakefulnessLifecycle> wakefulnessLifecycle, Lazy<OverviewProxyService> overviewProxyService) { mStatusBarStateController = statusBarStateController; mWakefulnessLifecycle = wakefulnessLifecycle; mOverviewProxyService = overviewProxyService; } Loading @@ -89,8 +100,10 @@ final class AssistHandleLikeHomeBehavior implements BehaviorController { @Override public void onModeActivated(Context context, AssistHandleCallbacks callbacks) { mAssistHandleCallbacks = callbacks; mIsDozing = mWakefulnessLifecycle.get().getWakefulness() != WakefulnessLifecycle.WAKEFULNESS_AWAKE; mIsDozing = mStatusBarStateController.get().isDozing(); mStatusBarStateController.get().addCallback(mStatusBarStateListener); mIsAwake = mWakefulnessLifecycle.get().getWakefulness() == WakefulnessLifecycle.WAKEFULNESS_AWAKE; mWakefulnessLifecycle.get().addObserver(mWakefulnessLifecycleObserver); mOverviewProxyService.get().addCallback(mOverviewProxyListener); callbackForCurrentState(); Loading @@ -99,6 +112,7 @@ final class AssistHandleLikeHomeBehavior implements BehaviorController { @Override public void onModeDeactivated() { mAssistHandleCallbacks = null; mStatusBarStateController.get().removeCallback(mStatusBarStateListener); mWakefulnessLifecycle.get().removeObserver(mWakefulnessLifecycleObserver); mOverviewProxyService.get().removeCallback(mOverviewProxyListener); } Loading @@ -116,6 +130,15 @@ final class AssistHandleLikeHomeBehavior implements BehaviorController { callbackForCurrentState(); } private void handleWakefullnessChanged(boolean isAwake) { if (mIsAwake == isAwake) { return; } mIsAwake = isAwake; callbackForCurrentState(); } private void handleSystemUiStateChange(int sysuiStateFlags) { boolean isHomeHandleHiding = isHomeHandleHiding(sysuiStateFlags); if (mIsHomeHandleHiding == isHomeHandleHiding) { Loading @@ -131,18 +154,23 @@ final class AssistHandleLikeHomeBehavior implements BehaviorController { return; } if (mIsHomeHandleHiding || mIsDozing) { if (mIsHomeHandleHiding || !isFullyAwake()) { mAssistHandleCallbacks.hide(); } else { mAssistHandleCallbacks.showAndStay(); } } private boolean isFullyAwake() { return mIsAwake && !mIsDozing; } @Override public void dump(PrintWriter pw, String prefix) { pw.println("Current AssistHandleLikeHomeBehavior State:"); pw.println(prefix + "Current AssistHandleLikeHomeBehavior State:"); pw.println(prefix + " mIsDozing=" + mIsDozing); pw.println(prefix + " mIsAwake=" + mIsAwake); pw.println(prefix + " mIsHomeHandleHiding=" + mIsHomeHandleHiding); } }
packages/SystemUI/src/com/android/systemui/assist/AssistHandleReminderExpBehavior.java +43 −8 Original line number Diff line number Diff line Loading @@ -93,6 +93,11 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { public void onStateChanged(int newState) { handleStatusBarStateChanged(newState); } @Override public void onDozingChanged(boolean isDozing) { handleDozingChanged(isDozing); } }; private final TaskStackChangeListener mTaskStackChangeListener = new TaskStackChangeListener() { Loading Loading @@ -120,14 +125,24 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { }; private final WakefulnessLifecycle.Observer mWakefulnessLifecycleObserver = new WakefulnessLifecycle.Observer() { @Override public void onStartedWakingUp() { handleWakefullnessChanged(/* isAwake = */ false); } @Override public void onFinishedWakingUp() { handleDozingChanged(false); handleWakefullnessChanged(/* isAwake = */ true); } @Override public void onStartedGoingToSleep() { handleDozingChanged(true); handleWakefullnessChanged(/* isAwake = */ false); } @Override public void onFinishedGoingToSleep() { handleWakefullnessChanged(/* isAwake = */ false); } }; private final BroadcastReceiver mDefaultHomeBroadcastReceiver = new BroadcastReceiver() { Loading @@ -150,6 +165,7 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { private boolean mOnLockscreen; private boolean mIsDozing; private boolean mIsAwake; private int mRunningTaskId; private boolean mIsNavBarHidden; private boolean mIsLauncherShowing; Loading Loading @@ -200,14 +216,15 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { mDefaultHome = getCurrentDefaultHome(); context.registerReceiver(mDefaultHomeBroadcastReceiver, mDefaultHomeIntentFilter); mOnLockscreen = onLockscreen(mStatusBarStateController.get().getState()); mIsDozing = mStatusBarStateController.get().isDozing(); mStatusBarStateController.get().addCallback(mStatusBarStateListener); ActivityManager.RunningTaskInfo runningTaskInfo = mActivityManagerWrapper.get().getRunningTask(); mRunningTaskId = runningTaskInfo == null ? 0 : runningTaskInfo.taskId; mActivityManagerWrapper.get().registerTaskStackListener(mTaskStackChangeListener); mOverviewProxyService.get().addCallback(mOverviewProxyListener); mIsDozing = mWakefulnessLifecycle.get().getWakefulness() != WakefulnessLifecycle.WAKEFULNESS_AWAKE; mIsAwake = mWakefulnessLifecycle.get().getWakefulness() == WakefulnessLifecycle.WAKEFULNESS_AWAKE; mWakefulnessLifecycle.get().addObserver(mWakefulnessLifecycleObserver); mLearningTimeElapsed = Settings.Secure.getLong( Loading Loading @@ -249,7 +266,10 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { @Override public void onAssistHandlesRequested() { if (mAssistHandleCallbacks != null && !mIsDozing && !mIsNavBarHidden && !mOnLockscreen) { if (mAssistHandleCallbacks != null && isFullyAwake() && !mIsNavBarHidden && !mOnLockscreen) { mAssistHandleCallbacks.showAndGo(); } } Loading Loading @@ -296,6 +316,16 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { callbackForCurrentState(/* justUnlocked = */ false); } private void handleWakefullnessChanged(boolean isAwake) { if (mIsAwake == isAwake) { return; } resetConsecutiveTaskSwitches(); mIsAwake = isAwake; callbackForCurrentState(/* justUnlocked = */ false); } private void handleTaskStackTopChanged(int taskId, @Nullable ComponentName taskComponentName) { if (mRunningTaskId == taskId || taskComponentName == null) { return; Loading Loading @@ -349,7 +379,7 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { return; } if (mIsDozing || mIsNavBarHidden || mOnLockscreen || !getShowWhenTaught()) { if (!isFullyAwake() || mIsNavBarHidden || mOnLockscreen || !getShowWhenTaught()) { mAssistHandleCallbacks.hide(); } else if (justUnlocked) { long currentEpochDay = LocalDate.now().toEpochDay(); Loading @@ -371,7 +401,7 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { return; } if (mIsDozing || mIsNavBarHidden || isSuppressed()) { if (!isFullyAwake() || mIsNavBarHidden || isSuppressed()) { mAssistHandleCallbacks.hide(); } else if (mOnLockscreen) { mAssistHandleCallbacks.showAndStay(); Loading Loading @@ -422,6 +452,10 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { mHandler.postDelayed(mResetConsecutiveTaskSwitches, getShowAndGoDelayResetTimeoutMs()); } private boolean isFullyAwake() { return mIsAwake && !mIsDozing; } private long getLearningTimeMs() { return mPhenotypeHelper.getLong( SystemUiDeviceConfigFlags.ASSIST_HANDLES_LEARN_TIME_MS, Loading Loading @@ -481,6 +515,7 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { pw.println(prefix + "Current AssistHandleReminderExpBehavior State:"); pw.println(prefix + " mOnLockscreen=" + mOnLockscreen); pw.println(prefix + " mIsDozing=" + mIsDozing); pw.println(prefix + " mIsAwake=" + mIsAwake); pw.println(prefix + " mRunningTaskId=" + mRunningTaskId); pw.println(prefix + " mDefaultHome=" + mDefaultHome); pw.println(prefix + " mIsNavBarHidden=" + mIsNavBarHidden); Loading
packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleLikeHomeBehaviorTest.java +136 −22 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.shared.system.QuickStepContract; Loading @@ -47,6 +48,7 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { private AssistHandleLikeHomeBehavior mAssistHandleLikeHomeBehavior; @Mock private StatusBarStateController mMockStatusBarStateController; @Mock private WakefulnessLifecycle mMockWakefulnessLifecycle; @Mock private OverviewProxyService mMockOverviewProxyService; @Mock private AssistHandleCallbacks mMockAssistHandleCallbacks; Loading @@ -55,7 +57,9 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { public void setup() { MockitoAnnotations.initMocks(this); mAssistHandleLikeHomeBehavior = new AssistHandleLikeHomeBehavior( () -> mMockWakefulnessLifecycle, () -> mMockOverviewProxyService); () -> mMockStatusBarStateController, () -> mMockWakefulnessLifecycle, () -> mMockOverviewProxyService); } @Test Loading @@ -66,6 +70,9 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); // Assert verify(mMockStatusBarStateController).isDozing(); verify(mMockStatusBarStateController).addCallback( any(StatusBarStateController.StateListener.class)); verify(mMockWakefulnessLifecycle).getWakefulness(); verify(mMockWakefulnessLifecycle).addObserver(any(WakefulnessLifecycle.Observer.class)); verify(mMockOverviewProxyService).addCallback(any( Loading @@ -74,8 +81,9 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { } @Test public void onModeActivated_showsHandlesWhenAwake() { public void onModeActivated_showsHandlesWhenFullyAwake() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(false); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); Loading @@ -90,6 +98,7 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { @Test public void onModeActivated_hidesHandlesWhenNotAwake() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(true); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_ASLEEP); Loading @@ -101,73 +110,140 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { verifyNoMoreInteractions(mMockAssistHandleCallbacks); } @Test public void onModeActivated_hidesHandlesWhenDozing() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(true); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); // Act mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions(mMockAssistHandleCallbacks); } @Test public void onModeDeactivated_stopsObserving() { // Arrange mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); ArgumentCaptor<StatusBarStateController.StateListener> stateListener = ArgumentCaptor.forClass(StatusBarStateController.StateListener.class); ArgumentCaptor<WakefulnessLifecycle.Observer> observer = ArgumentCaptor.forClass(WakefulnessLifecycle.Observer.class); ArgumentCaptor<OverviewProxyService.OverviewProxyListener> overviewProxyListener = ArgumentCaptor.forClass(OverviewProxyService.OverviewProxyListener.class); verify(mMockStatusBarStateController).addCallback(stateListener.capture()); verify(mMockWakefulnessLifecycle).addObserver(observer.capture()); verify(mMockOverviewProxyService).addCallback(overviewProxyListener.capture()); reset(mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act mAssistHandleLikeHomeBehavior.onModeDeactivated(); // Assert verify(mMockStatusBarStateController).removeCallback(eq(stateListener.getValue())); verify(mMockWakefulnessLifecycle).removeObserver(eq(observer.getValue())); verify(mMockOverviewProxyService).removeCallback(eq(overviewProxyListener.getValue())); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); } @Test public void onAssistantGesturePerformed_doesNothing() { // Arrange mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); reset(mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act mAssistHandleLikeHomeBehavior.onAssistantGesturePerformed(); // Assert verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); } @Test public void onAssistHandlesRequested_doesNothing() { // Arrange mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); reset(mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act mAssistHandleLikeHomeBehavior.onAssistHandlesRequested(); // Assert verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); } @Test public void onWake_handlesShow() { public void onBothAwakeAndUnDoze_handlesShow() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(true); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_ASLEEP); ArgumentCaptor<StatusBarStateController.StateListener> stateListener = ArgumentCaptor.forClass(StatusBarStateController.StateListener.class); ArgumentCaptor<WakefulnessLifecycle.Observer> observer = ArgumentCaptor.forClass(WakefulnessLifecycle.Observer.class); mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); verify(mMockStatusBarStateController).addCallback(stateListener.capture()); verify(mMockWakefulnessLifecycle).addObserver(observer.capture()); reset(mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act observer.getValue().onStartedWakingUp(); observer.getValue().onFinishedWakingUp(); // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Arrange observer.getValue().onFinishedGoingToSleep(); reset(mMockAssistHandleCallbacks); // Act stateListener.getValue().onDozingChanged(false); // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act observer.getValue().onFinishedWakingUp(); Loading @@ -175,19 +251,30 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).showAndStay(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); } @Test public void onSleep_handlesHide() { public void onSleepOrDoze_handlesHide() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(false); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); ArgumentCaptor<StatusBarStateController.StateListener> stateListener = ArgumentCaptor.forClass(StatusBarStateController.StateListener.class); ArgumentCaptor<WakefulnessLifecycle.Observer> observer = ArgumentCaptor.forClass(WakefulnessLifecycle.Observer.class); mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); verify(mMockStatusBarStateController).addCallback(stateListener.capture()); verify(mMockWakefulnessLifecycle).addObserver(observer.capture()); reset(mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act observer.getValue().onStartedGoingToSleep(); Loading @@ -195,26 +282,42 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Arrange observer.getValue().onFinishedWakingUp(); reset(mMockAssistHandleCallbacks); // Act observer.getValue().onFinishedGoingToSleep(); stateListener.getValue().onDozingChanged(true); // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); } @Test public void onHomeHandleHide_handlesHide() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(false); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); ArgumentCaptor<OverviewProxyService.OverviewProxyListener> sysUiStateCallback = ArgumentCaptor.forClass(OverviewProxyService.OverviewProxyListener.class); mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); verify(mMockOverviewProxyService).addCallback(sysUiStateCallback.capture()); reset(mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act sysUiStateCallback.getValue().onSystemUiStateChanged( Loading @@ -223,12 +326,16 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); } @Test public void onHomeHandleUnhide_handlesShow() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(false); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); ArgumentCaptor<OverviewProxyService.OverviewProxyListener> sysUiStateCallback = Loading @@ -237,7 +344,11 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { verify(mMockOverviewProxyService).addCallback(sysUiStateCallback.capture()); sysUiStateCallback.getValue().onSystemUiStateChanged( QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN); reset(mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); // Act sysUiStateCallback.getValue().onSystemUiStateChanged( Loading @@ -246,6 +357,9 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).showAndStay(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockOverviewProxyService, mMockAssistHandleCallbacks); } }