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

Commit 297a17d8 authored by Massimo Carli's avatar Massimo Carli Committed by Automerger Merge Worker
Browse files

Merge "Prevent NullPointerException in ActivityRecord when in Size Compat...

Merge "Prevent NullPointerException in ActivityRecord when in Size Compat Mode" into tm-qpr-dev am: a77ae5c0 am: 7dd608ca am: 82ba46ad

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21700183



Change-Id: I7e7fbb980a4982d7d0cdc5249d20711b3810eecc
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents eb1f56c2 82ba46ad
Loading
Loading
Loading
Loading
+14 −13
Original line number Diff line number Diff line
@@ -8220,9 +8220,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        if (isFixedOrientationLetterboxAllowed) {
            resolveFixedOrientationConfiguration(newParentConfiguration);
        }

        if (getCompatDisplayInsets() != null) {
            resolveSizeCompatModeConfiguration(newParentConfiguration);
        final CompatDisplayInsets compatDisplayInsets = getCompatDisplayInsets();
        if (compatDisplayInsets != null) {
            resolveSizeCompatModeConfiguration(newParentConfiguration, compatDisplayInsets);
        } else if (inMultiWindowMode() && !isFixedOrientationLetterboxAllowed) {
            // We ignore activities' requested orientation in multi-window modes. They may be
            // taken into consideration in resolveFixedOrientationConfiguration call above.
@@ -8239,7 +8239,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            resolveAspectRatioRestriction(newParentConfiguration);
        }

        if (isFixedOrientationLetterboxAllowed || getCompatDisplayInsets() != null
        if (isFixedOrientationLetterboxAllowed || compatDisplayInsets != null
                // In fullscreen, can be letterboxed for aspect ratio.
                || !inMultiWindowMode()) {
            updateResolvedBoundsPosition(newParentConfiguration);
@@ -8247,7 +8247,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A

        boolean isIgnoreOrientationRequest = mDisplayContent != null
                && mDisplayContent.getIgnoreOrientationRequest();
        if (getCompatDisplayInsets() == null
        if (compatDisplayInsets == null
                // for size compat mode set in updateCompatDisplayInsets
                // Fixed orientation letterboxing is possible on both large screen devices
                // with ignoreOrientationRequest enabled and on phones in split screen even with
@@ -8294,7 +8294,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                        info.neverSandboxDisplayApis(sConstrainDisplayApisConfig),
                        info.alwaysSandboxDisplayApis(sConstrainDisplayApisConfig),
                        !matchParentBounds(),
                        getCompatDisplayInsets() != null,
                        compatDisplayInsets != null,
                        shouldCreateCompatDisplayInsets());
            }
            resolvedConfig.windowConfiguration.setMaxBounds(mTmpBounds);
@@ -8710,7 +8710,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
     * Resolves consistent screen configuration for orientation and rotation changes without
     * inheriting the parent bounds.
     */
    private void resolveSizeCompatModeConfiguration(Configuration newParentConfiguration) {
    private void resolveSizeCompatModeConfiguration(Configuration newParentConfiguration,
            @NonNull CompatDisplayInsets compatDisplayInsets) {
        final Configuration resolvedConfig = getResolvedOverrideConfiguration();
        final Rect resolvedBounds = resolvedConfig.windowConfiguration.getBounds();

@@ -8731,13 +8732,13 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                ? requestedOrientation
                // We should use the original orientation of the activity when possible to avoid
                // forcing the activity in the opposite orientation.
                : getCompatDisplayInsets().mOriginalRequestedOrientation != ORIENTATION_UNDEFINED
                        ? getCompatDisplayInsets().mOriginalRequestedOrientation
                : compatDisplayInsets.mOriginalRequestedOrientation != ORIENTATION_UNDEFINED
                        ? compatDisplayInsets.mOriginalRequestedOrientation
                        : newParentConfiguration.orientation;
        int rotation = newParentConfiguration.windowConfiguration.getRotation();
        final boolean isFixedToUserRotation = mDisplayContent == null
                || mDisplayContent.getDisplayRotation().isFixedToUserRotation();
        if (!isFixedToUserRotation && !getCompatDisplayInsets().mIsFloating) {
        if (!isFixedToUserRotation && !compatDisplayInsets.mIsFloating) {
            // Use parent rotation because the original display can be rotated.
            resolvedConfig.windowConfiguration.setRotation(rotation);
        } else {
@@ -8753,11 +8754,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        // rely on them to contain the original and unchanging width and height of the app.
        final Rect containingAppBounds = new Rect();
        final Rect containingBounds = mTmpBounds;
        getCompatDisplayInsets().getContainerBounds(containingAppBounds, containingBounds, rotation,
        compatDisplayInsets.getContainerBounds(containingAppBounds, containingBounds, rotation,
                orientation, orientationRequested, isFixedToUserRotation);
        resolvedBounds.set(containingBounds);
        // The size of floating task is fixed (only swap), so the aspect ratio is already correct.
        if (!getCompatDisplayInsets().mIsFloating) {
        if (!compatDisplayInsets.mIsFloating) {
            mIsAspectRatioApplied =
                    applyAspectRatio(resolvedBounds, containingAppBounds, containingBounds);
        }
@@ -8766,7 +8767,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        // are calculated in compat container space. The actual position on screen will be applied
        // later, so the calculation is simpler that doesn't need to involve offset from parent.
        getTaskFragment().computeConfigResourceOverrides(resolvedConfig, newParentConfiguration,
                getCompatDisplayInsets());
                compatDisplayInsets);
        // Use current screen layout as source because the size of app is independent to parent.
        resolvedConfig.screenLayout = computeScreenLayout(
                getConfiguration().screenLayout, resolvedConfig.screenWidthDp,
+1 −1
Original line number Diff line number Diff line
@@ -1427,7 +1427,7 @@ final class LetterboxUiController {
     * the first opaque activity beneath.
     */
    boolean hasInheritedLetterboxBehavior() {
        return mLetterboxConfigListener != null && !mActivityRecord.matchParentBounds();
        return mLetterboxConfigListener != null;
    }

    /**