Merge "Makes Assistant handles comply with a11y timeouts" into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-03-24 16:52:01 +00:00
committed by Android (Google) Code Review
2 changed files with 38 additions and 6 deletions

View File

@@ -23,6 +23,7 @@ import android.content.Context;
import android.os.Handler;
import android.os.SystemClock;
import android.util.Log;
import android.view.accessibility.AccessibilityManager;
import androidx.annotation.Nullable;
@@ -45,6 +46,8 @@ import javax.inject.Named;
import javax.inject.Provider;
import javax.inject.Singleton;
import dagger.Lazy;
/**
* A class for managing Assistant handle logic.
*
@@ -73,6 +76,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
private final Provider<AssistHandleViewController> mAssistHandleViewController;
private final DeviceConfigHelper mDeviceConfigHelper;
private final Map<AssistHandleBehavior, BehaviorController> mBehaviorMap;
private final Lazy<AccessibilityManager> mA11yManager;
private boolean mHandlesShowing = false;
private long mHandlesLastHiddenAt;
@@ -93,6 +97,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
DeviceConfigHelper deviceConfigHelper,
Map<AssistHandleBehavior, BehaviorController> behaviorMap,
NavigationModeController navigationModeController,
Lazy<AccessibilityManager> a11yManager,
DumpManager dumpManager) {
mContext = context;
mAssistUtils = assistUtils;
@@ -100,6 +105,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
mAssistHandleViewController = assistHandleViewController;
mDeviceConfigHelper = deviceConfigHelper;
mBehaviorMap = behaviorMap;
mA11yManager = a11yManager;
mInGesturalMode = QuickStepContract.isGesturalMode(
navigationModeController.addListener(this::handleNavigationModeChange));
@@ -211,9 +217,11 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
}
private long getShowAndGoDuration() {
return mDeviceConfigHelper.getLong(
long configuredTime = mDeviceConfigHelper.getLong(
SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS,
DEFAULT_SHOW_AND_GO_DURATION_MS);
return mA11yManager.get().getRecommendedTimeoutMillis(
(int) configuredTime, AccessibilityManager.FLAG_CONTENT_ICONS);
}
private String getBehaviorMode() {
@@ -291,7 +299,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
pw.println(" Phenotype Flags:");
pw.println(" "
+ SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS
+ SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS + "(a11y modded)"
+ "="
+ getShowAndGoDuration());
pw.println(" "

View File

@@ -33,6 +33,7 @@ import android.content.ComponentName;
import android.os.Handler;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.view.accessibility.AccessibilityManager;
import androidx.test.filters.SmallTest;
@@ -40,14 +41,13 @@ import com.android.internal.app.AssistUtils;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.statusbar.phone.NavigationModeController;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -73,15 +73,16 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
@Mock private AssistHandleBehaviorController.BehaviorController mMockTestBehavior;
@Mock private NavigationModeController mMockNavigationModeController;
@Mock private AssistHandleViewController mMockAssistHandleViewController;
@Mock private AccessibilityManager mMockA11yManager;
@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());
doAnswer(invocation -> invocation.getArgument(0)).when(mMockA11yManager)
.getRecommendedTimeoutMillis(anyInt(), anyInt());
Map<AssistHandleBehavior, AssistHandleBehaviorController.BehaviorController> behaviorMap =
new EnumMap<>(AssistHandleBehavior.class);
@@ -99,6 +100,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
mMockDeviceConfigHelper,
behaviorMap,
mMockNavigationModeController,
() -> mMockA11yManager,
mock(DumpManager.class));
}
@@ -242,6 +244,28 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
verifyNoMoreInteractions(mMockAssistHandleViewController);
}
@Test
public void showAndGo_usesA11yTimeout() {
// Arrange
when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
when(mMockDeviceConfigHelper.getLong(
eq(SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS), anyLong()))
.thenReturn(12345L);
mAssistHandleBehaviorController.hide();
reset(mMockAssistHandleViewController, mMockA11yManager);
when(mMockA11yManager.getRecommendedTimeoutMillis(anyInt(), anyInt())).thenReturn(54321);
ArgumentCaptor<Long> delay = ArgumentCaptor.forClass(Long.class);
// Act
mAssistHandleBehaviorController.showAndGo();
// Assert
verify(mMockA11yManager).getRecommendedTimeoutMillis(
eq(12345), eq(AccessibilityManager.FLAG_CONTENT_ICONS));
verify(mMockHandler).postDelayed(any(Runnable.class), delay.capture());
assert delay.getValue() == 54321L;
}
@Test
public void showAndGoDelayed_showsThenHidesHandlesWhenHiding() {
// Arrange