summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Wale Ogunwale <ogunwale@google.com> 2020-11-02 08:38:29 -0800
committer Wale Ogunwale <ogunwale@google.com> 2020-11-02 08:38:29 -0800
commitbc3f93deba690f9cf9b80ab7d98210486d201688 (patch)
treee278f8d08ef0c3c36171530221dcf264051f5188
parentf069be7b3d7224df3c46947f77661cd885c16319 (diff)
Go back to posting onTaskInfoChanged callback
It is possible for us to send onTaskInfoChanged before onTaskAppear callbak since we post onTaskAppear but we don't post onTaskInfoChanged. The change was introduced in ag/12719145, however we have to rethink how we want to approach whatever problem we are trying to solve there in a way that doesn't affect callback ordering. Fixes: 172196078 Bug: 167447693 Bug: 171306573 Test: Timing issue that is ver difficult to test Change-Id: I39cdc241cec1729487dd111af593724cf04e1e8d
-rw-r--r--services/core/java/com/android/server/wm/TaskOrganizerController.java46
1 files changed, 25 insertions, 21 deletions
diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java
index 2c39c2b4a98e..a1c5670ec9af 100644
--- a/services/core/java/com/android/server/wm/TaskOrganizerController.java
+++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java
@@ -160,18 +160,20 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
return;
}
ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "Task info changed taskId=%d", task.mTaskId);
- if (!task.isOrganized()) {
- // This is safe to ignore if the task is no longer organized
- return;
- }
- try {
- // Purposely notify of task info change immediately instead of deferring (like
- // appear and vanish) to allow info changes (such as new PIP params) to flow
- // without waiting.
- mTaskOrganizer.onTaskInfoChanged(taskInfo);
- } catch (RemoteException e) {
- Slog.e(TAG, "Exception sending onTaskInfoChanged callback", e);
- }
+ mDeferTaskOrgCallbacksConsumer.accept(() -> {
+ if (!task.isOrganized()) {
+ // This is safe to ignore if the task is no longer organized
+ return;
+ }
+ try {
+ // Purposely notify of task info change immediately instead of deferring (like
+ // appear and vanish) to allow info changes (such as new PIP params) to flow
+ // without waiting.
+ mTaskOrganizer.onTaskInfoChanged(taskInfo);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Exception sending onTaskInfoChanged callback", e);
+ }
+ });
}
void onBackPressedOnTaskRoot(Task task) {
@@ -181,15 +183,17 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
// Skip if the task has not yet received taskAppeared().
return;
}
- if (!task.isOrganized()) {
- // This is safe to ignore if the task is no longer organized
- return;
- }
- try {
- mTaskOrganizer.onBackPressedOnTaskRoot(task.getTaskInfo());
- } catch (Exception e) {
- Slog.e(TAG, "Exception sending onBackPressedOnTaskRoot callback", e);
- }
+ mDeferTaskOrgCallbacksConsumer.accept(() -> {
+ if (!task.isOrganized()) {
+ // This is safe to ignore if the task is no longer organized
+ return;
+ }
+ try {
+ mTaskOrganizer.onBackPressedOnTaskRoot(task.getTaskInfo());
+ } catch (Exception e) {
+ Slog.e(TAG, "Exception sending onBackPressedOnTaskRoot callback", e);
+ }
+ });
}
}