summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Govinda Wasserman <gwasserman@google.com> 2019-05-30 13:24:24 -0400
committer Matt Casey <mrcasey@google.com> 2019-05-30 22:22:59 +0000
commit5dfe9658bf8490d6e3eb857eb0e7dd8bde9491c6 (patch)
tree81c7eb7d7bf435f7f27f971bf77af25e0232ce1e
parent23d7a55d187db8db24bc797f811ab1a35a4129d9 (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
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehavior.java29
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java66
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistManager.java3
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleBehaviorControllerTest.java62
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);