summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tony Huang <tonyychuang@google.com> 2020-12-10 06:21:42 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-12-10 06:21:42 +0000
commit82f20411b56c80719e30d30293d74bd39c4ae2ae (patch)
treeb346594791dd44d5aa4aacfd1337cca02777074e
parent5b85c391a82e978251ee0f27ec7b8b0241ec7aa1 (diff)
parente9d60f87d0d06cb89653720025937450091ea9ec (diff)
Merge "Fix some exception occrued possible code"
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java9
-rw-r--r--services/core/java/com/android/server/wm/TaskOrganizerController.java7
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);
}
}