diff options
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java | 18 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/Task.java | 1 |
2 files changed, 15 insertions, 4 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java index 05526018d73f..f4c0f9384705 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java @@ -52,6 +52,9 @@ class LegacySplitScreenTaskListener implements ShellTaskOrganizer.TaskListener { private final SyncTransactionQueue mSyncQueue; private final SparseArray<SurfaceControl> mLeashByTaskId = new SparseArray<>(); + // TODO(shell-transitions): Remove when switched to shell-transitions. + private final SparseArray<Point> mPositionByTaskId = new SparseArray<>(); + RunningTaskInfo mPrimary; RunningTaskInfo mSecondary; SurfaceControl mPrimarySurface; @@ -167,6 +170,7 @@ class LegacySplitScreenTaskListener implements ShellTaskOrganizer.TaskListener { @Override public void onTaskVanished(RunningTaskInfo taskInfo) { synchronized (this) { + mPositionByTaskId.remove(taskInfo.taskId); if (taskInfo.hasParentTask()) { mLeashByTaskId.remove(taskInfo.taskId); return; @@ -200,16 +204,24 @@ class LegacySplitScreenTaskListener implements ShellTaskOrganizer.TaskListener { } synchronized (this) { if (taskInfo.hasParentTask()) { + // changed messages are noisy since it reports on every ensureVisibility. This + // conflicts with legacy app-transitions which "swaps" the position to a + // leash. For now, only update when position actually changes to avoid + // poorly-timed duplicate calls. + if (taskInfo.positionInParent.equals(mPositionByTaskId.get(taskInfo.taskId))) { + return; + } handleChildTaskChanged(taskInfo); - return; + } else { + handleTaskInfoChanged(taskInfo); } - - handleTaskInfoChanged(taskInfo); + mPositionByTaskId.put(taskInfo.taskId, new Point(taskInfo.positionInParent)); } } private void handleChildTaskAppeared(RunningTaskInfo taskInfo, SurfaceControl leash) { mLeashByTaskId.put(taskInfo.taskId, leash); + mPositionByTaskId.put(taskInfo.taskId, new Point(taskInfo.positionInParent)); if (Transitions.ENABLE_SHELL_TRANSITIONS) return; updateChildTaskSurface(taskInfo, leash, true /* firstAppeared */); } diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index f850e85145df..ea9f2c0e2ae3 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3626,7 +3626,6 @@ class Task extends WindowContainer<WindowContainer> { @Override void resetSurfacePositionForAnimationLeash(SurfaceControl.Transaction t) { - if (isOrganized()) return; super.resetSurfacePositionForAnimationLeash(t); } |