summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/tests/coretests/src/android/widget/ScrollViewFunctionalTest.java45
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistManager.java9
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) {