[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:
Liam, Lee Pong Lam
2024-06-04 00:34:49 +00:00
parent 61ac47e675
commit e48009919d
@@ -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;