Merge "Execute app transition if starting window is drawn" into sc-dev am: e8db079138

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14934413

Change-Id: I9a58b9c45b6f3d8441264fec8201a925d1293a0b
This commit is contained in:
TreeHugger Robot
2021-06-21 15:34:56 +00:00
committed by Automerger Merge Worker
3 changed files with 29 additions and 5 deletions

View File

@@ -5891,10 +5891,24 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
void onStartingWindowDrawn() {
boolean wasTaskVisible = false;
if (task != null) {
mSplashScreenStyleEmpty = true;
wasTaskVisible = task.getHasBeenVisible();
task.setHasBeenVisible(true);
}
// The transition may not be executed if the starting process hasn't attached. But if the
// starting window is drawn, the transition can start earlier. Exclude finishing and bubble
// because it may be a trampoline.
if (!wasTaskVisible && mStartingData != null && !finishing && !mLaunchedFromBubble
&& !mDisplayContent.mAppTransition.isReady()
&& !mDisplayContent.mAppTransition.isRunning()) {
// The pending transition state will be cleared after the transition is started, so
// save the state for launching the client later (used by LaunchActivityItem).
mStartingData.mIsTransitionForward = mDisplayContent.isNextTransitionForward();
mDisplayContent.executeAppTransition();
}
}
/** Called when the windows associated app window container are drawn. */
@@ -6608,6 +6622,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|| dc.mChangingContainers.contains(this));
}
boolean isTransitionForward() {
return (mStartingData != null && mStartingData.mIsTransitionForward)
|| mDisplayContent.isNextTransitionForward();
}
private int getAnimationLayer() {
// The leash is parented to the animation layer. We need to preserve the z-order by using
// the prefix order index, but we boost if necessary.
@@ -8287,8 +8306,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
preserveWindow);
final ActivityLifecycleItem lifecycleItem;
if (andResume) {
lifecycleItem = ResumeActivityItem.obtain(
mDisplayContent.isNextTransitionForward());
lifecycleItem = ResumeActivityItem.obtain(isTransitionForward());
} else {
lifecycleItem = PauseActivityItem.obtain();
}

View File

@@ -835,7 +835,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
final ClientTransaction clientTransaction = ClientTransaction.obtain(
proc.getThread(), r.appToken);
final DisplayContent dc = r.mDisplayContent;
final boolean isTransitionForward = r.isTransitionForward();
clientTransaction.addCallback(LaunchActivityItem.obtain(new Intent(r.intent),
System.identityHashCode(r), r.info,
// TODO: Have this take the merged configuration instead of separate global
@@ -844,7 +844,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
mergedConfiguration.getOverrideConfiguration(), r.compat,
r.launchedFromPackage, task.voiceInteractor, proc.getReportedProcState(),
r.getSavedState(), r.getPersistentSavedState(), results, newIntents,
r.takeOptions(), dc.isNextTransitionForward(),
r.takeOptions(), isTransitionForward,
proc.createProfilerInfoIfNeeded(), r.assistToken, activityClientController,
r.createFixedRotationAdjustmentsIfNeeded(), r.shareableActivityToken,
r.getLaunchedFromBubble()));
@@ -852,7 +852,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
// Set desired final state.
final ActivityLifecycleItem lifecycleItem;
if (andResume) {
lifecycleItem = ResumeActivityItem.obtain(dc.isNextTransitionForward());
lifecycleItem = ResumeActivityItem.obtain(isTransitionForward);
} else {
lifecycleItem = PauseActivityItem.obtain();
}

View File

@@ -26,6 +26,12 @@ public abstract class StartingData {
protected final WindowManagerService mService;
protected final int mTypeParams;
/**
* Tell whether the launching activity should use
* {@link android.view.WindowManager.LayoutParams#SOFT_INPUT_IS_FORWARD_NAVIGATION}.
*/
boolean mIsTransitionForward;
protected StartingData(WindowManagerService service, int typeParams) {
mService = service;
mTypeParams = typeParams;