Don't send onMultiWindowModeChanged if relaunch activity.
If an activity is going to do relaunch, send onMultiWindowModeChanged sounds meaningless since the activity will be destroy and re-create. To narrow down the scope, this API should only be useful if the activity want to handle onConfigurationChanged. Bug: 162473704 Test: atest ActivityLifecyclePipTests ActivityLifecycleSplitScreenTests ActivityLifecycleTopResumedStateTests PinnedStackTests SplitScreenTests ActivityLifecycleKeyguardTests Change-Id: If4e672e5a891ac315ecc6783af764dfc20ebfeb9
This commit is contained in:
committed by
Wei Sheng Shih
parent
7a6667d617
commit
4ee91bb557
@@ -5111,6 +5111,7 @@ public final class ActivityThread extends ClientTransactionHandler {
|
||||
}
|
||||
}
|
||||
r.setState(ON_DESTROY);
|
||||
mLastReportedWindowingMode.remove(r.activity.getActivityToken());
|
||||
}
|
||||
schedulePurgeIdler();
|
||||
// updatePendingActivityConfiguration() reads from mActivities to update
|
||||
@@ -5353,16 +5354,8 @@ public final class ActivityThread extends ClientTransactionHandler {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
|
||||
// Save the current windowing mode to be restored and compared to the new configuration's
|
||||
// windowing mode (needed because we update the last reported windowing mode when launching
|
||||
// an activity and we can't tell inside performLaunchActivity whether we are relaunching)
|
||||
final int oldWindowingMode = mLastReportedWindowingMode.getOrDefault(
|
||||
r.activity.getActivityToken(), WINDOWING_MODE_UNDEFINED);
|
||||
handleRelaunchActivityInner(r, configChanges, tmp.pendingResults, tmp.pendingIntents,
|
||||
pendingActions, tmp.startsNotResumed, tmp.overrideConfig, "handleRelaunchActivity");
|
||||
mLastReportedWindowingMode.put(r.activity.getActivityToken(), oldWindowingMode);
|
||||
handleWindowingModeChangeIfNeeded(r.activity, r.activity.mCurrentConfig);
|
||||
|
||||
if (pendingActions != null) {
|
||||
// Only report a successful relaunch to WindowManager.
|
||||
pendingActions.setReportRelaunchToWindowManager(true);
|
||||
@@ -5628,10 +5621,6 @@ public final class ActivityThread extends ClientTransactionHandler {
|
||||
throw new IllegalArgumentException("Activity token not set. Is the activity attached?");
|
||||
}
|
||||
|
||||
// multi-window / pip mode changes, if any, should be sent before the configuration change
|
||||
// callback, see also PinnedStackTests#testConfigurationChangeOrderDuringTransition
|
||||
handleWindowingModeChangeIfNeeded(activity, newConfig);
|
||||
|
||||
final boolean movedToDifferentDisplay = isDifferentDisplay(activity, displayId);
|
||||
boolean shouldReportChange = false;
|
||||
if (activity.mCurrentConfig == null) {
|
||||
@@ -5685,6 +5674,11 @@ public final class ActivityThread extends ClientTransactionHandler {
|
||||
}
|
||||
|
||||
if (shouldReportChange) {
|
||||
// multi-window / pip mode changes, if any, should be sent before the configuration
|
||||
// change callback, see also
|
||||
// PinnedStackTests#testConfigurationChangeOrderDuringTransition
|
||||
handleWindowingModeChangeIfNeeded(activity, newConfig);
|
||||
|
||||
activity.mCalled = false;
|
||||
activity.onConfigurationChanged(configToReport);
|
||||
if (!activity.mCalled) {
|
||||
|
||||
Reference in New Issue
Block a user