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

Commit dc607ea0 authored by Eghosa Ewansiha-Vlachavas's avatar Eghosa Ewansiha-Vlachavas Committed by Android (Google) Code Review
Browse files

Merge changes I27a3710d,I2e678225 into main

* changes:
  [2/n] Preserve exisitng orienation and aspect ratio from recents tasks relaunch
  [1/n] Add preserveRecentsTaskConfigurationOnRelaunch flag
parents ae08a2ea 6b9edc42
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -149,6 +149,8 @@ public enum DesktopModeFlags {
            Flags::includeTopTransparentFullscreenTaskInDesktopHeuristic, true),
    INHERIT_TASK_BOUNDS_FOR_TRAMPOLINE_TASK_LAUNCHES(
            Flags::inheritTaskBoundsForTrampolineTaskLaunches, true),
    PRESERVE_RECENTS_TASK_CONFIGURATION_ON_RELAUNCH(
            Flags::preserveRecentsTaskConfigurationOnRelaunch, false),
    SKIP_DECOR_VIEW_RELAYOUT_WHEN_CLOSING_BUGFIX(
            Flags::skipDecorViewRelayoutWhenClosingBugfix, true),
    // go/keep-sorted end
+11 −0
Original line number Diff line number Diff line
@@ -37,6 +37,17 @@ flag {
    }
}

flag {
    name: "preserve_recents_task_configuration_on_relaunch"
    namespace: "lse_desktop_experience"
    description: "Preserve the orientation and aspect ratio of task if it was previously in /n"
                 "recents with a running activity."
    bug: "405141594"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "include_top_transparent_fullscreen_task_in_desktop_heuristic"
    namespace: "lse_desktop_experience"
+10 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.server.wm;

import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
import static android.content.res.Configuration.UI_MODE_TYPE_MASK;
import static android.content.res.Configuration.UI_MODE_TYPE_VR_HEADSET;

@@ -81,6 +83,14 @@ final class AppCompatUtils {
        return Math.max(width, height) / (float) Math.min(width, height);
    }

    /**
     * Returns the orientation of the given {@code rect}.
     */
    static @Configuration.Orientation int computeConfigOrientation(@NonNull Rect rect) {
        return rect.height() >= rect.width()
                ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE;
    }

    /**
     * @param config The current {@link Configuration}
     * @return {@code true} if using a VR headset.
+10 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.annotation.NonNull;
import android.app.WindowConfiguration;
import android.content.pm.ActivityInfo;
import android.graphics.Rect;
import android.window.DesktopModeFlags;

import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
@@ -70,6 +71,15 @@ public class DesktopAppCompatAspectRatioPolicy {
     * launched in. Takes into account any min or max aspect ratio constraints.
     */
    float calculateAspectRatio(@NonNull Task task, boolean hasOrientationMismatch) {
        if (DesktopModeFlags.PRESERVE_RECENTS_TASK_CONFIGURATION_ON_RELAUNCH.isTrue()
                && task.inRecents && task.topRunningActivity() != null) {
            // If task in resents with running activity, inherit existing activity aspect ratio.
            final WindowConfiguration windowConfiguration =
                    task.topRunningActivity().getWindowConfiguration();
            final Rect existingBounds = windowConfiguration.getAppBounds() != null
                    ? windowConfiguration.getAppBounds() : windowConfiguration.getBounds();
            return AppCompatUtils.computeAspectRatio(existingBounds);
        }
        final float maxAspectRatio = getMaxAspectRatio();
        final float minAspectRatio = getMinAspectRatio(task);
        float desiredAspectRatio = 0;
+11 −2
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import static com.android.server.wm.LaunchParamsUtil.calculateLayoutBounds;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityOptions;
import android.app.WindowConfiguration;
import android.content.pm.ActivityInfo.WindowLayout;
import android.content.res.Configuration;
import android.graphics.Rect;
@@ -151,8 +152,7 @@ public final class DesktopModeBoundsCalculator {
        }
        final DesktopAppCompatAspectRatioPolicy desktopAppCompatAspectRatioPolicy =
                activity.mAppCompatController.getDesktopAspectRatioPolicy();
        final int stableBoundsOrientation = stableBounds.height() >= stableBounds.width()
                ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE;
        final int stableBoundsOrientation = AppCompatUtils.computeConfigOrientation(stableBounds);
        int activityOrientation = getActivityConfigurationOrientation(
                activity, task, stableBoundsOrientation);
        // Use orientation mismatch to resolve aspect ratio to match fixed orientation letterboxing
@@ -238,6 +238,15 @@ public final class DesktopModeBoundsCalculator {
    private static @Configuration.Orientation int getActivityConfigurationOrientation(
            @NonNull ActivityRecord activity, @NonNull Task task,
            @Configuration.Orientation int stableBoundsOrientation) {
        if (DesktopModeFlags.PRESERVE_RECENTS_TASK_CONFIGURATION_ON_RELAUNCH.isTrue()
                && task.inRecents && task.topRunningActivity() != null) {
            // If task in resents with running activity, inherit existing activity orientation.
            final WindowConfiguration windowConfiguration =
                    task.topRunningActivity().getWindowConfiguration();
            final Rect existingBounds = windowConfiguration.getAppBounds() != null
                    ? windowConfiguration.getAppBounds() : windowConfiguration.getBounds();
            return AppCompatUtils.computeConfigOrientation(existingBounds);
        }
        final int activityOrientation = activity.getOverrideOrientation();
        final DesktopAppCompatAspectRatioPolicy desktopAppCompatAspectRatioPolicy =
                activity.mAppCompatController.getDesktopAspectRatioPolicy();
Loading