From 551e80c34fc3dc7154a9637cf0cbe38017ebfa3a Mon Sep 17 00:00:00 2001 From: Manu Cornet Date: Fri, 10 Feb 2017 12:54:40 -0800 Subject: [PATCH] 2D Recents: Fix a glitch during task relayout after a dismiss This delays the resizing of the focus frame until all task views relayout animations have ended. Bug: 35258018 Test: Took before/after screencasts on local sw600dp device Change-Id: Ifbf8932f4141bf90a3dfef20b2938d6801383706 --- .../systemui/recents/views/TaskStackView.java | 18 +++++++++++++----- .../systemui/recents/views/TaskView.java | 1 - 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java index 9bc1ca56a5132..3c5a14149d651 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java @@ -20,6 +20,8 @@ import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID; import static android.app.ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID; import static android.app.ActivityManager.StackId.INVALID_STACK_ID; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.annotation.IntDef; @@ -1496,11 +1498,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal // Remove the task from the ignored set removeIgnoreTask(removedTask); - // Resize the grid layout task view focus frame - if (mTaskViewFocusFrame != null) { - mTaskViewFocusFrame.resize(); - } - // If requested, relayout with the given animation if (animation != null) { updateLayoutAlgorithm(true /* boundScroll */); @@ -1838,6 +1835,17 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal announceForAccessibility(getContext().getString( R.string.accessibility_recents_item_dismissed, event.task.title)); + if (useGridLayout() && event.animation != null) { + event.animation.setListener(new AnimatorListenerAdapter() { + public void onAnimationEnd(Animator animator) { + if (mTaskViewFocusFrame != null) { + // Resize the grid layout task view focus frame + mTaskViewFocusFrame.resize(); + } + } + }); + } + // Remove the task from the stack mStack.removeTask(event.task, event.animation, false /* fromDockGesture */); EventBus.getDefault().send(new DeleteTaskDataEvent(event.task)); diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java index 315c31448debc..94e9df0f453b7 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java @@ -269,7 +269,6 @@ public class TaskView extends FixedSizeFrameLayout implements Task.TaskCallbacks return super.onInterceptTouchEvent(ev); } - @Override protected void measureContents(int width, int height) { int widthWithoutPadding = width - mPaddingLeft - mPaddingRight;