[Launcher3] Hide keyboard when fastscroller scrolling down and keyboard
shown Implement keyboard hiding logic: Hide keyboard when scrolling down (y > mLastY) unless already requested (mRequestedHideKeyboard). Track hide request state to prevent redundant calls. New added logic: Only hide keyobard while dragging the scrollbar result video: https://photos.app.goo.gl/e4dYUUiUN3BujNUz9 Bug: 333967597 Flag: EXEMPT bugfix Test: Manual Change-Id: Id672763c69cbb37aeb7a1fd3f17eb168de9f49b4
This commit is contained in:
@@ -109,6 +109,13 @@ public class RecyclerViewFastScroller extends View {
|
||||
|
||||
private float mLastTouchY;
|
||||
private boolean mIsDragging;
|
||||
/**
|
||||
* Tracks whether a keyboard hide request has been sent due to downward scrolling.
|
||||
* <p>
|
||||
* Set to true when scrolling down and reset when scrolling up to prevents redundant hide
|
||||
* requests during continuous downward scrolls.
|
||||
*/
|
||||
private boolean mRequestedHideKeyboard;
|
||||
private boolean mIsThumbDetached;
|
||||
private final boolean mCanThumbDetach;
|
||||
private boolean mIgnoreDragGesture;
|
||||
@@ -127,6 +134,7 @@ public class RecyclerViewFastScroller extends View {
|
||||
|
||||
protected FastScrollRecyclerView mRv;
|
||||
private RecyclerView.OnScrollListener mOnScrollListener;
|
||||
private final ActivityContext mActivityContext;
|
||||
|
||||
private int mDownX;
|
||||
private int mDownY;
|
||||
@@ -163,7 +171,7 @@ public class RecyclerViewFastScroller extends View {
|
||||
mDeltaThreshold = res.getDisplayMetrics().density * SCROLL_DELTA_THRESHOLD_DP;
|
||||
mScrollbarLeftOffsetTouchDelegate = res.getDisplayMetrics().density
|
||||
* SCROLLBAR_LEFT_OFFSET_TOUCH_DELEGATE_DP;
|
||||
|
||||
mActivityContext = ActivityContext.lookupContext(context);
|
||||
TypedArray ta =
|
||||
context.obtainStyledAttributes(attrs, R.styleable.RecyclerViewFastScroller, defStyleAttr, 0);
|
||||
mCanThumbDetach = ta.getBoolean(R.styleable.RecyclerViewFastScroller_canThumbDetach, false);
|
||||
@@ -248,6 +256,7 @@ public class RecyclerViewFastScroller extends View {
|
||||
mDownX = x;
|
||||
mDownY = mLastY = y;
|
||||
mDownTimeStampMillis = ev.getDownTime();
|
||||
mRequestedHideKeyboard = false;
|
||||
|
||||
if ((Math.abs(mDy) < mDeltaThreshold &&
|
||||
mRv.getScrollState() != SCROLL_STATE_IDLE)) {
|
||||
@@ -260,6 +269,7 @@ public class RecyclerViewFastScroller extends View {
|
||||
}
|
||||
break;
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
boolean isScrollingDown = y > mLastY;
|
||||
mLastY = y;
|
||||
int absDeltaY = Math.abs(y - mDownY);
|
||||
int absDeltaX = Math.abs(x - mDownX);
|
||||
@@ -275,6 +285,14 @@ public class RecyclerViewFastScroller extends View {
|
||||
}
|
||||
}
|
||||
if (mIsDragging) {
|
||||
if (isScrollingDown) {
|
||||
if (!mRequestedHideKeyboard) {
|
||||
mActivityContext.hideKeyboard();
|
||||
}
|
||||
mRequestedHideKeyboard = true;
|
||||
} else {
|
||||
mRequestedHideKeyboard = false;
|
||||
}
|
||||
updateFastScrollSectionNameAndThumbOffset(y);
|
||||
}
|
||||
break;
|
||||
@@ -294,7 +312,6 @@ public class RecyclerViewFastScroller extends View {
|
||||
}
|
||||
|
||||
private void calcTouchOffsetAndPrepToFastScroll(int downY, int lastY) {
|
||||
ActivityContext.lookupContext(getContext()).hideKeyboard();
|
||||
mIsDragging = true;
|
||||
if (mCanThumbDetach) {
|
||||
mIsThumbDetached = true;
|
||||
|
||||
Reference in New Issue
Block a user