From 4cfea695112f2f61d9f4391e6d928561a68a7db3 Mon Sep 17 00:00:00 2001 From: Winson Date: Tue, 8 Mar 2016 12:33:56 -0800 Subject: [PATCH] Fixing crash in Recents MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit - The change to setTasks() was causing us to queue items to be loaded before the activity had even started. This change ensures that we don’t do this for the dummy-transition-only stack view, and only when setting stack tasks for real. Bug: 27538945 Change-Id: I4ff0413cb2fb961a4dedcad42471293bab4f955a --- .../com/android/systemui/recents/RecentsImpl.java | 3 ++- .../android/systemui/recents/views/RecentsView.java | 3 ++- .../systemui/recents/views/TaskStackView.java | 21 ++++++++++++--------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java index ac23f446cdc4..3ad2cc37cd17 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java @@ -645,7 +645,8 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener if (stack != null) { stackLayout.initialize(taskStackBounds, TaskStackLayoutAlgorithm.StackState.getStackStateForStack(stack)); - mDummyStackView.setTasks(stack, false /* notifyStackChanges */); + mDummyStackView.setTasks(stack, false /* notifyStackChanges */, + false /* relayoutTaskStack */); } Rect taskViewBounds = stackLayout.getUntransformedTaskViewBounds(); if (!taskViewBounds.equals(mLastTaskViewBounds)) { diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java index 1af5a55f7a1e..8342de547720 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java @@ -184,7 +184,8 @@ public class RecentsView extends FrameLayout { // Update the stack mTaskStackView.onResume(isResumingFromVisible); - mTaskStackView.setTasks(stack, isResumingFromVisible /* notifyStackChanges */); + mTaskStackView.setTasks(stack, isResumingFromVisible /* notifyStackChanges */, + true /* relayoutTaskStack */); if (isResumingFromVisible) { // If we are already visible, then restore the background scrim 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 9da8fee137a6..2601cd327982 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java @@ -298,7 +298,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal /** * Sets the stack tasks of this TaskStackView from the given TaskStack. */ - public void setTasks(TaskStack stack, boolean notifyStackChanges) { + public void setTasks(TaskStack stack, boolean notifyStackChanges, boolean relayoutTaskStack) { boolean isInitialized = mLayoutAlgorithm.isInitialized(); mStack.setTasks(getContext(), stack.computeAllTasksList(), notifyStackChanges && isInitialized); @@ -307,15 +307,18 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal // measure/layout pass updateLayoutAlgorithm(false /* boundScroll */, EMPTY_TASK_SET); updateToInitialState(); - relayoutTaskViews(AnimationProps.IMMEDIATE); - // Rebind all the task views. This will not trigger new resources to be loaded unless - // they have actually changed - List taskViews = getTaskViews(); - int taskViewCount = taskViews.size(); - for (int i = 0; i < taskViewCount; i++) { - TaskView tv = taskViews.get(i); - bindTaskView(tv, tv.getTask()); + if (relayoutTaskStack) { + relayoutTaskViews(AnimationProps.IMMEDIATE); + + // Rebind all the task views. This will not trigger new resources to be loaded + // unless they have actually changed + List taskViews = getTaskViews(); + int taskViewCount = taskViews.size(); + for (int i = 0; i < taskViewCount; i++) { + TaskView tv = taskViews.get(i); + bindTaskView(tv, tv.getTask()); + } } } } -- 2.11.0