Merge "Pass ActivityOptions when endDeferAddStartingWindow"

This commit is contained in:
Wei Sheng Shih
2022-01-27 02:10:35 +00:00
committed by Android (Google) Code Review
3 changed files with 25 additions and 17 deletions

View File

@@ -6568,7 +6568,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return null;
}
private boolean shouldUseEmptySplashScreen(ActivityRecord sourceRecord, boolean startActivity) {
private boolean shouldUseEmptySplashScreen(ActivityRecord sourceRecord, boolean startActivity,
ActivityOptions options) {
if (sourceRecord == null && !startActivity) {
// Use empty style if this activity is not top activity. This could happen when adding
// a splash screen window to the warm start activity which is re-create because top is
@@ -6578,8 +6579,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return true;
}
}
if (mPendingOptions != null) {
final int optionsStyle = mPendingOptions.getSplashScreenStyle();
if (options != null) {
final int optionsStyle = options.getSplashScreenStyle();
if (optionsStyle == SplashScreen.SPLASH_SCREEN_STYLE_EMPTY) {
return true;
} else if (optionsStyle == SplashScreen.SPLASH_SCREEN_STYLE_ICON) {
@@ -6608,11 +6609,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|| mLaunchSourceType == LAUNCH_SOURCE_TYPE_HOME);
}
private int getSplashscreenTheme() {
private int getSplashscreenTheme(ActivityOptions options) {
// Find the splash screen theme. User can override the persisted theme by
// ActivityOptions.
String splashScreenThemeResName = mPendingOptions != null
? mPendingOptions.getSplashScreenThemeResName() : null;
String splashScreenThemeResName = options != null
? options.getSplashScreenThemeResName() : null;
if (splashScreenThemeResName == null || splashScreenThemeResName.isEmpty()) {
try {
splashScreenThemeResName = mAtmService.getPackageManager()
@@ -6639,7 +6640,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
void showStartingWindow(ActivityRecord prev, boolean newTask, boolean taskSwitch,
boolean startActivity, ActivityRecord sourceRecord) {
showStartingWindow(prev, newTask, taskSwitch, isProcessRunning(), startActivity,
sourceRecord);
sourceRecord, null /* candidateOptions */);
}
/**
@@ -6647,22 +6648,27 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
* @param processRunning Whether the client process is running.
* @param startActivity Whether this activity is just created from starter.
* @param sourceRecord The source activity which start this activity.
* @param candidateOptions The options for the style of starting window.
*/
void showStartingWindow(ActivityRecord prev, boolean newTask, boolean taskSwitch,
boolean processRunning, boolean startActivity, ActivityRecord sourceRecord) {
boolean processRunning, boolean startActivity, ActivityRecord sourceRecord,
ActivityOptions candidateOptions) {
if (mTaskOverlay) {
// We don't show starting window for overlay activities.
return;
}
if (mPendingOptions != null
&& mPendingOptions.getAnimationType() == ActivityOptions.ANIM_SCENE_TRANSITION) {
final ActivityOptions startOptions = candidateOptions != null
? candidateOptions : mPendingOptions;
if (startOptions != null
&& startOptions.getAnimationType() == ActivityOptions.ANIM_SCENE_TRANSITION) {
// Don't show starting window when using shared element transition.
return;
}
mSplashScreenStyleEmpty = shouldUseEmptySplashScreen(sourceRecord, startActivity);
mSplashScreenStyleEmpty = shouldUseEmptySplashScreen(
sourceRecord, startActivity, startOptions);
final int splashScreenTheme = startActivity ? getSplashscreenTheme() : 0;
final int splashScreenTheme = startActivity ? getSplashscreenTheme(startOptions) : 0;
final int resolvedTheme = evaluateStartingWindowTheme(prev, packageName, theme,
splashScreenTheme);

View File

@@ -484,7 +484,8 @@ public class ActivityStartController {
}
}
} finally {
mService.mWindowManager.mStartingSurfaceController.endDeferAddStartingWindow();
mService.mWindowManager.mStartingSurfaceController.endDeferAddStartingWindow(
options != null ? options.getOriginalOptions() : null);
mService.continueWindowLayout();
}
}

View File

@@ -32,6 +32,7 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityOptions;
import android.app.compat.CompatChanges;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledSince;
@@ -215,12 +216,12 @@ public class StartingSurfaceController {
deferring, prev, source));
}
private void showStartingWindowFromDeferringActivities() {
private void showStartingWindowFromDeferringActivities(ActivityOptions topOptions) {
// Attempt to add starting window from the top-most activity.
for (int i = mDeferringAddStartActivities.size() - 1; i >= 0; --i) {
final DeferringStartingWindowRecord next = mDeferringAddStartActivities.get(i);
next.mDeferring.showStartingWindow(next.mPrev, mInitNewTask, mInitTaskSwitch,
mInitProcessRunning, true /* startActivity */, next.mSource);
mInitProcessRunning, true /* startActivity */, next.mSource, topOptions);
// If one succeeds, it is done.
if (next.mDeferring.mStartingData != null) {
break;
@@ -243,9 +244,9 @@ public class StartingSurfaceController {
/**
* End deferring add starting window.
*/
void endDeferAddStartingWindow() {
void endDeferAddStartingWindow(ActivityOptions topOptions) {
mDeferringAddStartingWindow = false;
showStartingWindowFromDeferringActivities();
showStartingWindowFromDeferringActivities(topOptions);
}
final class StartingSurface {