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

Commit d403f888 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

Change-Id: I16d75db4b829b43adda31dd17364f93d7e89f1d0
parents 3a0d2fb9 32d74c2d
Loading
Loading
Loading
Loading
+10 −2
Original line number Original line Diff line number Diff line
@@ -23,6 +23,7 @@ import android.content.Context;
import android.os.Handler;
import android.os.Handler;
import android.os.SystemClock;
import android.os.SystemClock;
import android.util.Log;
import android.util.Log;
import android.view.accessibility.AccessibilityManager;


import androidx.annotation.Nullable;
import androidx.annotation.Nullable;


@@ -45,6 +46,8 @@ import javax.inject.Named;
import javax.inject.Provider;
import javax.inject.Provider;
import javax.inject.Singleton;
import javax.inject.Singleton;


import dagger.Lazy;

/**
/**
 * A class for managing Assistant handle logic.
 * A class for managing Assistant handle logic.
 *
 *
@@ -73,6 +76,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
    private final Provider<AssistHandleViewController> mAssistHandleViewController;
    private final Provider<AssistHandleViewController> mAssistHandleViewController;
    private final DeviceConfigHelper mDeviceConfigHelper;
    private final DeviceConfigHelper mDeviceConfigHelper;
    private final Map<AssistHandleBehavior, BehaviorController> mBehaviorMap;
    private final Map<AssistHandleBehavior, BehaviorController> mBehaviorMap;
    private final Lazy<AccessibilityManager> mA11yManager;


    private boolean mHandlesShowing = false;
    private boolean mHandlesShowing = false;
    private long mHandlesLastHiddenAt;
    private long mHandlesLastHiddenAt;
@@ -93,6 +97,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
            DeviceConfigHelper deviceConfigHelper,
            DeviceConfigHelper deviceConfigHelper,
            Map<AssistHandleBehavior, BehaviorController> behaviorMap,
            Map<AssistHandleBehavior, BehaviorController> behaviorMap,
            NavigationModeController navigationModeController,
            NavigationModeController navigationModeController,
            Lazy<AccessibilityManager> a11yManager,
            DumpManager dumpManager) {
            DumpManager dumpManager) {
        mContext = context;
        mContext = context;
        mAssistUtils = assistUtils;
        mAssistUtils = assistUtils;
@@ -100,6 +105,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
        mAssistHandleViewController = assistHandleViewController;
        mAssistHandleViewController = assistHandleViewController;
        mDeviceConfigHelper = deviceConfigHelper;
        mDeviceConfigHelper = deviceConfigHelper;
        mBehaviorMap = behaviorMap;
        mBehaviorMap = behaviorMap;
        mA11yManager = a11yManager;


        mInGesturalMode = QuickStepContract.isGesturalMode(
        mInGesturalMode = QuickStepContract.isGesturalMode(
                navigationModeController.addListener(this::handleNavigationModeChange));
                navigationModeController.addListener(this::handleNavigationModeChange));
@@ -211,9 +217,11 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
    }
    }


    private long getShowAndGoDuration() {
    private long getShowAndGoDuration() {
        return mDeviceConfigHelper.getLong(
        long configuredTime = mDeviceConfigHelper.getLong(
                SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS,
                SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS,
                DEFAULT_SHOW_AND_GO_DURATION_MS);
                DEFAULT_SHOW_AND_GO_DURATION_MS);
        return mA11yManager.get().getRecommendedTimeoutMillis(
                (int) configuredTime, AccessibilityManager.FLAG_CONTENT_ICONS);
    }
    }


    private String getBehaviorMode() {
    private String getBehaviorMode() {
@@ -291,7 +299,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac


        pw.println("   Phenotype Flags:");
        pw.println("   Phenotype Flags:");
        pw.println("      "
        pw.println("      "
                + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS
                + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS + "(a11y modded)"
                + "="
                + "="
                + getShowAndGoDuration());
                + getShowAndGoDuration());
        pw.println("      "
        pw.println("      "
+28 −4
Original line number Original line Diff line number Diff line
@@ -33,6 +33,7 @@ import android.content.ComponentName;
import android.os.Handler;
import android.os.Handler;
import android.testing.AndroidTestingRunner;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.view.accessibility.AccessibilityManager;


import androidx.test.filters.SmallTest;
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.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dump.DumpManager;
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 com.android.systemui.statusbar.phone.NavigationModeController;


import org.junit.After;
import org.junit.After;
import org.junit.Before;
import org.junit.Before;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.InOrder;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.MockitoAnnotations;
@@ -73,15 +73,16 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
    @Mock private AssistHandleBehaviorController.BehaviorController mMockTestBehavior;
    @Mock private AssistHandleBehaviorController.BehaviorController mMockTestBehavior;
    @Mock private NavigationModeController mMockNavigationModeController;
    @Mock private NavigationModeController mMockNavigationModeController;
    @Mock private AssistHandleViewController mMockAssistHandleViewController;
    @Mock private AssistHandleViewController mMockAssistHandleViewController;
    @Mock private AccessibilityManager mMockA11yManager;


    @Before
    @Before
    public void setup() {
    public void setup() {
        MockitoAnnotations.initMocks(this);
        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).post(any(Runnable.class));
        doAnswer(answerVoid(Runnable::run)).when(mMockHandler)
        doAnswer(answerVoid(Runnable::run)).when(mMockHandler)
                .postDelayed(any(Runnable.class), anyLong());
                .postDelayed(any(Runnable.class), anyLong());
        doAnswer(invocation -> invocation.getArgument(0)).when(mMockA11yManager)
                .getRecommendedTimeoutMillis(anyInt(), anyInt());


        Map<AssistHandleBehavior, AssistHandleBehaviorController.BehaviorController> behaviorMap =
        Map<AssistHandleBehavior, AssistHandleBehaviorController.BehaviorController> behaviorMap =
                new EnumMap<>(AssistHandleBehavior.class);
                new EnumMap<>(AssistHandleBehavior.class);
@@ -99,6 +100,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
                        mMockDeviceConfigHelper,
                        mMockDeviceConfigHelper,
                        behaviorMap,
                        behaviorMap,
                        mMockNavigationModeController,
                        mMockNavigationModeController,
                        () -> mMockA11yManager,
                        mock(DumpManager.class));
                        mock(DumpManager.class));
    }
    }


@@ -242,6 +244,28 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
        verifyNoMoreInteractions(mMockAssistHandleViewController);
        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
    @Test
    public void showAndGoDelayed_showsThenHidesHandlesWhenHiding() {
    public void showAndGoDelayed_showsThenHidesHandlesWhenHiding() {
        // Arrange
        // Arrange