diff options
author | 2020-12-10 06:21:42 +0000 | |
---|---|---|
committer | 2020-12-10 06:21:42 +0000 | |
commit | 82f20411b56c80719e30d30293d74bd39c4ae2ae (patch) | |
tree | b346594791dd44d5aa4aacfd1337cca02777074e | |
parent | 5b85c391a82e978251ee0f27ec7b8b0241ec7aa1 (diff) | |
parent | e9d60f87d0d06cb89653720025937450091ea9ec (diff) |
Merge "Fix some exception occrued possible code"
-rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java | 9 | ||||
-rw-r--r-- | services/core/java/com/android/server/wm/TaskOrganizerController.java | 7 |
2 files changed, 10 insertions, 6 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java index 174c16afc75f..e68a7471fdaf 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java @@ -31,14 +31,12 @@ import android.os.Binder; import android.os.IBinder; import android.util.ArrayMap; import android.util.Log; -import android.util.Slog; import android.util.SparseArray; import android.view.SurfaceControl; import android.window.ITaskOrganizerController; import android.window.TaskAppearedInfo; import android.window.TaskOrganizer; -import androidx.annotation.BinderThread; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -47,7 +45,6 @@ import com.android.internal.protolog.common.ProtoLog; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.TransactionPool; -import com.android.wm.shell.common.annotations.ShellMainThread; import com.android.wm.shell.startingsurface.StartingSurfaceDrawer; import java.io.PrintWriter; @@ -275,6 +272,12 @@ public class ShellTaskOrganizer extends TaskOrganizer { synchronized (mLock) { ProtoLog.v(WM_SHELL_TASK_ORG, "Task info changed taskId=%d", taskInfo.taskId); final TaskAppearedInfo data = mTasks.get(taskInfo.taskId); + if (data == null) { + // TODO(b/171749427): It means onTaskInfoChanged send before onTaskAppeared or + // after onTaskVanished, it should be fixed in controller side. + return; + } + final TaskListener oldListener = getTaskListener(data.getTaskInfo()); final TaskListener newListener = getTaskListener(taskInfo); mTasks.put(taskInfo.taskId, new TaskAppearedInfo(taskInfo, data.getLeash())); diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java index e635219bc6e5..2095d1925e4b 100644 --- a/services/core/java/com/android/server/wm/TaskOrganizerController.java +++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java @@ -272,7 +272,9 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { void removeTask(Task t) { if (t.mTaskAppearedSent) { - t.migrateToNewSurfaceControl(); + if (t.getSurfaceControl() != null) { + t.migrateToNewSurfaceControl(); + } t.mTaskAppearedSent = false; mOrganizer.onTaskVanished(t); } @@ -288,8 +290,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { // possible. while (!mOrganizedTasks.isEmpty()) { final Task t = mOrganizedTasks.get(0); - t.updateTaskOrganizerState(true /* forceUpdate */); - if (mOrganizedTasks.contains(t)) { + if (!t.updateTaskOrganizerState(true /* forceUpdate */)) { removeTask(t); } } |