Merge "Put transition collect in scope of defer layout" into tm-qpr-dev am: fb3ae63290
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20547393 Change-Id: Ic52fa9700cd7735c0ad2727734f6864f52555c2c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -559,47 +559,52 @@ public class ActivityStartController {
|
|||||||
final Task rootTask = mService.mRootWindowContainer.getDefaultTaskDisplayArea()
|
final Task rootTask = mService.mRootWindowContainer.getDefaultTaskDisplayArea()
|
||||||
.getRootTask(WINDOWING_MODE_UNDEFINED, activityType);
|
.getRootTask(WINDOWING_MODE_UNDEFINED, activityType);
|
||||||
if (rootTask == null) return false;
|
if (rootTask == null) return false;
|
||||||
|
final RemoteTransition remote = options.getRemoteTransition();
|
||||||
final ActivityRecord r = rootTask.topRunningActivity();
|
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())
|
|| !r.mActivityComponent.equals(intent.getComponent())
|
||||||
// Recents keeps invisible while device is locked.
|
// Recents keeps invisible while device is locked.
|
||||||
|| r.mDisplayContent.isKeyguardLocked()) {
|
|| r.mDisplayContent.isKeyguardLocked()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
mService.mRootWindowContainer.startPowerModeLaunchIfNeeded(true /* forceSend */, r);
|
mService.mRootWindowContainer.startPowerModeLaunchIfNeeded(true /* forceSend */, r);
|
||||||
final RemoteTransition remote = options.getRemoteTransition();
|
final ActivityMetricsLogger.LaunchingState launchingState =
|
||||||
if (remote != null && rootTask.mTransitionController.isCollecting()) {
|
mSupervisor.getActivityMetricsLogger().notifyActivityLaunching(intent);
|
||||||
final Transition transition = new Transition(WindowManager.TRANSIT_TO_FRONT,
|
final Transition transition = new Transition(WindowManager.TRANSIT_TO_FRONT,
|
||||||
0 /* flags */, rootTask.mTransitionController,
|
0 /* flags */, r.mTransitionController, mService.mWindowManager.mSyncEngine);
|
||||||
mService.mWindowManager.mSyncEngine);
|
if (r.mTransitionController.isCollecting()) {
|
||||||
// Special case: we are entering recents while an existing transition is running. In
|
// 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
|
// 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.
|
// that it can get its own transition and thus update launcher correctly.
|
||||||
mService.mWindowManager.mSyncEngine.queueSyncSet(
|
mService.mWindowManager.mSyncEngine.queueSyncSet(
|
||||||
() -> rootTask.mTransitionController.moveToCollecting(transition),
|
|
||||||
() -> {
|
() -> {
|
||||||
final Task task = r.getTask();
|
if (r.isAttached()) {
|
||||||
task.mTransitionController.requestStartTransition(transition,
|
r.mTransitionController.moveToCollecting(transition);
|
||||||
task, remote, null /* displayChange */);
|
}
|
||||||
task.mTransitionController.collect(task);
|
},
|
||||||
startExistingRecentsIfPossibleInner(intent, options, r, task, rootTask);
|
() -> {
|
||||||
|
if (r.isAttached() && transition.isCollecting()) {
|
||||||
|
startExistingRecentsIfPossibleInner(options, r, rootTask,
|
||||||
|
launchingState, remote, transition);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
final Task task = r.getTask();
|
r.mTransitionController.moveToCollecting(transition);
|
||||||
task.mTransitionController.requestTransitionIfNeeded(WindowManager.TRANSIT_TO_FRONT,
|
startExistingRecentsIfPossibleInner(options, r, rootTask, launchingState, remote,
|
||||||
0 /* flags */, task, task /* readyGroupRef */,
|
transition);
|
||||||
options.getRemoteTransition(), null /* displayChange */);
|
|
||||||
startExistingRecentsIfPossibleInner(intent, options, r, task, rootTask);
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void startExistingRecentsIfPossibleInner(Intent intent, ActivityOptions options,
|
private void startExistingRecentsIfPossibleInner(ActivityOptions options, ActivityRecord r,
|
||||||
ActivityRecord r, Task task, Task rootTask) {
|
Task rootTask, ActivityMetricsLogger.LaunchingState launchingState,
|
||||||
final ActivityMetricsLogger.LaunchingState launchingState =
|
RemoteTransition remoteTransition, Transition transition) {
|
||||||
mSupervisor.getActivityMetricsLogger().notifyActivityLaunching(intent);
|
final Task task = r.getTask();
|
||||||
mService.deferWindowLayout();
|
mService.deferWindowLayout();
|
||||||
try {
|
try {
|
||||||
|
r.mTransitionController.requestStartTransition(transition,
|
||||||
|
task, remoteTransition, null /* displayChange */);
|
||||||
|
r.mTransitionController.collect(task);
|
||||||
r.mTransitionController.setTransientLaunch(r,
|
r.mTransitionController.setTransientLaunch(r,
|
||||||
TaskDisplayArea.getRootTaskAbove(rootTask));
|
TaskDisplayArea.getRootTaskAbove(rootTask));
|
||||||
task.moveToFront("startExistingRecents");
|
task.moveToFront("startExistingRecents");
|
||||||
|
|||||||
@@ -1389,9 +1389,9 @@ class ActivityStarter {
|
|||||||
&& transitionController.getTransitionPlayer() != null)
|
&& transitionController.getTransitionPlayer() != null)
|
||||||
? transitionController.createTransition(TRANSIT_OPEN) : null;
|
? transitionController.createTransition(TRANSIT_OPEN) : null;
|
||||||
RemoteTransition remoteTransition = r.takeRemoteTransition();
|
RemoteTransition remoteTransition = r.takeRemoteTransition();
|
||||||
transitionController.collect(r);
|
|
||||||
try {
|
try {
|
||||||
mService.deferWindowLayout();
|
mService.deferWindowLayout();
|
||||||
|
transitionController.collect(r);
|
||||||
try {
|
try {
|
||||||
Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "startActivityInner");
|
Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "startActivityInner");
|
||||||
result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor,
|
result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor,
|
||||||
|
|||||||
@@ -345,7 +345,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
|
|||||||
return mFinishTransaction;
|
return mFinishTransaction;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isCollecting() {
|
boolean isCollecting() {
|
||||||
return mState == STATE_COLLECTING || mState == STATE_STARTED;
|
return mState == STATE_COLLECTING || mState == STATE_STARTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user