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

Commit 9c293959 authored by Mariia Sandrikova's avatar Mariia Sandrikova
Browse files

[2/n] Letterbox reachability: Aspect ratio as in split screen.

Bug: 197549949
Test: atest WmTests:SizeCompatTests
manual with adb shell cmd window set-letterbox-style --isReachabilityEnabled true

Change-Id: Idb6b82f100ad67e446b8a36a5cc3325e49b1f914
parent a75783be
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -7714,10 +7714,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        final Rect prevResolvedBounds = new Rect(resolvedBounds);
        resolvedBounds.set(containingBounds);

        // Override from config_fixedOrientationLetterboxAspectRatio or via ADB with
        // set-fixed-orientation-letterbox-aspect-ratio.
        final float letterboxAspectRatioOverride =
                mWmService.mLetterboxConfiguration.getFixedOrientationLetterboxAspectRatio();
                mLetterboxUiController.getFixedOrientationLetterboxAspectRatio(newParentConfig);
        final float desiredAspectRatio =
                letterboxAspectRatioOverride > MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO
                        ? letterboxAspectRatioOverride : computeAspectRatio(parentBounds);
+32 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;

import static com.android.server.wm.ActivityRecord.computeAspectRatio;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND;
@@ -32,6 +33,7 @@ import static com.android.server.wm.LetterboxConfiguration.letterboxBackgroundTy
import android.annotation.Nullable;
import android.app.ActivityManager.TaskDescription;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.Rect;
@@ -40,6 +42,7 @@ import android.view.SurfaceControl;
import android.view.SurfaceControl.Transaction;
import android.view.WindowManager;

import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.wm.LetterboxConfiguration.LetterboxBackgroundType;

@@ -173,6 +176,31 @@ final class LetterboxUiController {
                : mLetterboxConfiguration.getLetterboxHorizontalPositionMultiplier();
    }

    float getFixedOrientationLetterboxAspectRatio(Configuration parentConfiguration) {
        // Don't check resolved windowing mode because it may not be updated yet during
        // configuration change.
        if (!isReachabilityEnabled(parentConfiguration)) {
            return mLetterboxConfiguration.getFixedOrientationLetterboxAspectRatio();
        }

        int dividerWindowWidth =
                getResources().getDimensionPixelSize(R.dimen.docked_stack_divider_thickness);
        int dividerInsets =
                getResources().getDimensionPixelSize(R.dimen.docked_stack_divider_insets);
        int dividerSize = dividerWindowWidth - dividerInsets * 2;

        // Getting the same aspect ratio that apps get in split screen.
        Rect bounds = new Rect(parentConfiguration.windowConfiguration.getAppBounds());
        bounds.inset(dividerSize, /* dy */ 0);
        bounds.right = bounds.centerX();

        return computeAspectRatio(bounds);
    }

    Resources getResources() {
        return mActivityRecord.mWmService.mContext.getResources();
    }

    private void handleDoubleTap() {
        if (!isReachabilityEnabled() || mActivityRecord.isInTransition()) {
            return;
@@ -333,7 +361,7 @@ final class LetterboxUiController {
        }

        pw.println(prefix + "  letterboxReason=" + getLetterboxReasonString(mainWin));
        pw.println(prefix + "  letterboxAspectRatio="
        pw.println(prefix + "  activityAspectRatio="
                + mActivityRecord.computeAspectRatio(mActivityRecord.getBounds()));

        boolean shouldShowLetterboxUi = shouldShowLetterboxUi(mainWin);
@@ -360,6 +388,9 @@ final class LetterboxUiController {
        pw.println(prefix + "  isReachabilityEnabled=" + isReachabilityEnabled());
        pw.println(prefix + "  letterboxHorizontalPositionMultiplier="
                + getHorizontalPositionMultiplier(mActivityRecord.getParent().getConfiguration()));
        pw.println(prefix + "  fixedOrientationLetterboxAspectRatio="
                + getFixedOrientationLetterboxAspectRatio(
                        mActivityRecord.getParent().getConfiguration()));
    }

    /**