Merge "Filter out detached views from touch" into pi-dev

This commit is contained in:
TreeHugger Robot
2018-03-10 00:18:34 +00:00
committed by Android (Google) Code Review
2 changed files with 26 additions and 2 deletions

View File

@@ -95,8 +95,12 @@ public class NearestTouchFrame extends FrameLayout {
}
private View findNearestChild(MotionEvent event) {
return mClickableChildren.stream().map(v -> new Pair<>(distance(v, event), v))
.min(Comparator.comparingInt(f -> f.first)).get().second;
return mClickableChildren
.stream()
.filter(v -> v.isAttachedToWindow())
.map(v -> new Pair<>(distance(v, event), v))
.min(Comparator.comparingInt(f -> f.first))
.get().second;
}
private int distance(View v, MotionEvent event) {

View File

@@ -88,6 +88,25 @@ public class NearestTouchFrameTest extends SysuiTestCase {
ev.recycle();
}
@Test
public void testNearestView_DetachedViewsExcluded() {
View left = mockViewAt(0, 0, 10, 10);
when(left.isAttachedToWindow()).thenReturn(false);
View right = mockViewAt(20, 0, 10, 10);
mNearestTouchFrame.addView(left);
mNearestTouchFrame.addView(right);
mNearestTouchFrame.onMeasure(0, 0);
// Would go to left view if attached, but goes to right instead as left should be detached.
MotionEvent ev = MotionEvent.obtain(0, 0, 0,
12 /* x */, 5 /* y */, 0);
mNearestTouchFrame.onTouchEvent(ev);
verify(right).onTouchEvent(eq(ev));
ev.recycle();
}
@Test
public void testHorizontalSelection_Left() {
View left = mockViewAt(0, 0, 10, 10);
@@ -161,6 +180,7 @@ public class NearestTouchFrameTest extends SysuiTestCase {
return null;
}).when(v).getLocationInWindow(any());
when(v.isClickable()).thenReturn(true);
when(v.isAttachedToWindow()).thenReturn(true);
// Stupid final methods.
v.setLeft(0);