Don't prematurely apply finishT in taskview handler

The finish-transaction is supposed to be applied by the
transition player since the order matters. By applying it
in TaskViewTransitions, it was causing operations to run
out-of-order leaving broken surface hierarchies. This
removes the erroneous apply() calls.

Also, set surface position to 0,0 on surfaceChanged to
match surfaceCreated -- otherwise we end up with a double
offset.

Bug: 277759491
Test: open new homecontrols from dream (observe no offset),
      then close them via the X button (should return to dream).
Change-Id: I4527df33b29ad93045928d8e73b0698a36d95081
This commit is contained in:
Evan Rosky
2023-05-05 16:18:00 -07:00
parent 05a834b1d8
commit 2bff4a96cf
2 changed files with 5 additions and 7 deletions

View File

@@ -453,7 +453,7 @@ public class TaskViewTaskController implements ShellTaskOrganizer.TaskListener {
return;
}
finishTransaction.reparent(mTaskLeash, null).apply();
finishTransaction.reparent(mTaskLeash, null);
if (mListener != null) {
final int taskId = mTaskInfo.taskId;
@@ -490,13 +490,11 @@ public class TaskViewTaskController implements ShellTaskOrganizer.TaskListener {
if (mSurfaceCreated) {
// Surface is ready, so just reparent the task to this surface control
startTransaction.reparent(mTaskLeash, mSurfaceControl)
.show(mTaskLeash)
.apply();
.show(mTaskLeash);
// Also reparent on finishTransaction since the finishTransaction will reparent back
// to its "original" parent by default.
finishTransaction.reparent(mTaskLeash, mSurfaceControl)
.setPosition(mTaskLeash, 0, 0)
.apply();
.setPosition(mTaskLeash, 0, 0);
mTaskViewTransitions.updateBoundsState(this, mTaskViewBase.getCurrentBoundsOnScreen());
mTaskViewTransitions.updateVisibilityState(this, true /* visible */);
wct.setBounds(mTaskToken, mTaskViewBase.getCurrentBoundsOnScreen());

View File

@@ -363,7 +363,8 @@ public class TaskViewTransitions implements Transitions.TransitionHandler {
continue;
}
startTransaction.reparent(chg.getLeash(), tv.getSurfaceControl());
finishTransaction.reparent(chg.getLeash(), tv.getSurfaceControl());
finishTransaction.reparent(chg.getLeash(), tv.getSurfaceControl())
.setPosition(chg.getLeash(), 0, 0);
changesHandled++;
}
}
@@ -377,7 +378,6 @@ public class TaskViewTransitions implements Transitions.TransitionHandler {
}
// No animation, just show it immediately.
startTransaction.apply();
finishTransaction.apply();
finishCallback.onTransitionFinished(wct, null /* wctCB */);
startNextTransition();
return true;