summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java18
-rw-r--r--services/core/java/com/android/server/wm/Task.java1
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);
}