Fix quickswitch flickers/ignored swipes
- Don't set current page to running task when applying load plan,
if we are already settling on a new task to launch.
- When starting a new task, finish to the running app if that's
the task being started (should not happen with above change)
- When disabling free scroll mode, don't snap to a page if we're
already on it. This was setting mNextPage so the first check
was falsing.
Bug: 142068081
Change-Id: I5b392d9726a81c51718d2f94eee6cd4f78b61f69
(cherry picked from commit af33f2c9d4)
This commit is contained in:
+9
-1
@@ -927,7 +927,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;
|
||||
@@ -573,11 +572,14 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
|
||||
taskView.bind(task);
|
||||
}
|
||||
|
||||
TaskView runningTaskView = getRunningTaskView();
|
||||
if (runningTaskView != null) {
|
||||
setCurrentPage(indexOfChild(runningTaskView));
|
||||
} else if (getTaskViewCount() > 0) {
|
||||
setCurrentPage(indexOfChild(getTaskViewAt(0)));
|
||||
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));
|
||||
} else if (getTaskViewCount() > 0) {
|
||||
setCurrentPage(indexOfChild(getTaskViewAt(0)));
|
||||
}
|
||||
}
|
||||
|
||||
if (mIgnoreResetTaskId != -1 && getTaskView(mIgnoreResetTaskId) != ignoreResetTaskView) {
|
||||
|
||||
@@ -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