[DO NOT MERGE] Fix some mouse + list-item selection/scrolling issues
Any "touch" interaction now hides selection (since mouse
doesn't enable touch-mode, this wasn't happening anymore;
also, allowing listview to scroll an actual selection
off-screen would be very involved and risky).
The selector hilight remains (since mouse doesn't enter
touch-mode). This is a new scenario, so this change also
makes sure to hide the selector hilight when it's target
view is scrolled off-screen.
Bug: 67881712
Bug: 67720587
Test: Existing CTS tests still pass. Can now click list items
via mouse even when scrolled. Visually checked that that
selector hilight is not visible if off-screen.
Change-Id: Ia7b0fd7b247e8d9d9e609364a5500717df648fd9
This commit is contained in:
committed by
Vladislav Kaznacheev
parent
5f291e5e06
commit
ca57523614
@@ -3873,6 +3873,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
|
||||
private void onTouchDown(MotionEvent ev) {
|
||||
mHasPerformedLongPress = false;
|
||||
mActivePointerId = ev.getPointerId(0);
|
||||
hideSelector();
|
||||
|
||||
if (mTouchMode == TOUCH_MODE_OVERFLING) {
|
||||
// Stopped the fling. It is a scroll.
|
||||
@@ -5233,17 +5234,21 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
|
||||
}
|
||||
|
||||
mRecycler.fullyDetachScrapViews();
|
||||
boolean selectorOnScreen = false;
|
||||
if (!inTouchMode && mSelectedPosition != INVALID_POSITION) {
|
||||
final int childIndex = mSelectedPosition - mFirstPosition;
|
||||
if (childIndex >= 0 && childIndex < getChildCount()) {
|
||||
positionSelector(mSelectedPosition, getChildAt(childIndex));
|
||||
selectorOnScreen = true;
|
||||
}
|
||||
} else if (mSelectorPosition != INVALID_POSITION) {
|
||||
final int childIndex = mSelectorPosition - mFirstPosition;
|
||||
if (childIndex >= 0 && childIndex < getChildCount()) {
|
||||
positionSelector(INVALID_POSITION, getChildAt(childIndex));
|
||||
positionSelector(mSelectorPosition, getChildAt(childIndex));
|
||||
selectorOnScreen = true;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
if (!selectorOnScreen) {
|
||||
mSelectorRect.setEmpty();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user