Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a8a97f84 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

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

Merge "Makes Assistant handles comply with a11y timeouts" into rvc-dev am: aad7d93e am: d3a79681 am: 32d74c2d am: d403f888

Change-Id: Ieab529fcd505e393f217dcb2b5c63ad64e6de265
parents 0d20db7c d403f888
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -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("      "
+28 −4
Original line number Diff line number Diff line
@@ -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