Merge "Makes Assistant handles comply with a11y timeouts" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
aad7d93e43
@@ -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(" "
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user