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:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user