diff options
| author | 2019-05-30 13:24:24 -0400 | |
|---|---|---|
| committer | 2019-05-30 22:22:59 +0000 | |
| commit | 5dfe9658bf8490d6e3eb857eb0e7dd8bde9491c6 (patch) | |
| tree | 81c7eb7d7bf435f7f27f971bf77af25e0232ce1e | |
| parent | 23d7a55d187db8db24bc797f811ab1a35a4129d9 (diff) | |
Fixes test that is currently failing
Refactors yesterday caused tests to fail because of dependencies getting
initialized earlier. Refactored so that they are initialized late enough
for the tests to be able to mock them correctly.
Also fixes bug where handles would still show when there was no
Assistant.
Test: atest AssistHandleBehaviorControllerTest
BUG:132424950
Fixes: 134086503
Change-Id: I645a2529bf56b5e996e8250267ead87bed9f4f2b
FIX:132424950
4 files changed, 108 insertions, 52 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehavior.java b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehavior.java index e2c731314246..2eda3d784382 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehavior.java +++ b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehavior.java @@ -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; } diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java index 1aa47cc6d800..01deb03c466b 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java +++ b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java @@ -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; @@ -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); /** @@ -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; @@ -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)); @@ -126,7 +143,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac } void onAssistantGesturePerformed() { - mCurrentBehavior.getController().onAssistantGesturePerformed(); + mBehaviorMap.get(mCurrentBehavior).onAssistantGesturePerformed(); } void setBehavior(AssistHandleBehavior behavior) { @@ -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; @@ -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) { @@ -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) { @@ -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(); } } diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java index 8cf836eddc28..2fc79d618546 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java +++ b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java @@ -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 diff --git a/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleBehaviorControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleBehaviorControllerTest.java index 13c92b605c03..18f114a71a8d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleBehaviorControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleBehaviorControllerTest.java @@ -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; @@ -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); @@ -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); @@ -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); @@ -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); @@ -121,8 +136,23 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { } @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); @@ -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); @@ -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); @@ -164,12 +196,27 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { } @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); @@ -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); @@ -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); |