Make taskview resize into a transition

This was previously using legacy applySync. This can interact badly
with transitions if done in the wrong order. So, make this into
a transition instead.

Bug: 268326421
Test: ShowMultipleBubblesAndSwitchTest
Change-Id: I9398ebb384e9ad32c2459397c7314e0590e456a5
This commit is contained in:
Evan Rosky
2023-02-13 12:22:19 -08:00
parent d5678fa6df
commit 2a10359388
2 changed files with 19 additions and 3 deletions

View File

@@ -387,8 +387,15 @@ public class TaskViewTaskController implements ShellTaskOrganizer.TaskListener {
return;
}
// Sync Transactions can't operate simultaneously with shell transition collection.
// The transition animation (upon showing) will sync the location itself.
if (isUsingShellTransitions() && mTaskViewTransitions.hasPending()) return;
if (isUsingShellTransitions()) {
if (mTaskViewTransitions.hasPending()) {
// There is already a transition in-flight. The window bounds will be synced
// once it is complete.
return;
}
mTaskViewTransitions.setTaskBounds(this, boundsOnScreen);
return;
}
WindowContainerTransaction wct = new WindowContainerTransaction();
wct.setBounds(mTaskToken, boundsOnScreen);

View File

@@ -16,6 +16,7 @@
package com.android.wm.shell.taskview;
import static android.view.WindowManager.TRANSIT_CHANGE;
import static android.view.WindowManager.TRANSIT_OPEN;
import static android.view.WindowManager.TRANSIT_TO_BACK;
import static android.view.WindowManager.TRANSIT_TO_FRONT;
@@ -23,6 +24,7 @@ import static android.view.WindowManager.TRANSIT_TO_FRONT;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.graphics.Rect;
import android.os.IBinder;
import android.util.Slog;
import android.view.SurfaceControl;
@@ -40,7 +42,7 @@ import java.util.ArrayList;
* Handles Shell Transitions that involve TaskView tasks.
*/
public class TaskViewTransitions implements Transitions.TransitionHandler {
private static final String TAG = "TaskViewTransitions";
static final String TAG = "TaskViewTransitions";
private final ArrayList<TaskViewTaskController> mTaskViews = new ArrayList<>();
private final ArrayList<PendingTransition> mPending = new ArrayList<>();
@@ -197,6 +199,13 @@ public class TaskViewTransitions implements Transitions.TransitionHandler {
// visibility is reported in transition.
}
void setTaskBounds(TaskViewTaskController taskView, Rect boundsOnScreen) {
WindowContainerTransaction wct = new WindowContainerTransaction();
wct.setBounds(taskView.getTaskInfo().token, boundsOnScreen);
mPending.add(new PendingTransition(TRANSIT_CHANGE, wct, taskView, null /* cookie */));
startNextTransition();
}
private void startNextTransition() {
if (mPending.isEmpty()) return;
final PendingTransition pending = mPending.get(0);