diff options
| -rw-r--r-- | core/tests/coretests/src/android/widget/ScrollViewFunctionalTest.java | 45 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/assist/AssistManager.java | 9 |
2 files changed, 43 insertions, 11 deletions
diff --git a/core/tests/coretests/src/android/widget/ScrollViewFunctionalTest.java b/core/tests/coretests/src/android/widget/ScrollViewFunctionalTest.java index a49bb6af13d2..109c8080de94 100644 --- a/core/tests/coretests/src/android/widget/ScrollViewFunctionalTest.java +++ b/core/tests/coretests/src/android/widget/ScrollViewFunctionalTest.java @@ -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(); + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java index 4416b1979524..61af1f45ae5e 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java +++ b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java @@ -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) { |