Merge "Make sure that a recents-launch with remote gets its own transition" into tm-qpr-dev am: 965f031691
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20121490 Change-Id: I712b88b69d78d9804e066c510bd51dc86956b97b Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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;
|
||||||
@@ -566,14 +567,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 Transition transition = new Transition(WindowManager.TRANSIT_TO_FRONT,
|
||||||
|
0 /* flags */, rootTask.mTransitionController,
|
||||||
|
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();
|
final Task task = r.getTask();
|
||||||
mService.deferWindowLayout();
|
|
||||||
try {
|
|
||||||
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");
|
||||||
@@ -585,7 +611,6 @@ public class ActivityStartController {
|
|||||||
task.mInResumeTopActivity = false;
|
task.mInResumeTopActivity = false;
|
||||||
mService.continueWindowLayout();
|
mService.continueWindowLayout();
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void registerRemoteAnimationForNextActivityStart(String packageName,
|
void registerRemoteAnimationForNextActivityStart(String packageName,
|
||||||
|
|||||||
Reference in New Issue
Block a user