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

Commit 8f40d44c authored by Andy Wickham's avatar Andy Wickham Committed by Android (Google) Code Review
Browse files

Merge changes from topics "cherrypick-lock-task-1l1m9ziktkw",...

Merge changes from topics "cherrypick-lock-task-1l1m9ziktkw", "cherrypicker-L23700030000857114:N48700030014533099" into udc-qpr-dev

* changes:
  Disallow startAssist while lock task mode (kiosk) is active.
  Fix ScrollViewFunctionalTest running on Test thread
parents ef8d9738 4a1dabf6
Loading
Loading
Loading
Loading
+35 −10
Original line number Diff line number Diff line
@@ -17,7 +17,9 @@
package android.widget;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import android.content.Context;
import android.platform.test.annotations.Presubmit;
import android.util.PollingCheck;

@@ -32,6 +34,9 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

@RunWith(AndroidJUnit4.class)
@MediumTest
@Presubmit
@@ -49,23 +54,43 @@ public class ScrollViewFunctionalTest {
    }

    @Test
    public void testScrollAfterFlingTop() {
        mScrollView.scrollTo(0, 100);
        mScrollView.fling(-10000);
        PollingCheck.waitFor(() -> mScrollView.mEdgeGlowTop.getDistance() > 0);
        PollingCheck.waitFor(() -> mScrollView.mEdgeGlowTop.getDistance() == 0f);
    public void testScrollAfterFlingTop() throws Throwable {
        WatchedEdgeEffect edgeEffect = new WatchedEdgeEffect(mActivity);
        mScrollView.mEdgeGlowTop = edgeEffect;
        mActivityRule.runOnUiThread(() -> mScrollView.scrollTo(0, 100));
        mActivityRule.runOnUiThread(() -> mScrollView.fling(-10000));
        assertTrue(edgeEffect.onAbsorbLatch.await(1, TimeUnit.SECONDS));
        mActivityRule.runOnUiThread(() -> {}); // let the absorb takes effect -- least one frame
        PollingCheck.waitFor(() -> edgeEffect.getDistance() == 0f);
        assertEquals(0, mScrollView.getScrollY());
    }

    @Test
    public void testScrollAfterFlingBottom() {
    public void testScrollAfterFlingBottom() throws Throwable {
        WatchedEdgeEffect edgeEffect = new WatchedEdgeEffect(mActivity);
        mScrollView.mEdgeGlowBottom = edgeEffect;
        int childHeight = mScrollView.getChildAt(0).getHeight();
        int maxScroll = childHeight - mScrollView.getHeight();
        mScrollView.scrollTo(0, maxScroll - 100);
        mScrollView.fling(10000);
        PollingCheck.waitFor(() -> mScrollView.mEdgeGlowBottom.getDistance() > 0);
        PollingCheck.waitFor(() -> mScrollView.mEdgeGlowBottom.getDistance() == 0f);
        mActivityRule.runOnUiThread(() -> mScrollView.scrollTo(0, maxScroll - 100));
        mActivityRule.runOnUiThread(() -> mScrollView.fling(10000));
        assertTrue(edgeEffect.onAbsorbLatch.await(1, TimeUnit.SECONDS));
        mActivityRule.runOnUiThread(() -> {}); // let the absorb takes effect -- least one frame
        PollingCheck.waitFor(() -> edgeEffect.getDistance() == 0f);
        assertEquals(maxScroll, mScrollView.getScrollY());
    }

    static class WatchedEdgeEffect extends EdgeEffect {
        public CountDownLatch onAbsorbLatch = new CountDownLatch(1);

        WatchedEdgeEffect(Context context) {
            super(context);
        }

        @Override
        public void onAbsorb(int velocity) {
            super.onAbsorb(velocity);
            onAbsorbLatch.countDown();
        }
    }
}
+8 −1
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.app.SearchManager;
import android.content.ActivityNotFoundException;
@@ -144,6 +145,7 @@ public class AssistManager {
    private final UserTracker mUserTracker;
    private final DisplayTracker mDisplayTracker;
    private final SecureSettings mSecureSettings;
    private final ActivityManager mActivityManager;

    private final DeviceProvisionedController mDeviceProvisionedController;

@@ -183,7 +185,8 @@ public class AssistManager {
            @Main Handler uiHandler,
            UserTracker userTracker,
            DisplayTracker displayTracker,
            SecureSettings secureSettings) {
            SecureSettings secureSettings,
            ActivityManager activityManager) {
        mContext = context;
        mDeviceProvisionedController = controller;
        mCommandQueue = commandQueue;
@@ -195,6 +198,7 @@ public class AssistManager {
        mUserTracker = userTracker;
        mDisplayTracker = displayTracker;
        mSecureSettings = secureSettings;
        mActivityManager = activityManager;

        registerVoiceInteractionSessionListener();
        registerVisualQueryRecognitionStatusListener();
@@ -266,6 +270,9 @@ public class AssistManager {
    }

    public void startAssist(Bundle args) {
        if (mActivityManager.getLockTaskModeState() == ActivityManager.LOCK_TASK_MODE_LOCKED) {
            return;
        }
        if (shouldOverrideAssist(args)) {
            try {
                if (mOverviewProxyService.getProxy() == null) {