summaryrefslogtreecommitdiff
path: root/core/java/android/window/TaskOrganizer.java
diff options
context:
space:
mode:
authorWale Ogunwale <ogunwale@google.com>2020-10-21 15:15:10 -0700
committerWale Ogunwale <ogunwale@google.com>2020-10-21 15:15:10 -0700
commitc21aca86d8bfdb3c379e2ae48947a4335fc9e40a (patch)
tree3335ca49d41c3fa7aa9a82d4a78c401bd4ed11eb /core/java/android/window/TaskOrganizer.java
parent05c11205a4b5ec818da037d94f30b98654d69d1b (diff)
Made ShellTaskOrganizer thread safe
- Post callbacks from WM Core on executor. - Added lock to protect critical sections. Bug: 171384876 Test: They pass! Change-Id: Ia1808b66104c2a1e6efb9f43c31e6a3a2f67a952
Diffstat (limited to 'core/java/android/window/TaskOrganizer.java')
-rw-r--r--core/java/android/window/TaskOrganizer.java19
1 files changed, 12 insertions, 7 deletions
diff --git a/core/java/android/window/TaskOrganizer.java b/core/java/android/window/TaskOrganizer.java
index 5c86e1c124f7..8a58db90d375 100644
--- a/core/java/android/window/TaskOrganizer.java
+++ b/core/java/android/window/TaskOrganizer.java
@@ -29,6 +29,7 @@ import android.view.SurfaceControl;
import com.android.internal.annotations.VisibleForTesting;
import java.util.List;
+import java.util.concurrent.Executor;
/**
* Interface for ActivityTaskManager/WindowManager to delegate control of tasks.
@@ -37,15 +38,19 @@ import java.util.List;
@TestApi
public class TaskOrganizer extends WindowOrganizer {
- private ITaskOrganizerController mTaskOrganizerController;
+ private final ITaskOrganizerController mTaskOrganizerController;
+ // Callbacks WM Core are posted on this executor if it isn't null, otherwise direct calls are
+ // made on the incoming binder call.
+ private final Executor mExecutor;
public TaskOrganizer() {
- this(null);
+ this(null /*taskOrganizerController*/, null /*executor*/);
}
/** @hide */
@VisibleForTesting
- public TaskOrganizer(ITaskOrganizerController taskOrganizerController) {
+ public TaskOrganizer(ITaskOrganizerController taskOrganizerController, Executor executor) {
+ mExecutor = executor != null ? executor : command -> command.run();
mTaskOrganizerController = taskOrganizerController != null
? taskOrganizerController : getController();
}
@@ -183,22 +188,22 @@ public class TaskOrganizer extends WindowOrganizer {
@Override
public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) {
- TaskOrganizer.this.onTaskAppeared(taskInfo, leash);
+ mExecutor.execute(() -> TaskOrganizer.this.onTaskAppeared(taskInfo, leash));
}
@Override
public void onTaskVanished(ActivityManager.RunningTaskInfo taskInfo) {
- TaskOrganizer.this.onTaskVanished(taskInfo);
+ mExecutor.execute(() -> TaskOrganizer.this.onTaskVanished(taskInfo));
}
@Override
public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) {
- TaskOrganizer.this.onTaskInfoChanged(info);
+ mExecutor.execute(() -> TaskOrganizer.this.onTaskInfoChanged(info));
}
@Override
public void onBackPressedOnTaskRoot(ActivityManager.RunningTaskInfo info) {
- TaskOrganizer.this.onBackPressedOnTaskRoot(info);
+ mExecutor.execute(() -> TaskOrganizer.this.onBackPressedOnTaskRoot(info));
}
};