Loading packages/SystemUI/src/com/android/systemui/assist/AssistHandleLikeHomeBehavior.java +37 −8 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import androidx.annotation.Nullable; import com.android.systemui.assist.AssistHandleBehaviorController.BehaviorController; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.model.SysUiState; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shared.system.QuickStepContract; import java.io.PrintWriter; Loading @@ -39,44 +40,55 @@ 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 SysUiState.SysUiStateCallback mSysUiStateCallback = this::handleSystemUiStateChange; private final Lazy<StatusBarStateController> mStatusBarStateController; private final Lazy<WakefulnessLifecycle> mWakefulnessLifecycle; private final Lazy<SysUiState> mSysUiFlagContainer; private boolean mIsDozing; private boolean mIsAwake; private boolean mIsHomeHandleHiding; @Nullable private AssistHandleCallbacks mAssistHandleCallbacks; @Inject AssistHandleLikeHomeBehavior( Lazy<StatusBarStateController> statusBarStateController, Lazy<WakefulnessLifecycle> wakefulnessLifecycle, Lazy<SysUiState> sysUiFlagContainer) { mStatusBarStateController = statusBarStateController; mWakefulnessLifecycle = wakefulnessLifecycle; mSysUiFlagContainer = sysUiFlagContainer; } Loading @@ -84,8 +96,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); mSysUiFlagContainer.get().addCallback(mSysUiStateCallback); callbackForCurrentState(); Loading @@ -94,6 +108,7 @@ final class AssistHandleLikeHomeBehavior implements BehaviorController { @Override public void onModeDeactivated() { mAssistHandleCallbacks = null; mStatusBarStateController.get().removeCallback(mStatusBarStateListener); mWakefulnessLifecycle.get().removeObserver(mWakefulnessLifecycleObserver); mSysUiFlagContainer.get().removeCallback(mSysUiStateCallback); } Loading @@ -111,6 +126,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 @@ -126,18 +150,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 @@ -94,6 +94,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 @@ -118,14 +123,24 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { this::handleSystemUiStateChanged; 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 @@ -149,6 +164,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 @@ -201,6 +217,7 @@ 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(); Loading @@ -208,8 +225,8 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { mActivityManagerWrapper.get().registerTaskStackListener(mTaskStackChangeListener); mOverviewProxyService.get().addCallback(mOverviewProxyListener); mSysUiFlagContainer.get().addCallback(mSysUiStateCallback); mIsDozing = mWakefulnessLifecycle.get().getWakefulness() != WakefulnessLifecycle.WAKEFULNESS_AWAKE; mIsAwake = mWakefulnessLifecycle.get().getWakefulness() == WakefulnessLifecycle.WAKEFULNESS_AWAKE; mWakefulnessLifecycle.get().addObserver(mWakefulnessLifecycleObserver); mLearningTimeElapsed = Settings.Secure.getLong( Loading Loading @@ -252,7 +269,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 @@ -299,6 +319,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 @@ -352,7 +382,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 @@ -374,7 +404,7 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { return; } if (mIsDozing || mIsNavBarHidden || isSuppressed()) { if (!isFullyAwake() || mIsNavBarHidden || isSuppressed()) { mAssistHandleCallbacks.hide(); } else if (mOnLockscreen) { mAssistHandleCallbacks.showAndStay(); Loading Loading @@ -425,6 +455,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 @@ -484,6 +518,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 @@ -31,6 +31,7 @@ import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.model.SysUiState; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shared.system.QuickStepContract; import org.junit.Before; Loading @@ -47,6 +48,7 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { private AssistHandleLikeHomeBehavior mAssistHandleLikeHomeBehavior; @Mock private StatusBarStateController mMockStatusBarStateController; @Mock private WakefulnessLifecycle mMockWakefulnessLifecycle; @Mock private SysUiState mMockSysUiState; @Mock private AssistHandleCallbacks mMockAssistHandleCallbacks; Loading @@ -55,7 +57,9 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { public void setup() { MockitoAnnotations.initMocks(this); mAssistHandleLikeHomeBehavior = new AssistHandleLikeHomeBehavior( () -> mMockWakefulnessLifecycle, () -> mMockSysUiState); () -> mMockStatusBarStateController, () -> mMockWakefulnessLifecycle, () -> mMockSysUiState); } @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(mMockSysUiState).addCallback(any(SysUiState.SysUiStateCallback.class)); Loading @@ -73,8 +80,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 @@ -89,6 +97,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 @@ -100,73 +109,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<SysUiState.SysUiStateCallback> sysUiStateCallback = ArgumentCaptor.forClass(SysUiState.SysUiStateCallback.class); verify(mMockStatusBarStateController).addCallback(stateListener.capture()); verify(mMockWakefulnessLifecycle).addObserver(observer.capture()); verify(mMockSysUiState).addCallback(sysUiStateCallback.capture()); reset(mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act mAssistHandleLikeHomeBehavior.onModeDeactivated(); // Assert verify(mMockStatusBarStateController).removeCallback(eq(stateListener.getValue())); verify(mMockWakefulnessLifecycle).removeObserver(eq(observer.getValue())); verify(mMockSysUiState).removeCallback(eq(sysUiStateCallback.getValue())); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); } @Test public void onAssistantGesturePerformed_doesNothing() { // Arrange mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); reset(mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act mAssistHandleLikeHomeBehavior.onAssistantGesturePerformed(); // Assert verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); } @Test public void onAssistHandlesRequested_doesNothing() { // Arrange mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); reset(mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act mAssistHandleLikeHomeBehavior.onAssistHandlesRequested(); // Assert verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, 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, mMockSysUiState, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act observer.getValue().onStartedWakingUp(); observer.getValue().onFinishedWakingUp(); // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Arrange observer.getValue().onFinishedGoingToSleep(); reset(mMockAssistHandleCallbacks); // Act stateListener.getValue().onDozingChanged(false); // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act observer.getValue().onFinishedWakingUp(); Loading @@ -174,19 +250,30 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).showAndStay(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, 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, mMockSysUiState, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act observer.getValue().onStartedGoingToSleep(); Loading @@ -194,26 +281,42 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Arrange observer.getValue().onFinishedWakingUp(); reset(mMockAssistHandleCallbacks); // Act observer.getValue().onFinishedGoingToSleep(); stateListener.getValue().onDozingChanged(true); // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); } @Test public void onHomeHandleHide_handlesHide() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(false); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); ArgumentCaptor<SysUiState.SysUiStateCallback> sysUiStateCallback = ArgumentCaptor.forClass(SysUiState.SysUiStateCallback.class); mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); verify(mMockSysUiState).addCallback(sysUiStateCallback.capture()); reset(mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act sysUiStateCallback.getValue().onSystemUiStateChanged( Loading @@ -222,12 +325,16 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); } @Test public void onHomeHandleUnhide_handlesShow() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(false); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); ArgumentCaptor<SysUiState.SysUiStateCallback> sysUiStateCallback = Loading @@ -236,7 +343,11 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { verify(mMockSysUiState).addCallback(sysUiStateCallback.capture()); sysUiStateCallback.getValue().onSystemUiStateChanged( QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN); reset(mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act sysUiStateCallback.getValue().onSystemUiStateChanged( Loading @@ -245,6 +356,9 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).showAndStay(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); } } Loading
packages/SystemUI/src/com/android/systemui/assist/AssistHandleLikeHomeBehavior.java +37 −8 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import androidx.annotation.Nullable; import com.android.systemui.assist.AssistHandleBehaviorController.BehaviorController; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.model.SysUiState; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shared.system.QuickStepContract; import java.io.PrintWriter; Loading @@ -39,44 +40,55 @@ 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 SysUiState.SysUiStateCallback mSysUiStateCallback = this::handleSystemUiStateChange; private final Lazy<StatusBarStateController> mStatusBarStateController; private final Lazy<WakefulnessLifecycle> mWakefulnessLifecycle; private final Lazy<SysUiState> mSysUiFlagContainer; private boolean mIsDozing; private boolean mIsAwake; private boolean mIsHomeHandleHiding; @Nullable private AssistHandleCallbacks mAssistHandleCallbacks; @Inject AssistHandleLikeHomeBehavior( Lazy<StatusBarStateController> statusBarStateController, Lazy<WakefulnessLifecycle> wakefulnessLifecycle, Lazy<SysUiState> sysUiFlagContainer) { mStatusBarStateController = statusBarStateController; mWakefulnessLifecycle = wakefulnessLifecycle; mSysUiFlagContainer = sysUiFlagContainer; } Loading @@ -84,8 +96,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); mSysUiFlagContainer.get().addCallback(mSysUiStateCallback); callbackForCurrentState(); Loading @@ -94,6 +108,7 @@ final class AssistHandleLikeHomeBehavior implements BehaviorController { @Override public void onModeDeactivated() { mAssistHandleCallbacks = null; mStatusBarStateController.get().removeCallback(mStatusBarStateListener); mWakefulnessLifecycle.get().removeObserver(mWakefulnessLifecycleObserver); mSysUiFlagContainer.get().removeCallback(mSysUiStateCallback); } Loading @@ -111,6 +126,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 @@ -126,18 +150,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 @@ -94,6 +94,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 @@ -118,14 +123,24 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { this::handleSystemUiStateChanged; 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 @@ -149,6 +164,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 @@ -201,6 +217,7 @@ 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(); Loading @@ -208,8 +225,8 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { mActivityManagerWrapper.get().registerTaskStackListener(mTaskStackChangeListener); mOverviewProxyService.get().addCallback(mOverviewProxyListener); mSysUiFlagContainer.get().addCallback(mSysUiStateCallback); mIsDozing = mWakefulnessLifecycle.get().getWakefulness() != WakefulnessLifecycle.WAKEFULNESS_AWAKE; mIsAwake = mWakefulnessLifecycle.get().getWakefulness() == WakefulnessLifecycle.WAKEFULNESS_AWAKE; mWakefulnessLifecycle.get().addObserver(mWakefulnessLifecycleObserver); mLearningTimeElapsed = Settings.Secure.getLong( Loading Loading @@ -252,7 +269,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 @@ -299,6 +319,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 @@ -352,7 +382,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 @@ -374,7 +404,7 @@ final class AssistHandleReminderExpBehavior implements BehaviorController { return; } if (mIsDozing || mIsNavBarHidden || isSuppressed()) { if (!isFullyAwake() || mIsNavBarHidden || isSuppressed()) { mAssistHandleCallbacks.hide(); } else if (mOnLockscreen) { mAssistHandleCallbacks.showAndStay(); Loading Loading @@ -425,6 +455,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 @@ -484,6 +518,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 @@ -31,6 +31,7 @@ import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.model.SysUiState; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shared.system.QuickStepContract; import org.junit.Before; Loading @@ -47,6 +48,7 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { private AssistHandleLikeHomeBehavior mAssistHandleLikeHomeBehavior; @Mock private StatusBarStateController mMockStatusBarStateController; @Mock private WakefulnessLifecycle mMockWakefulnessLifecycle; @Mock private SysUiState mMockSysUiState; @Mock private AssistHandleCallbacks mMockAssistHandleCallbacks; Loading @@ -55,7 +57,9 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { public void setup() { MockitoAnnotations.initMocks(this); mAssistHandleLikeHomeBehavior = new AssistHandleLikeHomeBehavior( () -> mMockWakefulnessLifecycle, () -> mMockSysUiState); () -> mMockStatusBarStateController, () -> mMockWakefulnessLifecycle, () -> mMockSysUiState); } @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(mMockSysUiState).addCallback(any(SysUiState.SysUiStateCallback.class)); Loading @@ -73,8 +80,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 @@ -89,6 +97,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 @@ -100,73 +109,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<SysUiState.SysUiStateCallback> sysUiStateCallback = ArgumentCaptor.forClass(SysUiState.SysUiStateCallback.class); verify(mMockStatusBarStateController).addCallback(stateListener.capture()); verify(mMockWakefulnessLifecycle).addObserver(observer.capture()); verify(mMockSysUiState).addCallback(sysUiStateCallback.capture()); reset(mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act mAssistHandleLikeHomeBehavior.onModeDeactivated(); // Assert verify(mMockStatusBarStateController).removeCallback(eq(stateListener.getValue())); verify(mMockWakefulnessLifecycle).removeObserver(eq(observer.getValue())); verify(mMockSysUiState).removeCallback(eq(sysUiStateCallback.getValue())); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); } @Test public void onAssistantGesturePerformed_doesNothing() { // Arrange mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); reset(mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act mAssistHandleLikeHomeBehavior.onAssistantGesturePerformed(); // Assert verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); } @Test public void onAssistHandlesRequested_doesNothing() { // Arrange mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); reset(mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act mAssistHandleLikeHomeBehavior.onAssistHandlesRequested(); // Assert verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, 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, mMockSysUiState, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act observer.getValue().onStartedWakingUp(); observer.getValue().onFinishedWakingUp(); // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Arrange observer.getValue().onFinishedGoingToSleep(); reset(mMockAssistHandleCallbacks); // Act stateListener.getValue().onDozingChanged(false); // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act observer.getValue().onFinishedWakingUp(); Loading @@ -174,19 +250,30 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).showAndStay(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, 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, mMockSysUiState, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act observer.getValue().onStartedGoingToSleep(); Loading @@ -194,26 +281,42 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Arrange observer.getValue().onFinishedWakingUp(); reset(mMockAssistHandleCallbacks); // Act observer.getValue().onFinishedGoingToSleep(); stateListener.getValue().onDozingChanged(true); // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); } @Test public void onHomeHandleHide_handlesHide() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(false); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); ArgumentCaptor<SysUiState.SysUiStateCallback> sysUiStateCallback = ArgumentCaptor.forClass(SysUiState.SysUiStateCallback.class); mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks); verify(mMockSysUiState).addCallback(sysUiStateCallback.capture()); reset(mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act sysUiStateCallback.getValue().onSystemUiStateChanged( Loading @@ -222,12 +325,16 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).hide(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); } @Test public void onHomeHandleUnhide_handlesShow() { // Arrange when(mMockStatusBarStateController.isDozing()).thenReturn(false); when(mMockWakefulnessLifecycle.getWakefulness()) .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); ArgumentCaptor<SysUiState.SysUiStateCallback> sysUiStateCallback = Loading @@ -236,7 +343,11 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { verify(mMockSysUiState).addCallback(sysUiStateCallback.capture()); sysUiStateCallback.getValue().onSystemUiStateChanged( QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN); reset(mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); reset( mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); // Act sysUiStateCallback.getValue().onSystemUiStateChanged( Loading @@ -245,6 +356,9 @@ public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase { // Assert verify(mMockAssistHandleCallbacks).showAndStay(); verifyNoMoreInteractions( mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); mMockStatusBarStateController, mMockWakefulnessLifecycle, mMockSysUiState, mMockAssistHandleCallbacks); } }