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

Commit 20a2e7ae authored by Matt Casey's avatar Matt Casey Committed by Android (Google) Code Review
Browse files

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

parents 08236f3d 5dfe9658
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);