Merge "Make sure that a recents-launch with remote gets its own transition" into tm-qpr-dev

This commit is contained in:
Evan Rosky
2022-10-06 21:52:02 +00:00
committed by Android (Google) Code Review

View File

@@ -50,6 +50,7 @@ import android.util.Slog;
import android.util.SparseArray; import android.util.SparseArray;
import android.view.RemoteAnimationAdapter; import android.view.RemoteAnimationAdapter;
import android.view.WindowManager; import android.view.WindowManager;
import android.window.RemoteTransition;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils; import com.android.internal.util.ArrayUtils;
@@ -563,14 +564,39 @@ public class ActivityStartController {
return false; return false;
} }
mService.mRootWindowContainer.startPowerModeLaunchIfNeeded(true /* forceSend */, r); mService.mRootWindowContainer.startPowerModeLaunchIfNeeded(true /* forceSend */, r);
final ActivityMetricsLogger.LaunchingState launchingState = final RemoteTransition remote = options.getRemoteTransition();
mSupervisor.getActivityMetricsLogger().notifyActivityLaunching(intent); if (remote != null && rootTask.mTransitionController.isCollecting()) {
final Task task = r.getTask(); final Transition transition = new Transition(WindowManager.TRANSIT_TO_FRONT,
mService.deferWindowLayout(); 0 /* flags */, rootTask.mTransitionController,
try { mService.mWindowManager.mSyncEngine);
// Special case: we are entering recents while an existing transition is running. In
// this case, we know it's safe to "defer" the activity launch, so lets do so now so
// that it can get its own transition and thus update launcher correctly.
mService.mWindowManager.mSyncEngine.queueSyncSet(
() -> rootTask.mTransitionController.moveToCollecting(transition),
() -> {
final Task task = r.getTask();
task.mTransitionController.requestStartTransition(transition,
task, remote, null /* displayChange */);
task.mTransitionController.collect(task);
startExistingRecentsIfPossibleInner(intent, options, r, task, rootTask);
});
} else {
final Task task = r.getTask();
task.mTransitionController.requestTransitionIfNeeded(WindowManager.TRANSIT_TO_FRONT, task.mTransitionController.requestTransitionIfNeeded(WindowManager.TRANSIT_TO_FRONT,
0 /* flags */, task, task /* readyGroupRef */, 0 /* flags */, task, task /* readyGroupRef */,
options.getRemoteTransition(), null /* displayChange */); options.getRemoteTransition(), null /* displayChange */);
startExistingRecentsIfPossibleInner(intent, options, r, task, rootTask);
}
return true;
}
void startExistingRecentsIfPossibleInner(Intent intent, ActivityOptions options,
ActivityRecord r, Task task, Task rootTask) {
final ActivityMetricsLogger.LaunchingState launchingState =
mSupervisor.getActivityMetricsLogger().notifyActivityLaunching(intent);
mService.deferWindowLayout();
try {
r.mTransitionController.setTransientLaunch(r, r.mTransitionController.setTransientLaunch(r,
TaskDisplayArea.getRootTaskAbove(rootTask)); TaskDisplayArea.getRootTaskAbove(rootTask));
task.moveToFront("startExistingRecents"); task.moveToFront("startExistingRecents");
@@ -582,7 +608,6 @@ public class ActivityStartController {
task.mInResumeTopActivity = false; task.mInResumeTopActivity = false;
mService.continueWindowLayout(); mService.continueWindowLayout();
} }
return true;
} }
void registerRemoteAnimationForNextActivityStart(String packageName, void registerRemoteAnimationForNextActivityStart(String packageName,