summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Adam Powell <adamp@google.com> 2019-06-10 08:38:49 -0700
committer Adam Powell <adamp@google.com> 2019-06-10 20:24:20 +0000
commit8624121b27c0c724940a9c298ddda20f73d00b23 (patch)
treef74b5f5f0f3fb6b3425c57454404dc6f71aa43bc
parent503b4893846028b12318e959abbc63eae5416729 (diff)
Gesture exclusion for seekbar thumbs/edit handles
Track gesture exclusion rects for seekbars and EditText selection and cursor handles. Bug: 133845668 Bug: 129338678 Test: cts/manual Change-Id: I029d8ba465459f8ecaa14ee8ad0f5f4139b24e65
-rw-r--r--core/java/android/widget/AbsSeekBar.java30
-rw-r--r--core/java/android/widget/Editor.java7
2 files changed, 37 insertions, 0 deletions
diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java
index 18c6abb3f5f1..50bb6883b903 100644
--- a/core/java/android/widget/AbsSeekBar.java
+++ b/core/java/android/widget/AbsSeekBar.java
@@ -38,6 +38,11 @@ import android.view.accessibility.AccessibilityNodeInfo;
import android.view.inspector.InspectableProperty;
import com.android.internal.R;
+import com.android.internal.util.Preconditions;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
/**
@@ -91,6 +96,10 @@ public abstract class AbsSeekBar extends ProgressBar {
@UnsupportedAppUsage
private boolean mIsDragging;
+ private List<Rect> mUserGestureExclusionRects = Collections.emptyList();
+ private final List<Rect> mGestureExclusionRects = new ArrayList<>();
+ private final Rect mThumbRect = new Rect();
+
public AbsSeekBar(Context context) {
super(context);
}
@@ -735,6 +744,27 @@ public abstract class AbsSeekBar extends ProgressBar {
// Canvas will be translated, so 0,0 is where we start drawing
thumb.setBounds(left, top, right, bottom);
+ updateGestureExclusionRects();
+ }
+
+ @Override
+ public void setSystemGestureExclusionRects(@NonNull List<Rect> rects) {
+ Preconditions.checkNotNull(rects, "rects must not be null");
+ mUserGestureExclusionRects = rects;
+ updateGestureExclusionRects();
+ }
+
+ private void updateGestureExclusionRects() {
+ final Drawable thumb = mThumb;
+ if (thumb == null) {
+ super.setSystemGestureExclusionRects(mUserGestureExclusionRects);
+ return;
+ }
+ mGestureExclusionRects.clear();
+ thumb.copyBounds(mThumbRect);
+ mGestureExclusionRects.add(mThumbRect);
+ mGestureExclusionRects.addAll(mUserGestureExclusionRects);
+ super.setSystemGestureExclusionRects(mGestureExclusionRects);
}
/**
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index c9ef038b78de..cac75cfd8432 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -134,6 +134,7 @@ import java.lang.annotation.RetentionPolicy;
import java.text.BreakIterator;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
@@ -5097,6 +5098,12 @@ public class Editor {
void onHandleMoved() {}
public void onDetached() {}
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+ setSystemGestureExclusionRects(Collections.singletonList(new Rect(0, 0, w, h)));
+ }
}
private class InsertionHandleView extends HandleView {