Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4ee91bb5 authored by wilsonshih's avatar wilsonshih Committed by Wei Sheng Shih
Browse files

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
parent 7a6667d6
Loading
Loading
Loading
Loading
+6 −12
Original line number Diff line number Diff line
@@ -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) {