Merge "Put transition collect in scope of defer layout" into tm-qpr-dev

This commit is contained in:
Riddle Hsu
2022-11-24 16:24:35 +00:00
committed by Android (Google) Code Review
3 changed files with 28 additions and 23 deletions

View File

@@ -556,47 +556,52 @@ public class ActivityStartController {
final Task rootTask = mService.mRootWindowContainer.getDefaultTaskDisplayArea()
.getRootTask(WINDOWING_MODE_UNDEFINED, activityType);
if (rootTask == null) return false;
final RemoteTransition remote = options.getRemoteTransition();
final ActivityRecord r = rootTask.topRunningActivity();
if (r == null || r.mVisibleRequested || !r.attachedToProcess()
if (r == null || r.mVisibleRequested || !r.attachedToProcess() || remote == null
|| !r.mActivityComponent.equals(intent.getComponent())
// Recents keeps invisible while device is locked.
|| r.mDisplayContent.isKeyguardLocked()) {
return false;
}
mService.mRootWindowContainer.startPowerModeLaunchIfNeeded(true /* forceSend */, r);
final RemoteTransition remote = options.getRemoteTransition();
if (remote != null && rootTask.mTransitionController.isCollecting()) {
final Transition transition = new Transition(WindowManager.TRANSIT_TO_FRONT,
0 /* flags */, rootTask.mTransitionController,
mService.mWindowManager.mSyncEngine);
final ActivityMetricsLogger.LaunchingState launchingState =
mSupervisor.getActivityMetricsLogger().notifyActivityLaunching(intent);
final Transition transition = new Transition(WindowManager.TRANSIT_TO_FRONT,
0 /* flags */, r.mTransitionController, mService.mWindowManager.mSyncEngine);
if (r.mTransitionController.isCollecting()) {
// 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);
if (r.isAttached()) {
r.mTransitionController.moveToCollecting(transition);
}
},
() -> {
if (r.isAttached() && transition.isCollecting()) {
startExistingRecentsIfPossibleInner(options, r, rootTask,
launchingState, remote, transition);
}
});
} else {
final Task task = r.getTask();
task.mTransitionController.requestTransitionIfNeeded(WindowManager.TRANSIT_TO_FRONT,
0 /* flags */, task, task /* readyGroupRef */,
options.getRemoteTransition(), null /* displayChange */);
startExistingRecentsIfPossibleInner(intent, options, r, task, rootTask);
r.mTransitionController.moveToCollecting(transition);
startExistingRecentsIfPossibleInner(options, r, rootTask, launchingState, remote,
transition);
}
return true;
}
void startExistingRecentsIfPossibleInner(Intent intent, ActivityOptions options,
ActivityRecord r, Task task, Task rootTask) {
final ActivityMetricsLogger.LaunchingState launchingState =
mSupervisor.getActivityMetricsLogger().notifyActivityLaunching(intent);
private void startExistingRecentsIfPossibleInner(ActivityOptions options, ActivityRecord r,
Task rootTask, ActivityMetricsLogger.LaunchingState launchingState,
RemoteTransition remoteTransition, Transition transition) {
final Task task = r.getTask();
mService.deferWindowLayout();
try {
r.mTransitionController.requestStartTransition(transition,
task, remoteTransition, null /* displayChange */);
r.mTransitionController.collect(task);
r.mTransitionController.setTransientLaunch(r,
TaskDisplayArea.getRootTaskAbove(rootTask));
task.moveToFront("startExistingRecents");

View File

@@ -1666,9 +1666,9 @@ class ActivityStarter {
&& transitionController.getTransitionPlayer() != null)
? transitionController.createTransition(TRANSIT_OPEN) : null;
RemoteTransition remoteTransition = r.takeRemoteTransition();
transitionController.collect(r);
try {
mService.deferWindowLayout();
transitionController.collect(r);
try {
Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "startActivityInner");
result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor,

View File

@@ -345,7 +345,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
return mFinishTransaction;
}
private boolean isCollecting() {
boolean isCollecting() {
return mState == STATE_COLLECTING || mState == STATE_STARTED;
}