Using cachedEventDispatcher when swiping up on homescreen
Change-Id: I483030099a1b265bfa4df0e9fc0dabe101cc6797
diff --git a/quickstep/src/com/android/quickstep/OverviewTouchConsumer.java b/quickstep/src/com/android/quickstep/OverviewTouchConsumer.java
index f9961d9..4da52e1 100644
--- a/quickstep/src/com/android/quickstep/OverviewTouchConsumer.java
+++ b/quickstep/src/com/android/quickstep/OverviewTouchConsumer.java
@@ -18,8 +18,6 @@
import static android.view.MotionEvent.ACTION_CANCEL;
import static android.view.MotionEvent.ACTION_DOWN;
import static android.view.MotionEvent.ACTION_MOVE;
-import static android.view.MotionEvent.ACTION_POINTER_DOWN;
-import static android.view.MotionEvent.ACTION_POINTER_INDEX_SHIFT;
import static android.view.MotionEvent.ACTION_UP;
import static com.android.quickstep.TouchInteractionService.TOUCH_INTERACTION_LOG;
@@ -31,6 +29,7 @@
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.views.BaseDragLayer;
+import com.android.quickstep.util.CachedEventDispatcher;
import com.android.systemui.shared.system.ActivityManagerWrapper;
/**
@@ -39,6 +38,7 @@
public class OverviewTouchConsumer<T extends BaseDraggingActivity>
implements TouchConsumer {
+ private final CachedEventDispatcher mCachedEventDispatcher = new CachedEventDispatcher();
private final T mActivity;
private final BaseDragLayer mTarget;
private final int[] mLocationOnScreen = new int[2];
@@ -62,6 +62,7 @@
if (mInvalidated) {
return;
}
+ mCachedEventDispatcher.dispatchEvent(ev);
int action = ev.getActionMasked();
if (action == ACTION_DOWN) {
if (mStartingInActivityBounds) {
@@ -90,12 +91,13 @@
}
}
- if (mTrackingStarted) {
- sendEvent(ev);
- }
-
if (action == ACTION_UP || action == ACTION_CANCEL) {
mInvalidated = true;
+
+ // Set an empty consumer to that all the cached events are cleared
+ if (!mCachedEventDispatcher.hasConsumer()) {
+ mCachedEventDispatcher.setConsumer(NO_OP);
+ }
}
}
@@ -105,38 +107,27 @@
mTarget.getLocationOnScreen(mLocationOnScreen);
}
- // Send down touch event
- MotionEvent down = MotionEvent.obtainNoHistory(ev);
- down.setAction(ACTION_DOWN);
- sendEvent(down);
-
- mTrackingStarted = true;
- // Send pointer down for remaining pointers.
- int pointerCount = ev.getPointerCount();
- for (int i = 1; i < pointerCount; i++) {
- down.setAction(ACTION_POINTER_DOWN | (i << ACTION_POINTER_INDEX_SHIFT));
- sendEvent(down);
- }
-
- down.recycle();
-
if (closeActiveWindows) {
OverviewCallbacks.get(mActivity).closeAllWindows();
ActivityManagerWrapper.getInstance()
.closeSystemWindows(CLOSE_SYSTEM_WINDOWS_REASON_RECENTS);
TOUCH_INTERACTION_LOG.startQuickStep();
}
+
+ mTrackingStarted = true;
+ mCachedEventDispatcher.setConsumer(this::sendEvent);
+
}
private void sendEvent(MotionEvent ev) {
- if (!mTarget.verifyTouchDispatch(this, ev)) {
+ if (mInvalidated || !mTarget.verifyTouchDispatch(this, ev)) {
mInvalidated = true;
return;
}
int flags = ev.getEdgeFlags();
ev.setEdgeFlags(flags | TouchInteractionService.EDGE_NAV_BAR);
ev.offsetLocation(-mLocationOnScreen[0], -mLocationOnScreen[1]);
- if (!mTrackingStarted) {
+ if (ev.getAction() == ACTION_DOWN) {
mTarget.onInterceptTouchEvent(ev);
}
mTarget.onTouchEvent(ev);