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

Commit f7e5a231 authored by Hongwei Wang's avatar Hongwei Wang
Browse files

Set mIsInMultiWindowMode in activity creation

When an Activity is launched directly into split-screen mode, there
won't be any onMultiWindowModeChanged callback. Upon activity creation,
the current windowing mode should be part of the configuration, use
the windowing mode from that as initial values for both
isInPictureInPictureMode and isInMultiWindowMode.

Bug: 155811896
Bug: 156204380
Test: launch activity to split-screen secondary and verify
      isInMultiWindowMode in dumpsys
Change-Id: I6061a2d5687b68a981abcf8b184bfb007cdcf501
parent 3ce5a9b8
Loading
Loading
Loading
Loading
+17 −11
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package android.app;

import static android.Manifest.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.app.WindowConfiguration.inMultiWindowMode;
import static android.os.Process.myUid;

import static java.lang.Character.MIN_VALUE;
@@ -947,9 +949,8 @@ public class Activity extends ContextThemeWrapper
    /** @hide */
    boolean mEnterAnimationComplete;

    /** Track last dispatched multi-window and PiP mode to client, internal debug purpose **/
    private Boolean mLastDispatchedIsInMultiWindowMode;
    private Boolean mLastDispatchedIsInPictureInPictureMode;
    private boolean mIsInMultiWindowMode;
    private boolean mIsInPictureInPictureMode;

    private final WindowControllerCallback mWindowControllerCallback =
            new WindowControllerCallback() {
@@ -2748,7 +2749,7 @@ public class Activity extends ContextThemeWrapper
     * @return True if the activity is in multi-window mode.
     */
    public boolean isInMultiWindowMode() {
        return mLastDispatchedIsInMultiWindowMode == Boolean.TRUE;
        return mIsInMultiWindowMode;
    }

    /**
@@ -2791,7 +2792,7 @@ public class Activity extends ContextThemeWrapper
     * @return True if the activity is in picture-in-picture mode.
     */
    public boolean isInPictureInPictureMode() {
        return mLastDispatchedIsInPictureInPictureMode == Boolean.TRUE;
        return mIsInPictureInPictureMode;
    }

    /**
@@ -7142,10 +7143,10 @@ public class Activity extends ContextThemeWrapper
                writer.print(mResumed); writer.print(" mStopped=");
                writer.print(mStopped); writer.print(" mFinished=");
                writer.println(mFinished);
        writer.print(innerPrefix); writer.print("mLastDispatchedIsInMultiWindowMode=");
                writer.print(mLastDispatchedIsInMultiWindowMode);
                writer.print(" mLastDispatchedIsInPictureInPictureMode=");
                writer.println(mLastDispatchedIsInPictureInPictureMode);
        writer.print(innerPrefix); writer.print("mIsInMultiWindowMode=");
                writer.print(mIsInMultiWindowMode);
                writer.print(" mIsInPictureInPictureMode=");
                writer.println(mIsInPictureInPictureMode);
        writer.print(innerPrefix); writer.print("mChangingConfigurations=");
                writer.println(mChangingConfigurations);
        writer.print(innerPrefix); writer.print("mCurrentConfig=");
@@ -7977,6 +7978,11 @@ public class Activity extends ContextThemeWrapper
    final void performCreate(Bundle icicle, PersistableBundle persistentState) {
        dispatchActivityPreCreated(icicle);
        mCanEnterPictureInPicture = true;
        // initialize mIsInMultiWindowMode and mIsInPictureInPictureMode before onCreate
        final int windowingMode = getResources().getConfiguration().windowConfiguration
                .getWindowingMode();
        mIsInMultiWindowMode = inMultiWindowMode(windowingMode);
        mIsInPictureInPictureMode = windowingMode == WINDOWING_MODE_PINNED;
        restoreHasCurrentPermissionRequest(icicle);
        if (persistentState != null) {
            onCreate(icicle, persistentState);
@@ -8245,7 +8251,7 @@ public class Activity extends ContextThemeWrapper
        if (mWindow != null) {
            mWindow.onMultiWindowModeChanged();
        }
        mLastDispatchedIsInMultiWindowMode = isInMultiWindowMode;
        mIsInMultiWindowMode = isInMultiWindowMode;
        onMultiWindowModeChanged(isInMultiWindowMode, newConfig);
    }

@@ -8258,7 +8264,7 @@ public class Activity extends ContextThemeWrapper
        if (mWindow != null) {
            mWindow.onPictureInPictureModeChanged(isInPictureInPictureMode);
        }
        mLastDispatchedIsInPictureInPictureMode = isInPictureInPictureMode;
        mIsInPictureInPictureMode = isInPictureInPictureMode;
        onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig);
    }