Loading packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehavior.java +4 −25 Original line number Diff line number Diff line Loading @@ -16,31 +16,10 @@ package com.android.systemui.assist; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.assist.AssistHandleBehaviorController.BehaviorController; public enum AssistHandleBehavior { TEST(new AssistHandleOffBehavior()), OFF(new AssistHandleOffBehavior()), LIKE_HOME(new AssistHandleLikeHomeBehavior()), REMINDER_EXP(new AssistHandleReminderExpBehavior()); private BehaviorController mController; AssistHandleBehavior(BehaviorController controller) { mController = controller; } BehaviorController getController() { return mController; } @VisibleForTesting void setTestController(BehaviorController controller) { if (this.equals(TEST)) { mController = controller; } } TEST, OFF, LIKE_HOME, REMINDER_EXP; } packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java +46 −20 Original line number Diff line number Diff line Loading @@ -16,23 +16,27 @@ package com.android.systemui.assist; import android.content.ComponentName; import android.content.Context; import android.os.Handler; import android.os.SystemClock; import android.os.SystemProperties; import android.provider.DeviceConfig; import android.util.Log; import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.AssistUtils; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.Dependency; import com.android.systemui.ScreenDecorations; import com.android.systemui.SysUiServiceProvider; import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.statusbar.phone.NavigationModeController; import java.util.EnumMap; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; Loading @@ -46,10 +50,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac private static final String TAG = "AssistHandleBehavior"; private static final String SHOWN_FREQUENCY_THRESHOLD_KEY = "ASSIST_HANDLES_SHOWN_FREQUENCY_THRESHOLD_MS"; private static final long DEFAULT_SHOWN_FREQUENCY_THRESHOLD_MS = TimeUnit.SECONDS.toMillis(10); private static final String SHOW_AND_GO_DURATION_KEY = "ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS"; private static final long DEFAULT_SHOW_AND_GO_DURATION_MS = TimeUnit.SECONDS.toMillis(3); /** Loading @@ -59,9 +60,12 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac private static final AssistHandleBehavior DEFAULT_BEHAVIOR = AssistHandleBehavior.REMINDER_EXP; private final Context mContext; private final AssistUtils mAssistUtils; private final Handler mHandler; private final Runnable mHideHandles = this::hideHandles; private final Supplier<ScreenDecorations> mScreenDecorationsSupplier; private final Map<AssistHandleBehavior, BehaviorController> mBehaviorMap = new EnumMap<>(AssistHandleBehavior.class); private boolean mHandlesShowing = false; private long mHandlesLastHiddenAt; Loading @@ -72,20 +76,33 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac private AssistHandleBehavior mCurrentBehavior = AssistHandleBehavior.OFF; private boolean mInGesturalMode; AssistHandleBehaviorController(Context context, Handler handler) { this(context, handler, () -> SysUiServiceProvider.getComponent(context, ScreenDecorations.class)); AssistHandleBehaviorController(Context context, AssistUtils assistUtils, Handler handler) { this( context, assistUtils, handler, () -> SysUiServiceProvider.getComponent(context, ScreenDecorations.class), /* testBehavior = */ null); } @VisibleForTesting AssistHandleBehaviorController( Context context, AssistUtils assistUtils, Handler handler, Supplier<ScreenDecorations> screenDecorationsSupplier) { Supplier<ScreenDecorations> screenDecorationsSupplier, @Nullable BehaviorController testBehavior) { mContext = context; mAssistUtils = assistUtils; mHandler = handler; mScreenDecorationsSupplier = screenDecorationsSupplier; mBehaviorMap.put(AssistHandleBehavior.OFF, new AssistHandleOffBehavior()); mBehaviorMap.put(AssistHandleBehavior.LIKE_HOME, new AssistHandleLikeHomeBehavior()); mBehaviorMap.put(AssistHandleBehavior.REMINDER_EXP, new AssistHandleReminderExpBehavior()); if (testBehavior != null) { mBehaviorMap.put(AssistHandleBehavior.TEST, testBehavior); } mInGesturalMode = QuickStepContract.isGesturalMode( Dependency.get(NavigationModeController.class) .addListener(this::handleNavigationModeChange)); Loading Loading @@ -126,7 +143,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac } void onAssistantGesturePerformed() { mCurrentBehavior.getController().onAssistantGesturePerformed(); mBehaviorMap.get(mCurrentBehavior).onAssistantGesturePerformed(); } void setBehavior(AssistHandleBehavior behavior) { Loading @@ -134,9 +151,14 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac return; } if (!mBehaviorMap.containsKey(behavior)) { Log.e(TAG, "Unsupported behavior requested: " + behavior.toString()); return; } if (mInGesturalMode) { mCurrentBehavior.getController().onModeDeactivated(); behavior.getController().onModeActivated(mContext, this); mBehaviorMap.get(mCurrentBehavior).onModeDeactivated(); mBehaviorMap.get(behavior).onModeActivated(mContext, /* callbacks = */ this); } mCurrentBehavior = behavior; Loading @@ -150,21 +172,26 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac } } private boolean handlesUnblocked(boolean ignoreThreshold) { long timeSinceHidden = SystemClock.elapsedRealtime() - mHandlesLastHiddenAt; boolean notThrottled = ignoreThreshold || timeSinceHidden > getShownFrequencyThreshold(); ComponentName assistantComponent = mAssistUtils.getAssistComponentForUser(KeyguardUpdateMonitor.getCurrentUser()); return notThrottled && assistantComponent != null; } private long getShownFrequencyThreshold() { long configValue = DeviceConfig.getLong( return DeviceConfig.getLong( DeviceConfig.NAMESPACE_SYSTEMUI, SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOWN_FREQUENCY_THRESHOLD_MS, DEFAULT_SHOWN_FREQUENCY_THRESHOLD_MS); return SystemProperties.getLong( SHOWN_FREQUENCY_THRESHOLD_KEY, configValue); } private long getShowAndGoDuration() { long configValue = DeviceConfig.getLong( return DeviceConfig.getLong( DeviceConfig.NAMESPACE_SYSTEMUI, SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS, DEFAULT_SHOW_AND_GO_DURATION_MS); return SystemProperties.getLong(SHOW_AND_GO_DURATION_KEY, configValue); } private void maybeShowHandles(boolean ignoreThreshold) { Loading @@ -172,8 +199,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac return; } long timeSinceHidden = SystemClock.elapsedRealtime() - mHandlesLastHiddenAt; if (ignoreThreshold || timeSinceHidden > getShownFrequencyThreshold()) { if (handlesUnblocked(ignoreThreshold)) { mHandlesShowing = true; ScreenDecorations screenDecorations = mScreenDecorationsSupplier.get(); if (screenDecorations == null) { Loading Loading @@ -207,9 +233,9 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac mInGesturalMode = inGesturalMode; if (mInGesturalMode) { mCurrentBehavior.getController().onModeActivated(mContext, this); mBehaviorMap.get(mCurrentBehavior).onModeActivated(mContext, /* callbacks = */ this); } else { mCurrentBehavior.getController().onModeDeactivated(); mBehaviorMap.get(mCurrentBehavior).onModeDeactivated(); hide(); } } Loading packages/SystemUI/src/com/android/systemui/assist/AssistManager.java +2 −1 Original line number Diff line number Diff line Loading @@ -149,7 +149,8 @@ public class AssistManager implements ConfigurationChangedReceiver { mAssistUtils = new AssistUtils(context); mAssistDisclosure = new AssistDisclosure(context, new Handler()); mPhoneStateMonitor = new PhoneStateMonitor(context); mHandleController = new AssistHandleBehaviorController(context, new Handler()); mHandleController = new AssistHandleBehaviorController(context, mAssistUtils, new Handler()); registerVoiceInteractionSessionListener(); mInterestingConfigChanges = new InterestingConfigChanges(ActivityInfo.CONFIG_ORIENTATION Loading packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleBehaviorControllerTest.java +56 −6 Original line number Diff line number Diff line Loading @@ -18,21 +18,27 @@ package com.android.systemui.assist; import static org.mockito.AdditionalAnswers.answerVoid; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.content.ComponentName; import android.os.Handler; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; import androidx.test.filters.SmallTest; import com.android.internal.app.AssistUtils; import com.android.systemui.ScreenDecorations; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.recents.OverviewProxyService; import org.junit.Before; import org.junit.Test; Loading @@ -46,29 +52,35 @@ import org.mockito.MockitoAnnotations; @RunWithLooper public class AssistHandleBehaviorControllerTest extends SysuiTestCase { private final AssistHandleBehavior mTestBehavior = AssistHandleBehavior.TEST; private static final ComponentName COMPONENT_NAME = new ComponentName("", ""); private AssistHandleBehaviorController mAssistHandleBehaviorController; @Mock private ScreenDecorations mMockScreenDecorations; @Mock private AssistUtils mMockAssistUtils; @Mock private Handler mMockHandler; @Mock private AssistHandleBehaviorController.BehaviorController mMockBehaviorController; @Before public void setup() { MockitoAnnotations.initMocks(this); mDependency.injectMockDependency(StatusBarStateController.class); mDependency.injectMockDependency(OverviewProxyService.class); doAnswer(answerVoid(Runnable::run)).when(mMockHandler).post(any(Runnable.class)); doAnswer(answerVoid(Runnable::run)).when(mMockHandler) .postDelayed(any(Runnable.class), anyLong()); mTestBehavior.setTestController(mMockBehaviorController); mAssistHandleBehaviorController = new AssistHandleBehaviorController( mContext, mMockHandler, () -> mMockScreenDecorations); mContext, mMockAssistUtils, mMockHandler, () -> mMockScreenDecorations, mMockBehaviorController); } @Test public void hide_hidesHandlesWhenShowing() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.showAndStay(); reset(mMockScreenDecorations); Loading @@ -83,6 +95,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { @Test public void hide_doesNothingWhenHiding() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.hide(); reset(mMockScreenDecorations); Loading @@ -96,6 +109,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { @Test public void showAndStay_showsHandlesWhenHiding() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.hide(); reset(mMockScreenDecorations); Loading @@ -110,6 +124,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { @Test public void showAndStay_doesNothingWhenShowing() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.showAndStay(); reset(mMockScreenDecorations); Loading @@ -120,9 +135,24 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { verifyNoMoreInteractions(mMockScreenDecorations); } @Test public void showAndStay_doesNothingWhenThereIsNoAssistant() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(null); mAssistHandleBehaviorController.hide(); reset(mMockScreenDecorations); // Act mAssistHandleBehaviorController.showAndStay(); // Assert verifyNoMoreInteractions(mMockScreenDecorations); } @Test public void showAndGo_showsThenHidesHandlesWhenHiding() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.hide(); reset(mMockScreenDecorations); Loading @@ -139,6 +169,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { @Test public void showAndGo_hidesHandlesAfterTimeoutWhenShowing() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.showAndStay(); reset(mMockScreenDecorations); Loading @@ -153,6 +184,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { @Test public void showAndGo_doesNothingIfRecentlyHidden() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.showAndGo(); reset(mMockScreenDecorations); Loading @@ -163,13 +195,28 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { verifyNoMoreInteractions(mMockScreenDecorations); } @Test public void showAndGo_doesNothingWhenThereIsNoAssistant() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(null); mAssistHandleBehaviorController.hide(); reset(mMockScreenDecorations); // Act mAssistHandleBehaviorController.showAndGo(); // Assert verifyNoMoreInteractions(mMockScreenDecorations); } @Test public void setBehavior_activatesTheBehaviorWhenInGesturalMode() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.setInGesturalModeForTest(true); // Act mAssistHandleBehaviorController.setBehavior(mTestBehavior); mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.TEST); // Assert verify(mMockBehaviorController).onModeActivated(mContext, mAssistHandleBehaviorController); Loading @@ -179,8 +226,10 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { @Test public void setBehavior_deactivatesThePreviousBehaviorWhenInGesturalMode() { // Arrange mAssistHandleBehaviorController.setBehavior(mTestBehavior); when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.TEST); mAssistHandleBehaviorController.setInGesturalModeForTest(true); reset(mMockBehaviorController); // Act mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.OFF); Loading @@ -193,10 +242,11 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { @Test public void setBehavior_doesNothingWhenNotInGesturalMode() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.setInGesturalModeForTest(false); // Act mAssistHandleBehaviorController.setBehavior(mTestBehavior); mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.TEST); // Assert verifyNoMoreInteractions(mMockBehaviorController); Loading Loading
packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehavior.java +4 −25 Original line number Diff line number Diff line Loading @@ -16,31 +16,10 @@ package com.android.systemui.assist; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.assist.AssistHandleBehaviorController.BehaviorController; public enum AssistHandleBehavior { TEST(new AssistHandleOffBehavior()), OFF(new AssistHandleOffBehavior()), LIKE_HOME(new AssistHandleLikeHomeBehavior()), REMINDER_EXP(new AssistHandleReminderExpBehavior()); private BehaviorController mController; AssistHandleBehavior(BehaviorController controller) { mController = controller; } BehaviorController getController() { return mController; } @VisibleForTesting void setTestController(BehaviorController controller) { if (this.equals(TEST)) { mController = controller; } } TEST, OFF, LIKE_HOME, REMINDER_EXP; }
packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java +46 −20 Original line number Diff line number Diff line Loading @@ -16,23 +16,27 @@ package com.android.systemui.assist; import android.content.ComponentName; import android.content.Context; import android.os.Handler; import android.os.SystemClock; import android.os.SystemProperties; import android.provider.DeviceConfig; import android.util.Log; import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.AssistUtils; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.Dependency; import com.android.systemui.ScreenDecorations; import com.android.systemui.SysUiServiceProvider; import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.statusbar.phone.NavigationModeController; import java.util.EnumMap; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; Loading @@ -46,10 +50,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac private static final String TAG = "AssistHandleBehavior"; private static final String SHOWN_FREQUENCY_THRESHOLD_KEY = "ASSIST_HANDLES_SHOWN_FREQUENCY_THRESHOLD_MS"; private static final long DEFAULT_SHOWN_FREQUENCY_THRESHOLD_MS = TimeUnit.SECONDS.toMillis(10); private static final String SHOW_AND_GO_DURATION_KEY = "ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS"; private static final long DEFAULT_SHOW_AND_GO_DURATION_MS = TimeUnit.SECONDS.toMillis(3); /** Loading @@ -59,9 +60,12 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac private static final AssistHandleBehavior DEFAULT_BEHAVIOR = AssistHandleBehavior.REMINDER_EXP; private final Context mContext; private final AssistUtils mAssistUtils; private final Handler mHandler; private final Runnable mHideHandles = this::hideHandles; private final Supplier<ScreenDecorations> mScreenDecorationsSupplier; private final Map<AssistHandleBehavior, BehaviorController> mBehaviorMap = new EnumMap<>(AssistHandleBehavior.class); private boolean mHandlesShowing = false; private long mHandlesLastHiddenAt; Loading @@ -72,20 +76,33 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac private AssistHandleBehavior mCurrentBehavior = AssistHandleBehavior.OFF; private boolean mInGesturalMode; AssistHandleBehaviorController(Context context, Handler handler) { this(context, handler, () -> SysUiServiceProvider.getComponent(context, ScreenDecorations.class)); AssistHandleBehaviorController(Context context, AssistUtils assistUtils, Handler handler) { this( context, assistUtils, handler, () -> SysUiServiceProvider.getComponent(context, ScreenDecorations.class), /* testBehavior = */ null); } @VisibleForTesting AssistHandleBehaviorController( Context context, AssistUtils assistUtils, Handler handler, Supplier<ScreenDecorations> screenDecorationsSupplier) { Supplier<ScreenDecorations> screenDecorationsSupplier, @Nullable BehaviorController testBehavior) { mContext = context; mAssistUtils = assistUtils; mHandler = handler; mScreenDecorationsSupplier = screenDecorationsSupplier; mBehaviorMap.put(AssistHandleBehavior.OFF, new AssistHandleOffBehavior()); mBehaviorMap.put(AssistHandleBehavior.LIKE_HOME, new AssistHandleLikeHomeBehavior()); mBehaviorMap.put(AssistHandleBehavior.REMINDER_EXP, new AssistHandleReminderExpBehavior()); if (testBehavior != null) { mBehaviorMap.put(AssistHandleBehavior.TEST, testBehavior); } mInGesturalMode = QuickStepContract.isGesturalMode( Dependency.get(NavigationModeController.class) .addListener(this::handleNavigationModeChange)); Loading Loading @@ -126,7 +143,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac } void onAssistantGesturePerformed() { mCurrentBehavior.getController().onAssistantGesturePerformed(); mBehaviorMap.get(mCurrentBehavior).onAssistantGesturePerformed(); } void setBehavior(AssistHandleBehavior behavior) { Loading @@ -134,9 +151,14 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac return; } if (!mBehaviorMap.containsKey(behavior)) { Log.e(TAG, "Unsupported behavior requested: " + behavior.toString()); return; } if (mInGesturalMode) { mCurrentBehavior.getController().onModeDeactivated(); behavior.getController().onModeActivated(mContext, this); mBehaviorMap.get(mCurrentBehavior).onModeDeactivated(); mBehaviorMap.get(behavior).onModeActivated(mContext, /* callbacks = */ this); } mCurrentBehavior = behavior; Loading @@ -150,21 +172,26 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac } } private boolean handlesUnblocked(boolean ignoreThreshold) { long timeSinceHidden = SystemClock.elapsedRealtime() - mHandlesLastHiddenAt; boolean notThrottled = ignoreThreshold || timeSinceHidden > getShownFrequencyThreshold(); ComponentName assistantComponent = mAssistUtils.getAssistComponentForUser(KeyguardUpdateMonitor.getCurrentUser()); return notThrottled && assistantComponent != null; } private long getShownFrequencyThreshold() { long configValue = DeviceConfig.getLong( return DeviceConfig.getLong( DeviceConfig.NAMESPACE_SYSTEMUI, SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOWN_FREQUENCY_THRESHOLD_MS, DEFAULT_SHOWN_FREQUENCY_THRESHOLD_MS); return SystemProperties.getLong( SHOWN_FREQUENCY_THRESHOLD_KEY, configValue); } private long getShowAndGoDuration() { long configValue = DeviceConfig.getLong( return DeviceConfig.getLong( DeviceConfig.NAMESPACE_SYSTEMUI, SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS, DEFAULT_SHOW_AND_GO_DURATION_MS); return SystemProperties.getLong(SHOW_AND_GO_DURATION_KEY, configValue); } private void maybeShowHandles(boolean ignoreThreshold) { Loading @@ -172,8 +199,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac return; } long timeSinceHidden = SystemClock.elapsedRealtime() - mHandlesLastHiddenAt; if (ignoreThreshold || timeSinceHidden > getShownFrequencyThreshold()) { if (handlesUnblocked(ignoreThreshold)) { mHandlesShowing = true; ScreenDecorations screenDecorations = mScreenDecorationsSupplier.get(); if (screenDecorations == null) { Loading Loading @@ -207,9 +233,9 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac mInGesturalMode = inGesturalMode; if (mInGesturalMode) { mCurrentBehavior.getController().onModeActivated(mContext, this); mBehaviorMap.get(mCurrentBehavior).onModeActivated(mContext, /* callbacks = */ this); } else { mCurrentBehavior.getController().onModeDeactivated(); mBehaviorMap.get(mCurrentBehavior).onModeDeactivated(); hide(); } } Loading
packages/SystemUI/src/com/android/systemui/assist/AssistManager.java +2 −1 Original line number Diff line number Diff line Loading @@ -149,7 +149,8 @@ public class AssistManager implements ConfigurationChangedReceiver { mAssistUtils = new AssistUtils(context); mAssistDisclosure = new AssistDisclosure(context, new Handler()); mPhoneStateMonitor = new PhoneStateMonitor(context); mHandleController = new AssistHandleBehaviorController(context, new Handler()); mHandleController = new AssistHandleBehaviorController(context, mAssistUtils, new Handler()); registerVoiceInteractionSessionListener(); mInterestingConfigChanges = new InterestingConfigChanges(ActivityInfo.CONFIG_ORIENTATION Loading
packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleBehaviorControllerTest.java +56 −6 Original line number Diff line number Diff line Loading @@ -18,21 +18,27 @@ package com.android.systemui.assist; import static org.mockito.AdditionalAnswers.answerVoid; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.content.ComponentName; import android.os.Handler; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; import androidx.test.filters.SmallTest; import com.android.internal.app.AssistUtils; import com.android.systemui.ScreenDecorations; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.recents.OverviewProxyService; import org.junit.Before; import org.junit.Test; Loading @@ -46,29 +52,35 @@ import org.mockito.MockitoAnnotations; @RunWithLooper public class AssistHandleBehaviorControllerTest extends SysuiTestCase { private final AssistHandleBehavior mTestBehavior = AssistHandleBehavior.TEST; private static final ComponentName COMPONENT_NAME = new ComponentName("", ""); private AssistHandleBehaviorController mAssistHandleBehaviorController; @Mock private ScreenDecorations mMockScreenDecorations; @Mock private AssistUtils mMockAssistUtils; @Mock private Handler mMockHandler; @Mock private AssistHandleBehaviorController.BehaviorController mMockBehaviorController; @Before public void setup() { MockitoAnnotations.initMocks(this); mDependency.injectMockDependency(StatusBarStateController.class); mDependency.injectMockDependency(OverviewProxyService.class); doAnswer(answerVoid(Runnable::run)).when(mMockHandler).post(any(Runnable.class)); doAnswer(answerVoid(Runnable::run)).when(mMockHandler) .postDelayed(any(Runnable.class), anyLong()); mTestBehavior.setTestController(mMockBehaviorController); mAssistHandleBehaviorController = new AssistHandleBehaviorController( mContext, mMockHandler, () -> mMockScreenDecorations); mContext, mMockAssistUtils, mMockHandler, () -> mMockScreenDecorations, mMockBehaviorController); } @Test public void hide_hidesHandlesWhenShowing() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.showAndStay(); reset(mMockScreenDecorations); Loading @@ -83,6 +95,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { @Test public void hide_doesNothingWhenHiding() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.hide(); reset(mMockScreenDecorations); Loading @@ -96,6 +109,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { @Test public void showAndStay_showsHandlesWhenHiding() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.hide(); reset(mMockScreenDecorations); Loading @@ -110,6 +124,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { @Test public void showAndStay_doesNothingWhenShowing() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.showAndStay(); reset(mMockScreenDecorations); Loading @@ -120,9 +135,24 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { verifyNoMoreInteractions(mMockScreenDecorations); } @Test public void showAndStay_doesNothingWhenThereIsNoAssistant() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(null); mAssistHandleBehaviorController.hide(); reset(mMockScreenDecorations); // Act mAssistHandleBehaviorController.showAndStay(); // Assert verifyNoMoreInteractions(mMockScreenDecorations); } @Test public void showAndGo_showsThenHidesHandlesWhenHiding() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.hide(); reset(mMockScreenDecorations); Loading @@ -139,6 +169,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { @Test public void showAndGo_hidesHandlesAfterTimeoutWhenShowing() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.showAndStay(); reset(mMockScreenDecorations); Loading @@ -153,6 +184,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { @Test public void showAndGo_doesNothingIfRecentlyHidden() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.showAndGo(); reset(mMockScreenDecorations); Loading @@ -163,13 +195,28 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { verifyNoMoreInteractions(mMockScreenDecorations); } @Test public void showAndGo_doesNothingWhenThereIsNoAssistant() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(null); mAssistHandleBehaviorController.hide(); reset(mMockScreenDecorations); // Act mAssistHandleBehaviorController.showAndGo(); // Assert verifyNoMoreInteractions(mMockScreenDecorations); } @Test public void setBehavior_activatesTheBehaviorWhenInGesturalMode() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.setInGesturalModeForTest(true); // Act mAssistHandleBehaviorController.setBehavior(mTestBehavior); mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.TEST); // Assert verify(mMockBehaviorController).onModeActivated(mContext, mAssistHandleBehaviorController); Loading @@ -179,8 +226,10 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { @Test public void setBehavior_deactivatesThePreviousBehaviorWhenInGesturalMode() { // Arrange mAssistHandleBehaviorController.setBehavior(mTestBehavior); when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.TEST); mAssistHandleBehaviorController.setInGesturalModeForTest(true); reset(mMockBehaviorController); // Act mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.OFF); Loading @@ -193,10 +242,11 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { @Test public void setBehavior_doesNothingWhenNotInGesturalMode() { // Arrange when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); mAssistHandleBehaviorController.setInGesturalModeForTest(false); // Act mAssistHandleBehaviorController.setBehavior(mTestBehavior); mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.TEST); // Assert verifyNoMoreInteractions(mMockBehaviorController); Loading