Merge "Fixes test that is currently failing" into qt-dev
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user