From b69258b23d3c422e25557813f86cb21c302244c4 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Wed, 7 Jun 2017 16:53:03 -0700 Subject: [PATCH] Fix crash when deleting task - There are several code paths from the loaders (which run on a background thread) which post the call to notify an update on the task which was loaded. Not all of these are cleared when a task is unbound, and can result in a notifyTaskDataLoaded() after the task is unbound. For now, just ensure that the TaskView is bound to the Task before updating. Bug: 62194807 Test: Have not been able to repro, just ensure that recents thumbnails still load Change-Id: Id9301025275f4b14a2832f7f6c1ebd5a1ce124ea --- .../com/android/systemui/recents/views/TaskView.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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 4b614eda941a7..17204a421999e 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java @@ -133,6 +133,7 @@ public class TaskView extends FixedSizeFrameLayout implements Task.TaskCallbacks @ViewDebug.ExportedProperty(deepExport=true, prefix="task_") private Task mTask; + private boolean mTaskBound; @ViewDebug.ExportedProperty(category="recents") private boolean mClipViewInStack = true; @ViewDebug.ExportedProperty(category="recents") @@ -607,6 +608,7 @@ public class TaskView extends FixedSizeFrameLayout implements Task.TaskCallbacks SystemServicesProxy ssp = Recents.getSystemServices(); mTouchExplorationEnabled = touchExplorationEnabled; mTask = t; + mTaskBound = true; mTask.addCallback(this); mIsDisabledInSafeMode = !mTask.isSystemApp && ssp.isInSafeMode(); mThumbnailView.bindToTask(mTask, mIsDisabledInSafeMode, displayOrientation, displayRect); @@ -627,9 +629,11 @@ public class TaskView extends FixedSizeFrameLayout implements Task.TaskCallbacks @Override public void onTaskDataLoaded(Task task, ThumbnailData thumbnailData) { - // Update each of the views to the new task data - mThumbnailView.onTaskDataLoaded(thumbnailData); - mHeaderView.onTaskDataLoaded(); + if (mTaskBound) { + // Update each of the views to the new task data + mThumbnailView.onTaskDataLoaded(thumbnailData); + mHeaderView.onTaskDataLoaded(); + } } @Override @@ -638,6 +642,7 @@ public class TaskView extends FixedSizeFrameLayout implements Task.TaskCallbacks mTask.removeCallback(this); mThumbnailView.unbindFromTask(); mHeaderView.unbindFromTask(mTouchExplorationEnabled); + mTaskBound = false; } @Override