diff options
2 files changed, 38 insertions, 6 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java index 3707d61da37f..8cd89ddabe72 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java +++ b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java @@ -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(" " 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 731101cb7329..afcd4414c667 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleBehaviorControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleBehaviorControllerTest.java @@ -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)); } @@ -243,6 +245,28 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase { } @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 when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME); |