Merge QQ1A.191205.011 into stage-aosp-master
Bug: 144955631 Merged-In: I482ace6717063630d3c5018c471601cfd21a2f19 Change-Id: I4e52c840563ce3fc739adadf8f9eeb3178afffad
This commit is contained in:
@@ -19,6 +19,8 @@ import static android.view.MotionEvent.ACTION_CANCEL;
|
||||
import static android.view.MotionEvent.ACTION_DOWN;
|
||||
import static android.view.MotionEvent.ACTION_UP;
|
||||
|
||||
import android.os.SystemClock;
|
||||
import android.util.Log;
|
||||
import android.view.InputEvent;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.MotionEvent;
|
||||
@@ -38,6 +40,8 @@ import java.util.function.Supplier;
|
||||
*/
|
||||
public class RecentsAnimationWrapper {
|
||||
|
||||
private static final String TAG = "RecentsAnimationWrapper";
|
||||
|
||||
// A list of callbacks to run when we receive the recents animation target. There are different
|
||||
// than the state callbacks as these run on the current worker thread.
|
||||
private final ArrayList<Runnable> mCallbacks = new ArrayList<>();
|
||||
@@ -125,6 +129,7 @@ public class RecentsAnimationWrapper {
|
||||
boolean sendUserLeaveHint) {
|
||||
SwipeAnimationTargetSet controller = targetSet;
|
||||
targetSet = null;
|
||||
disableInputProxy();
|
||||
if (controller != null) {
|
||||
controller.finishController(toRecents, onFinishComplete, sendUserLeaveHint);
|
||||
}
|
||||
@@ -153,6 +158,16 @@ public class RecentsAnimationWrapper {
|
||||
mInputConsumerController.setInputListener(this::onInputConsumerEvent);
|
||||
}
|
||||
|
||||
private void disableInputProxy() {
|
||||
if (mInputConsumer != null && mTouchInProgress) {
|
||||
long now = SystemClock.uptimeMillis();
|
||||
MotionEvent dummyCancel = MotionEvent.obtain(now, now, ACTION_CANCEL, 0, 0, 0);
|
||||
mInputConsumer.onMotionEvent(dummyCancel);
|
||||
dummyCancel.recycle();
|
||||
}
|
||||
mInputConsumerController.setInputListener(null);
|
||||
}
|
||||
|
||||
private boolean onInputConsumerEvent(InputEvent ev) {
|
||||
if (ev instanceof MotionEvent) {
|
||||
onInputConsumerMotionEvent((MotionEvent) ev);
|
||||
@@ -168,6 +183,18 @@ public class RecentsAnimationWrapper {
|
||||
|
||||
private boolean onInputConsumerMotionEvent(MotionEvent ev) {
|
||||
int action = ev.getAction();
|
||||
|
||||
// Just to be safe, verify that ACTION_DOWN comes before any other action,
|
||||
// and ignore any ACTION_DOWN after the first one (though that should not happen).
|
||||
if (!mTouchInProgress && action != ACTION_DOWN) {
|
||||
Log.w(TAG, "Received non-down motion before down motion: " + action);
|
||||
return false;
|
||||
}
|
||||
if (mTouchInProgress && action == ACTION_DOWN) {
|
||||
Log.w(TAG, "Received down motion while touch was already in progress");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (action == ACTION_DOWN) {
|
||||
mTouchInProgress = true;
|
||||
if (mInputConsumer == null) {
|
||||
|
||||
+9
-1
@@ -923,7 +923,15 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
||||
windowAnim.addListener(new AnimationSuccessListener() {
|
||||
@Override
|
||||
public void onAnimationSuccess(Animator animator) {
|
||||
setStateOnUiThread(target.endState);
|
||||
if (target == NEW_TASK && mRecentsView != null
|
||||
&& mRecentsView.getNextPage() == mRecentsView.getRunningTaskIndex()) {
|
||||
// We are about to launch the current running task, so use LAST_TASK state
|
||||
// instead of NEW_TASK. This could happen, for example, if our scroll is
|
||||
// aborted after we determined the target to be NEW_TASK.
|
||||
setStateOnUiThread(LAST_TASK.endState);
|
||||
} else {
|
||||
setStateOnUiThread(target.endState);
|
||||
}
|
||||
}
|
||||
});
|
||||
windowAnim.start();
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package com.android.quickstep.views;
|
||||
|
||||
import static androidx.dynamicanimation.animation.DynamicAnimation.MIN_VISIBLE_CHANGE_PIXELS;
|
||||
|
||||
import static com.android.launcher3.BaseActivity.STATE_HANDLER_INVISIBILITY_FLAGS;
|
||||
import static com.android.launcher3.InvariantDeviceProfile.CHANGE_FLAG_ICON_PARAMS;
|
||||
import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
|
||||
@@ -572,9 +571,13 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
|
||||
final TaskView taskView = (TaskView) getChildAt(pageIndex);
|
||||
taskView.bind(task);
|
||||
}
|
||||
TaskView runningTaskView = getRunningTaskView();
|
||||
if (runningTaskView != null) {
|
||||
setCurrentPage(indexOfChild(runningTaskView));
|
||||
|
||||
if (mNextPage == INVALID_PAGE) {
|
||||
// Set the current page to the running task, but not if settling on new task.
|
||||
TaskView runningTaskView = getRunningTaskView();
|
||||
if (runningTaskView != null) {
|
||||
setCurrentPage(indexOfChild(runningTaskView));
|
||||
}
|
||||
}
|
||||
|
||||
if (mIgnoreResetTaskId != -1 && getTaskView(mIgnoreResetTaskId) != ignoreRestTaskView) {
|
||||
|
||||
@@ -1088,7 +1088,9 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
|
||||
if (mFreeScroll) {
|
||||
setCurrentPage(getNextPage());
|
||||
} else if (wasFreeScroll) {
|
||||
snapToPage(getNextPage());
|
||||
if (getScrollForPage(getNextPage()) != getScrollX()) {
|
||||
snapToPage(getNextPage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user