Loading api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -47067,6 +47067,7 @@ package android.view { method public int getScaledEdgeSlop(); method public int getScaledFadingEdgeLength(); method public float getScaledHorizontalScrollFactor(); method public int getScaledHoverSlop(); method public int getScaledMaximumDrawingCacheSize(); method public int getScaledMaximumFlingVelocity(); method public int getScaledMinimumFlingVelocity(); core/java/android/view/View.java +37 −3 Original line number Diff line number Diff line Loading @@ -4299,6 +4299,38 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ Runnable mShowTooltipRunnable; Runnable mHideTooltipRunnable; /** * Hover move is ignored if it is within this distance in pixels from the previous one. */ int mHoverSlop; /** * Update the anchor position if it significantly (that is by at least mHoverSlop) * different from the previously stored position. Ignoring insignificant changes * filters out the jitter which is typical for such input sources as stylus. * * @return True if the position has been updated. */ private boolean updateAnchorPos(MotionEvent event) { final int newAnchorX = (int) event.getX(); final int newAnchorY = (int) event.getY(); if (Math.abs(newAnchorX - mAnchorX) <= mHoverSlop && Math.abs(newAnchorY - mAnchorY) <= mHoverSlop) { return false; } mAnchorX = newAnchorX; mAnchorY = newAnchorY; return true; } /** * Clear the anchor position to ensure that the next change is considered significant. */ private void clearAnchorPos() { mAnchorX = Integer.MAX_VALUE; mAnchorY = Integer.MAX_VALUE; } } TooltipInfo mTooltipInfo; Loading Loading @@ -26816,6 +26848,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mTooltipInfo = new TooltipInfo(); mTooltipInfo.mShowTooltipRunnable = this::showHoverTooltip; mTooltipInfo.mHideTooltipRunnable = this::hideTooltip; mTooltipInfo.mHoverSlop = ViewConfiguration.get(mContext).getScaledHoverSlop(); mTooltipInfo.clearAnchorPos(); } mTooltipInfo.mTooltipText = tooltipText; } Loading Loading @@ -26882,6 +26916,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mTooltipInfo.mTooltipPopup.hide(); mTooltipInfo.mTooltipPopup = null; mTooltipInfo.mTooltipFromLongClick = false; mTooltipInfo.clearAnchorPos(); if (mAttachInfo != null) { mAttachInfo.mTooltipHost = null; } Loading @@ -26906,11 +26941,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if ((mViewFlags & TOOLTIP) != TOOLTIP || (mViewFlags & ENABLED_MASK) != ENABLED) { break; } if (!mTooltipInfo.mTooltipFromLongClick) { if (!mTooltipInfo.mTooltipFromLongClick && mTooltipInfo.updateAnchorPos(event)) { if (mTooltipInfo.mTooltipPopup == null) { // Schedule showing the tooltip after a timeout. mTooltipInfo.mAnchorX = (int) event.getX(); mTooltipInfo.mAnchorY = (int) event.getY(); removeCallbacks(mTooltipInfo.mShowTooltipRunnable); postDelayed(mTooltipInfo.mShowTooltipRunnable, ViewConfiguration.getHoverTooltipShowTimeout()); Loading @@ -26932,6 +26965,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return true; case MotionEvent.ACTION_HOVER_EXIT: mTooltipInfo.clearAnchorPos(); if (!mTooltipInfo.mTooltipFromLongClick) { hideTooltip(); } core/java/android/view/ViewConfiguration.java +12 −0 Original line number Diff line number Diff line Loading @@ -290,6 +290,7 @@ public class ViewConfiguration { private final int mMaximumFlingVelocity; private final int mScrollbarSize; private final int mTouchSlop; private final int mHoverSlop; private final int mMinScrollbarTouchTarget; private final int mDoubleTapTouchSlop; private final int mPagingTouchSlop; Loading Loading @@ -320,6 +321,7 @@ public class ViewConfiguration { mMaximumFlingVelocity = MAXIMUM_FLING_VELOCITY; mScrollbarSize = SCROLL_BAR_SIZE; mTouchSlop = TOUCH_SLOP; mHoverSlop = TOUCH_SLOP / 2; mMinScrollbarTouchTarget = MIN_SCROLLBAR_TOUCH_TARGET; mDoubleTapTouchSlop = DOUBLE_TAP_TOUCH_SLOP; mPagingTouchSlop = PAGING_TOUCH_SLOP; Loading Loading @@ -407,6 +409,8 @@ public class ViewConfiguration { com.android.internal.R.bool.config_ui_enableFadingMarquee); mTouchSlop = res.getDimensionPixelSize( com.android.internal.R.dimen.config_viewConfigurationTouchSlop); mHoverSlop = res.getDimensionPixelSize( com.android.internal.R.dimen.config_viewConfigurationHoverSlop); mMinScrollbarTouchTarget = res.getDimensionPixelSize( com.android.internal.R.dimen.config_minScrollbarTouchTarget); mPagingTouchSlop = mTouchSlop * 2; Loading Loading @@ -639,6 +643,14 @@ public class ViewConfiguration { return mTouchSlop; } /** * @return Distance in pixels a hover can wander while it is still considered "stationary". * */ public int getScaledHoverSlop() { return mHoverSlop; } /** * @return Distance in pixels the first touch can wander before we do not consider this a * potential double tap event Loading core/res/res/values/config.xml +4 −0 Original line number Diff line number Diff line Loading @@ -2097,6 +2097,10 @@ movement threshold where scrolling should begin. --> <dimen name="config_viewConfigurationTouchSlop">8dp</dimen> <!-- Base "hover slop" value used by ViewConfiguration as a movement threshold under which hover is considered "stationary". --> <dimen name="config_viewConfigurationHoverSlop">4dp</dimen> <!-- Minimum velocity to initiate a fling, as measured in dips per second. --> <dimen name="config_viewMinFlingVelocity">50dp</dimen> Loading core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -470,6 +470,7 @@ <java-symbol type="dimen" name="config_minScrollbarTouchTarget" /> <java-symbol type="dimen" name="config_prefDialogWidth" /> <java-symbol type="dimen" name="config_viewConfigurationTouchSlop" /> <java-symbol type="dimen" name="config_viewConfigurationHoverSlop" /> <java-symbol type="dimen" name="config_viewMinFlingVelocity" /> <java-symbol type="dimen" name="config_viewMaxFlingVelocity" /> <java-symbol type="dimen" name="config_scrollbarSize" /> Loading Loading
api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -47067,6 +47067,7 @@ package android.view { method public int getScaledEdgeSlop(); method public int getScaledFadingEdgeLength(); method public float getScaledHorizontalScrollFactor(); method public int getScaledHoverSlop(); method public int getScaledMaximumDrawingCacheSize(); method public int getScaledMaximumFlingVelocity(); method public int getScaledMinimumFlingVelocity();
core/java/android/view/View.java +37 −3 Original line number Diff line number Diff line Loading @@ -4299,6 +4299,38 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ Runnable mShowTooltipRunnable; Runnable mHideTooltipRunnable; /** * Hover move is ignored if it is within this distance in pixels from the previous one. */ int mHoverSlop; /** * Update the anchor position if it significantly (that is by at least mHoverSlop) * different from the previously stored position. Ignoring insignificant changes * filters out the jitter which is typical for such input sources as stylus. * * @return True if the position has been updated. */ private boolean updateAnchorPos(MotionEvent event) { final int newAnchorX = (int) event.getX(); final int newAnchorY = (int) event.getY(); if (Math.abs(newAnchorX - mAnchorX) <= mHoverSlop && Math.abs(newAnchorY - mAnchorY) <= mHoverSlop) { return false; } mAnchorX = newAnchorX; mAnchorY = newAnchorY; return true; } /** * Clear the anchor position to ensure that the next change is considered significant. */ private void clearAnchorPos() { mAnchorX = Integer.MAX_VALUE; mAnchorY = Integer.MAX_VALUE; } } TooltipInfo mTooltipInfo; Loading Loading @@ -26816,6 +26848,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mTooltipInfo = new TooltipInfo(); mTooltipInfo.mShowTooltipRunnable = this::showHoverTooltip; mTooltipInfo.mHideTooltipRunnable = this::hideTooltip; mTooltipInfo.mHoverSlop = ViewConfiguration.get(mContext).getScaledHoverSlop(); mTooltipInfo.clearAnchorPos(); } mTooltipInfo.mTooltipText = tooltipText; } Loading Loading @@ -26882,6 +26916,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mTooltipInfo.mTooltipPopup.hide(); mTooltipInfo.mTooltipPopup = null; mTooltipInfo.mTooltipFromLongClick = false; mTooltipInfo.clearAnchorPos(); if (mAttachInfo != null) { mAttachInfo.mTooltipHost = null; } Loading @@ -26906,11 +26941,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if ((mViewFlags & TOOLTIP) != TOOLTIP || (mViewFlags & ENABLED_MASK) != ENABLED) { break; } if (!mTooltipInfo.mTooltipFromLongClick) { if (!mTooltipInfo.mTooltipFromLongClick && mTooltipInfo.updateAnchorPos(event)) { if (mTooltipInfo.mTooltipPopup == null) { // Schedule showing the tooltip after a timeout. mTooltipInfo.mAnchorX = (int) event.getX(); mTooltipInfo.mAnchorY = (int) event.getY(); removeCallbacks(mTooltipInfo.mShowTooltipRunnable); postDelayed(mTooltipInfo.mShowTooltipRunnable, ViewConfiguration.getHoverTooltipShowTimeout()); Loading @@ -26932,6 +26965,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return true; case MotionEvent.ACTION_HOVER_EXIT: mTooltipInfo.clearAnchorPos(); if (!mTooltipInfo.mTooltipFromLongClick) { hideTooltip(); }
core/java/android/view/ViewConfiguration.java +12 −0 Original line number Diff line number Diff line Loading @@ -290,6 +290,7 @@ public class ViewConfiguration { private final int mMaximumFlingVelocity; private final int mScrollbarSize; private final int mTouchSlop; private final int mHoverSlop; private final int mMinScrollbarTouchTarget; private final int mDoubleTapTouchSlop; private final int mPagingTouchSlop; Loading Loading @@ -320,6 +321,7 @@ public class ViewConfiguration { mMaximumFlingVelocity = MAXIMUM_FLING_VELOCITY; mScrollbarSize = SCROLL_BAR_SIZE; mTouchSlop = TOUCH_SLOP; mHoverSlop = TOUCH_SLOP / 2; mMinScrollbarTouchTarget = MIN_SCROLLBAR_TOUCH_TARGET; mDoubleTapTouchSlop = DOUBLE_TAP_TOUCH_SLOP; mPagingTouchSlop = PAGING_TOUCH_SLOP; Loading Loading @@ -407,6 +409,8 @@ public class ViewConfiguration { com.android.internal.R.bool.config_ui_enableFadingMarquee); mTouchSlop = res.getDimensionPixelSize( com.android.internal.R.dimen.config_viewConfigurationTouchSlop); mHoverSlop = res.getDimensionPixelSize( com.android.internal.R.dimen.config_viewConfigurationHoverSlop); mMinScrollbarTouchTarget = res.getDimensionPixelSize( com.android.internal.R.dimen.config_minScrollbarTouchTarget); mPagingTouchSlop = mTouchSlop * 2; Loading Loading @@ -639,6 +643,14 @@ public class ViewConfiguration { return mTouchSlop; } /** * @return Distance in pixels a hover can wander while it is still considered "stationary". * */ public int getScaledHoverSlop() { return mHoverSlop; } /** * @return Distance in pixels the first touch can wander before we do not consider this a * potential double tap event Loading
core/res/res/values/config.xml +4 −0 Original line number Diff line number Diff line Loading @@ -2097,6 +2097,10 @@ movement threshold where scrolling should begin. --> <dimen name="config_viewConfigurationTouchSlop">8dp</dimen> <!-- Base "hover slop" value used by ViewConfiguration as a movement threshold under which hover is considered "stationary". --> <dimen name="config_viewConfigurationHoverSlop">4dp</dimen> <!-- Minimum velocity to initiate a fling, as measured in dips per second. --> <dimen name="config_viewMinFlingVelocity">50dp</dimen> Loading
core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -470,6 +470,7 @@ <java-symbol type="dimen" name="config_minScrollbarTouchTarget" /> <java-symbol type="dimen" name="config_prefDialogWidth" /> <java-symbol type="dimen" name="config_viewConfigurationTouchSlop" /> <java-symbol type="dimen" name="config_viewConfigurationHoverSlop" /> <java-symbol type="dimen" name="config_viewMinFlingVelocity" /> <java-symbol type="dimen" name="config_viewMaxFlingVelocity" /> <java-symbol type="dimen" name="config_scrollbarSize" /> Loading