From 11372fa466580bac916a330bb51ca8d274c6dca5 Mon Sep 17 00:00:00 2001 From: Vladislav Kaznacheev Date: Thu, 16 Feb 2017 09:37:56 -0800 Subject: [PATCH] Resolve pointer icon over FastScroller to arrow. Currently the icon defined by the host AbsListView is displayed over the fast scroll area. Bug: 35424111 Test: manual Change-Id: Ia9897a44550922f16573b97337841c3f6ae263da --- core/java/android/widget/AbsListView.java | 12 ++++++++++++ core/java/android/widget/FastScroller.java | 8 ++++++++ 2 files changed, 20 insertions(+) diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 4c9a866244688..1937187defed9 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -54,6 +54,7 @@ import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; +import android.view.PointerIcon; import android.view.VelocityTracker; import android.view.View; import android.view.ViewConfiguration; @@ -4401,6 +4402,17 @@ public abstract class AbsListView extends AdapterView implements Te return super.onInterceptHoverEvent(event); } + @Override + public PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex) { + if (mFastScroll != null) { + PointerIcon pointerIcon = mFastScroll.onResolvePointerIcon(event, pointerIndex); + if (pointerIcon != null) { + return pointerIcon; + } + } + return super.onResolvePointerIcon(event, pointerIndex); + } + @Override public boolean onInterceptTouchEvent(MotionEvent ev) { final int actionMasked = ev.getActionMasked(); diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java index 559181bdb8237..198bf2722d991 100644 --- a/core/java/android/widget/FastScroller.java +++ b/core/java/android/widget/FastScroller.java @@ -38,6 +38,7 @@ import android.util.Property; import android.util.TypedValue; import android.view.Gravity; import android.view.MotionEvent; +import android.view.PointerIcon; import android.view.View; import android.view.View.MeasureSpec; import android.view.ViewConfiguration; @@ -1441,6 +1442,13 @@ class FastScroller { return false; } + public PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex) { + if (mState == STATE_DRAGGING || isPointInside(event.getX(), event.getY())) { + return PointerIcon.getSystemIcon(mList.getContext(), PointerIcon.TYPE_ARROW); + } + return null; + } + public boolean onTouchEvent(MotionEvent me) { if (!isEnabled()) { return false;