diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index f6b0453492199..caca05a9e3b34 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -5656,6 +5656,11 @@ public final class ActivityThread extends ClientTransactionHandler { throw new IllegalArgumentException("Activity token not set. Is the activity attached?"); } + // WindowConfiguration differences aren't considered as public, check it separately. + // 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) { @@ -5708,11 +5713,6 @@ 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) { diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index f262c5ad7b2b9..69d38219284f7 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -3569,6 +3569,13 @@ class WindowState extends WindowContainer implements WindowManagerP } void reportResized() { + // If the activity is scheduled to relaunch, skip sending the resized to ViewRootImpl now + // since it will be destroyed anyway. This also prevents the client from receiving + // windowing mode change before it is destroyed. + if (mActivityRecord != null && mActivityRecord.isRelaunching()) { + return; + } + if (Trace.isTagEnabled(TRACE_TAG_WINDOW_MANAGER)) { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "wm.reportResized_" + getWindowTag()); }