diff options
| author | 2020-11-02 08:38:29 -0800 | |
|---|---|---|
| committer | 2020-11-02 08:38:29 -0800 | |
| commit | bc3f93deba690f9cf9b80ab7d98210486d201688 (patch) | |
| tree | e278f8d08ef0c3c36171530221dcf264051f5188 | |
| parent | f069be7b3d7224df3c46947f77661cd885c16319 (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.java | 46 |
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); + } + }); } } |