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

Commit 8ee64331 authored by Matt Casey's avatar Matt Casey Committed by android-build-merger
Browse files

Merge "Fixes test that is currently failing" into qt-dev

am: 20a2e7ae

Change-Id: I1e7190f40b664720177cdaa2013a6778df7b07d2
parents f30b0bea 20a2e7ae
Loading
Loading
Loading
Loading
+4 −25
Original line number Diff line number Diff line
@@ -16,31 +16,10 @@

package com.android.systemui.assist;


import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.assist.AssistHandleBehaviorController.BehaviorController;

public enum AssistHandleBehavior {

    TEST(new AssistHandleOffBehavior()),
    OFF(new AssistHandleOffBehavior()),
    LIKE_HOME(new AssistHandleLikeHomeBehavior()),
    REMINDER_EXP(new AssistHandleReminderExpBehavior());

    private BehaviorController mController;

    AssistHandleBehavior(BehaviorController controller) {
        mController = controller;
    }

    BehaviorController getController() {
        return mController;
    }

    @VisibleForTesting
    void setTestController(BehaviorController controller) {
        if (this.equals(TEST)) {
            mController = controller;
        }
    }
    TEST,
    OFF,
    LIKE_HOME,
    REMINDER_EXP;
}
+46 −20
Original line number Diff line number Diff line
@@ -16,23 +16,27 @@

package com.android.systemui.assist;

import android.content.ComponentName;
import android.content.Context;
import android.os.Handler;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.provider.DeviceConfig;
import android.util.Log;

import androidx.annotation.Nullable;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.AssistUtils;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.Dependency;
import com.android.systemui.ScreenDecorations;
import com.android.systemui.SysUiServiceProvider;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.statusbar.phone.NavigationModeController;

import java.util.EnumMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;

@@ -46,10 +50,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac

    private static final String TAG = "AssistHandleBehavior";

    private static final String SHOWN_FREQUENCY_THRESHOLD_KEY =
            "ASSIST_HANDLES_SHOWN_FREQUENCY_THRESHOLD_MS";
    private static final long DEFAULT_SHOWN_FREQUENCY_THRESHOLD_MS = TimeUnit.SECONDS.toMillis(10);
    private static final String SHOW_AND_GO_DURATION_KEY = "ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS";
    private static final long DEFAULT_SHOW_AND_GO_DURATION_MS = TimeUnit.SECONDS.toMillis(3);

    /**
@@ -59,9 +60,12 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
    private static final AssistHandleBehavior DEFAULT_BEHAVIOR = AssistHandleBehavior.REMINDER_EXP;

    private final Context mContext;
    private final AssistUtils mAssistUtils;
    private final Handler mHandler;
    private final Runnable mHideHandles = this::hideHandles;
    private final Supplier<ScreenDecorations> mScreenDecorationsSupplier;
    private final Map<AssistHandleBehavior, BehaviorController> mBehaviorMap =
            new EnumMap<>(AssistHandleBehavior.class);

    private boolean mHandlesShowing = false;
    private long mHandlesLastHiddenAt;
@@ -72,20 +76,33 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
    private AssistHandleBehavior mCurrentBehavior = AssistHandleBehavior.OFF;
    private boolean mInGesturalMode;

    AssistHandleBehaviorController(Context context, Handler handler) {
        this(context, handler, () ->
                SysUiServiceProvider.getComponent(context, ScreenDecorations.class));
    AssistHandleBehaviorController(Context context, AssistUtils assistUtils, Handler handler) {
        this(
                context,
                assistUtils,
                handler, () -> SysUiServiceProvider.getComponent(context, ScreenDecorations.class),
                /* testBehavior = */ null);
    }

    @VisibleForTesting
    AssistHandleBehaviorController(
            Context context,
            AssistUtils assistUtils,
            Handler handler,
            Supplier<ScreenDecorations> screenDecorationsSupplier) {
            Supplier<ScreenDecorations> screenDecorationsSupplier,
            @Nullable BehaviorController testBehavior) {
        mContext = context;
        mAssistUtils = assistUtils;
        mHandler = handler;
        mScreenDecorationsSupplier = screenDecorationsSupplier;

        mBehaviorMap.put(AssistHandleBehavior.OFF, new AssistHandleOffBehavior());
        mBehaviorMap.put(AssistHandleBehavior.LIKE_HOME, new AssistHandleLikeHomeBehavior());
        mBehaviorMap.put(AssistHandleBehavior.REMINDER_EXP, new AssistHandleReminderExpBehavior());
        if (testBehavior != null) {
            mBehaviorMap.put(AssistHandleBehavior.TEST, testBehavior);
        }

        mInGesturalMode = QuickStepContract.isGesturalMode(
                Dependency.get(NavigationModeController.class)
                        .addListener(this::handleNavigationModeChange));
@@ -126,7 +143,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
    }

    void onAssistantGesturePerformed() {
        mCurrentBehavior.getController().onAssistantGesturePerformed();
        mBehaviorMap.get(mCurrentBehavior).onAssistantGesturePerformed();
    }

    void setBehavior(AssistHandleBehavior behavior) {
@@ -134,9 +151,14 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
            return;
        }

        if (!mBehaviorMap.containsKey(behavior)) {
            Log.e(TAG, "Unsupported behavior requested: " + behavior.toString());
            return;
        }

        if (mInGesturalMode) {
            mCurrentBehavior.getController().onModeDeactivated();
            behavior.getController().onModeActivated(mContext, this);
            mBehaviorMap.get(mCurrentBehavior).onModeDeactivated();
            mBehaviorMap.get(behavior).onModeActivated(mContext, /* callbacks = */ this);
        }

        mCurrentBehavior = behavior;
@@ -150,21 +172,26 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
        }
    }

    private boolean handlesUnblocked(boolean ignoreThreshold) {
        long timeSinceHidden = SystemClock.elapsedRealtime() - mHandlesLastHiddenAt;
        boolean notThrottled = ignoreThreshold || timeSinceHidden > getShownFrequencyThreshold();
        ComponentName assistantComponent =
                mAssistUtils.getAssistComponentForUser(KeyguardUpdateMonitor.getCurrentUser());
        return notThrottled && assistantComponent != null;
    }

    private long getShownFrequencyThreshold() {
        long configValue = DeviceConfig.getLong(
        return DeviceConfig.getLong(
                DeviceConfig.NAMESPACE_SYSTEMUI,
                SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOWN_FREQUENCY_THRESHOLD_MS,
                DEFAULT_SHOWN_FREQUENCY_THRESHOLD_MS);
        return SystemProperties.getLong(
                SHOWN_FREQUENCY_THRESHOLD_KEY, configValue);
    }

    private long getShowAndGoDuration() {
        long configValue = DeviceConfig.getLong(
        return DeviceConfig.getLong(
                DeviceConfig.NAMESPACE_SYSTEMUI,
                SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS,
                DEFAULT_SHOW_AND_GO_DURATION_MS);
        return SystemProperties.getLong(SHOW_AND_GO_DURATION_KEY, configValue);
    }

    private void maybeShowHandles(boolean ignoreThreshold) {
@@ -172,8 +199,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
            return;
        }

        long timeSinceHidden = SystemClock.elapsedRealtime() - mHandlesLastHiddenAt;
        if (ignoreThreshold || timeSinceHidden > getShownFrequencyThreshold()) {
        if (handlesUnblocked(ignoreThreshold)) {
            mHandlesShowing = true;
            ScreenDecorations screenDecorations = mScreenDecorationsSupplier.get();
            if (screenDecorations == null) {
@@ -207,9 +233,9 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac

        mInGesturalMode = inGesturalMode;
        if (mInGesturalMode) {
            mCurrentBehavior.getController().onModeActivated(mContext, this);
            mBehaviorMap.get(mCurrentBehavior).onModeActivated(mContext, /* callbacks = */ this);
        } else {
            mCurrentBehavior.getController().onModeDeactivated();
            mBehaviorMap.get(mCurrentBehavior).onModeDeactivated();
            hide();
        }
    }
+2 −1
Original line number Diff line number Diff line
@@ -149,7 +149,8 @@ public class AssistManager implements ConfigurationChangedReceiver {
        mAssistUtils = new AssistUtils(context);
        mAssistDisclosure = new AssistDisclosure(context, new Handler());
        mPhoneStateMonitor = new PhoneStateMonitor(context);
        mHandleController = new AssistHandleBehaviorController(context, new Handler());
        mHandleController =
                new AssistHandleBehaviorController(context, mAssistUtils, new Handler());

        registerVoiceInteractionSessionListener();
        mInterestingConfigChanges = new InterestingConfigChanges(ActivityInfo.CONFIG_ORIENTATION
+56 −6
Original line number Diff line number Diff line
@@ -18,21 +18,27 @@ package com.android.systemui.assist;

import static org.mockito.AdditionalAnswers.answerVoid;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;

import android.content.ComponentName;
import android.os.Handler;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;

import androidx.test.filters.SmallTest;

import com.android.internal.app.AssistUtils;
import com.android.systemui.ScreenDecorations;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.recents.OverviewProxyService;

import org.junit.Before;
import org.junit.Test;
@@ -46,29 +52,35 @@ import org.mockito.MockitoAnnotations;
@RunWithLooper
public class AssistHandleBehaviorControllerTest extends SysuiTestCase {

    private final AssistHandleBehavior mTestBehavior = AssistHandleBehavior.TEST;
    private static final ComponentName COMPONENT_NAME = new ComponentName("", "");

    private AssistHandleBehaviorController mAssistHandleBehaviorController;

    @Mock private ScreenDecorations mMockScreenDecorations;
    @Mock private AssistUtils mMockAssistUtils;
    @Mock private Handler mMockHandler;
    @Mock private AssistHandleBehaviorController.BehaviorController mMockBehaviorController;

    @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());
        mTestBehavior.setTestController(mMockBehaviorController);
        mAssistHandleBehaviorController =
                new AssistHandleBehaviorController(
                        mContext, mMockHandler, () -> mMockScreenDecorations);
                        mContext,
                        mMockAssistUtils,
                        mMockHandler, () -> mMockScreenDecorations,
                        mMockBehaviorController);
    }

    @Test
    public void hide_hidesHandlesWhenShowing() {
        // Arrange
        when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
        mAssistHandleBehaviorController.showAndStay();
        reset(mMockScreenDecorations);

@@ -83,6 +95,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
    @Test
    public void hide_doesNothingWhenHiding() {
        // Arrange
        when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
        mAssistHandleBehaviorController.hide();
        reset(mMockScreenDecorations);

@@ -96,6 +109,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
    @Test
    public void showAndStay_showsHandlesWhenHiding() {
        // Arrange
        when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
        mAssistHandleBehaviorController.hide();
        reset(mMockScreenDecorations);

@@ -110,6 +124,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
    @Test
    public void showAndStay_doesNothingWhenShowing() {
        // Arrange
        when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
        mAssistHandleBehaviorController.showAndStay();
        reset(mMockScreenDecorations);

@@ -120,9 +135,24 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
        verifyNoMoreInteractions(mMockScreenDecorations);
    }

    @Test
    public void showAndStay_doesNothingWhenThereIsNoAssistant() {
        // Arrange
        when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(null);
        mAssistHandleBehaviorController.hide();
        reset(mMockScreenDecorations);

        // Act
        mAssistHandleBehaviorController.showAndStay();

        // Assert
        verifyNoMoreInteractions(mMockScreenDecorations);
    }

    @Test
    public void showAndGo_showsThenHidesHandlesWhenHiding() {
        // Arrange
        when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
        mAssistHandleBehaviorController.hide();
        reset(mMockScreenDecorations);

@@ -139,6 +169,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
    @Test
    public void showAndGo_hidesHandlesAfterTimeoutWhenShowing() {
        // Arrange
        when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
        mAssistHandleBehaviorController.showAndStay();
        reset(mMockScreenDecorations);

@@ -153,6 +184,7 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
    @Test
    public void showAndGo_doesNothingIfRecentlyHidden() {
        // Arrange
        when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
        mAssistHandleBehaviorController.showAndGo();
        reset(mMockScreenDecorations);

@@ -163,13 +195,28 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
        verifyNoMoreInteractions(mMockScreenDecorations);
    }

    @Test
    public void showAndGo_doesNothingWhenThereIsNoAssistant() {
        // Arrange
        when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(null);
        mAssistHandleBehaviorController.hide();
        reset(mMockScreenDecorations);

        // Act
        mAssistHandleBehaviorController.showAndGo();

        // Assert
        verifyNoMoreInteractions(mMockScreenDecorations);
    }

    @Test
    public void setBehavior_activatesTheBehaviorWhenInGesturalMode() {
        // Arrange
        when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
        mAssistHandleBehaviorController.setInGesturalModeForTest(true);

        // Act
        mAssistHandleBehaviorController.setBehavior(mTestBehavior);
        mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.TEST);

        // Assert
        verify(mMockBehaviorController).onModeActivated(mContext, mAssistHandleBehaviorController);
@@ -179,8 +226,10 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
    @Test
    public void setBehavior_deactivatesThePreviousBehaviorWhenInGesturalMode() {
        // Arrange
        mAssistHandleBehaviorController.setBehavior(mTestBehavior);
        when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
        mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.TEST);
        mAssistHandleBehaviorController.setInGesturalModeForTest(true);
        reset(mMockBehaviorController);

        // Act
        mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.OFF);
@@ -193,10 +242,11 @@ public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
    @Test
    public void setBehavior_doesNothingWhenNotInGesturalMode() {
        // Arrange
        when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
        mAssistHandleBehaviorController.setInGesturalModeForTest(false);

        // Act
        mAssistHandleBehaviorController.setBehavior(mTestBehavior);
        mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.TEST);

        // Assert
        verifyNoMoreInteractions(mMockBehaviorController);