Do not send proxy touch events to children.

Call onIntercept and ontouch direclty, so that the touch is only
handled by touch handlers

Bug: 77912191
Change-Id: I8b583da2394282c757348818470dbb4bee095b33
This commit is contained in:
Sunny Goyal 2018-04-13 18:19:16 -07:00
parent de967a2355
commit 864d688ff3
1 changed files with 7 additions and 5 deletions

View File

@ -39,13 +39,12 @@ import android.util.SparseArray;
import android.view.Choreographer;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.MainThreadExecutor;
import com.android.launcher3.R;
import com.android.launcher3.util.TraceHelper;
import com.android.launcher3.views.BaseDragLayer;
import com.android.quickstep.views.RecentsView;
import com.android.systemui.shared.recents.IOverviewProxy;
import com.android.systemui.shared.recents.ISystemUiProxy;
@ -248,7 +247,7 @@ public class TouchInteractionService extends Service {
private final ActivityControlHelper<T> mActivityHelper;
private final T mActivity;
private final View mTarget;
private final BaseDragLayer mTarget;
private final int[] mLocationOnScreen = new int[2];
private final PointF mDownPos = new PointF();
private final int mTouchSlop;
@ -293,7 +292,6 @@ public class TouchInteractionService extends Service {
case ACTION_MOVE: {
float displacement = ev.getY() - mDownPos.y;
if (Math.abs(displacement) >= mTouchSlop) {
mTrackingStarted = true;
mTarget.getLocationOnScreen(mLocationOnScreen);
// Send a down event only when mTouchSlop is crossed.
@ -301,6 +299,7 @@ public class TouchInteractionService extends Service {
down.setAction(ACTION_DOWN);
sendEvent(down);
down.recycle();
mTrackingStarted = true;
}
}
}
@ -319,7 +318,10 @@ public class TouchInteractionService extends Service {
int flags = ev.getEdgeFlags();
ev.setEdgeFlags(flags | EDGE_NAV_BAR);
ev.offsetLocation(-mLocationOnScreen[0], -mLocationOnScreen[1]);
mTarget.dispatchTouchEvent(ev);
if (!mTrackingStarted) {
mTarget.onInterceptTouchEvent(ev);
}
mTarget.onTouchEvent(ev);
ev.offsetLocation(mLocationOnScreen[0], mLocationOnScreen[1]);
ev.setEdgeFlags(flags);
}