Merge "Defer starting the recents animation when swiping over back button" into ub-launcher3-master
diff --git a/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java b/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java
index 80584c8..ad40952 100644
--- a/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java
+++ b/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java
@@ -23,6 +23,9 @@
import static android.view.MotionEvent.INVALID_POINTER_ID;
import static com.android.quickstep.RemoteRunnable.executeSafely;
+import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_BACK;
+import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_HOME;
+import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_NONE;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.ActivityOptions;
@@ -52,6 +55,7 @@
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.AssistDataReceiver;
import com.android.systemui.shared.system.BackgroundExecutor;
+import com.android.systemui.shared.system.NavigationBarCompat.HitTarget;
import com.android.systemui.shared.system.RecentsAnimationControllerCompat;
import com.android.systemui.shared.system.RecentsAnimationListener;
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
@@ -83,6 +87,7 @@
private BaseSwipeInteractionHandler mInteractionHandler;
private int mDisplayRotation;
private Rect mStableInsets = new Rect();
+ private @HitTarget int mDownHitTarget = HIT_TARGET_NONE;
private VelocityTracker mVelocityTracker;
@@ -99,6 +104,11 @@
}
@Override
+ public void setDownHitTarget(@HitTarget int downHitTarget) {
+ mDownHitTarget = downHitTarget;
+ }
+
+ @Override
public void accept(MotionEvent ev) {
if (mVelocityTracker == null) {
return;
@@ -112,8 +122,9 @@
mTouchSlop = ViewConfiguration.get(this).getScaledTouchSlop();
mTouchThresholdCrossed = false;
- // Start the window animation on down to give more time for launcher to draw
- if (!isUsingScreenShot()) {
+ // Start the window animation on down to give more time for launcher to draw if the
+ // user didn't start the gesture over the back button
+ if (mDownHitTarget != HIT_TARGET_BACK && !isUsingScreenShot()) {
startTouchTrackingForWindowAnimation();
}
@@ -155,6 +166,10 @@
if (isUsingScreenShot()) {
startTouchTrackingForScreenshotAnimation();
+ } else if (mDownHitTarget == HIT_TARGET_BACK) {
+ // If the window animation was deferred on DOWN due to it starting over
+ // the back button, then start it now
+ startTouchTrackingForWindowAnimation();
}
notifyGestureStarted();
diff --git a/quickstep/src/com/android/quickstep/TouchConsumer.java b/quickstep/src/com/android/quickstep/TouchConsumer.java
index 77480af..5cfa8df 100644
--- a/quickstep/src/com/android/quickstep/TouchConsumer.java
+++ b/quickstep/src/com/android/quickstep/TouchConsumer.java
@@ -20,6 +20,8 @@
import android.support.annotation.IntDef;
import android.view.MotionEvent;
+import com.android.systemui.shared.system.NavigationBarCompat.HitTarget;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.function.Consumer;
@@ -50,6 +52,8 @@
return false;
}
+ default void setDownHitTarget(@HitTarget int downHitTarget) { }
+
default void updateTouchTracking(@InteractionType int interactionType) { }
default void onQuickScrubEnd() { }
diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java
index d5fa723..35c982c 100644
--- a/quickstep/src/com/android/quickstep/TouchInteractionService.java
+++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java
@@ -35,6 +35,7 @@
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
+import android.os.RemoteException;
import android.util.Log;
import android.view.Choreographer;
import android.view.MotionEvent;
@@ -52,6 +53,7 @@
import com.android.systemui.shared.recents.IOverviewProxy;
import com.android.systemui.shared.recents.ISystemUiProxy;
import com.android.systemui.shared.system.ActivityManagerWrapper;
+import com.android.systemui.shared.system.NavigationBarCompat.HitTarget;
/**
* Service connected by system-UI for handling touch interaction.
@@ -71,6 +73,11 @@
private final IBinder mMyBinder = new IOverviewProxy.Stub() {
@Override
+ public void onPreMotionEvent(@HitTarget int downHitTarget) throws RemoteException {
+ onBinderPreMotionEvent(downHitTarget);
+ }
+
+ @Override
public void onMotionEvent(MotionEvent ev) {
onBinderMotionEvent(ev);
}
@@ -166,23 +173,25 @@
return mMyBinder;
}
- private void onBinderMotionEvent(MotionEvent ev) {
- if (ev.getActionMasked() == ACTION_DOWN) {
- mRunningTask = mAM.getRunningTask();
+ private void onBinderPreMotionEvent(@HitTarget int downHitTarget) {
+ mRunningTask = mAM.getRunningTask();
- mCurrentConsumer.reset();
- if (mRunningTask == null) {
- mCurrentConsumer = mNoOpTouchConsumer;
- } else if (mRunningTask.topActivity.equals(mLauncher)) {
- mCurrentConsumer = getLauncherConsumer();
- } else {
- mCurrentConsumer = getOtherActivityConsumer();
- }
-
- mEventQueue.setConsumer(mCurrentConsumer);
- mEventQueue.setInterimChoreographer(mCurrentConsumer.shouldUseBackgroundConsumer()
- ? mBackgroundThreadChoreographer : null);
+ mCurrentConsumer.reset();
+ if (mRunningTask == null) {
+ mCurrentConsumer = mNoOpTouchConsumer;
+ } else if (mRunningTask.topActivity.equals(mLauncher)) {
+ mCurrentConsumer = getLauncherConsumer();
+ } else {
+ mCurrentConsumer = getOtherActivityConsumer();
}
+
+ mCurrentConsumer.setDownHitTarget(downHitTarget);
+ mEventQueue.setConsumer(mCurrentConsumer);
+ mEventQueue.setInterimChoreographer(mCurrentConsumer.shouldUseBackgroundConsumer()
+ ? mBackgroundThreadChoreographer : null);
+ }
+
+ private void onBinderMotionEvent(MotionEvent ev) {
mCurrentConsumer.preProcessMotionEvent(ev);
mEventQueue.queue(ev);
}