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

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

Merge "Enable sclaled resizing for non-resizeable apps" into main

parents 0bf811b2 bf48fb23
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ import com.android.wm.shell.common.DisplayLayout;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.shared.annotations.ShellBackgroundThread;
import com.android.wm.shell.shared.desktopmode.DesktopModeFlags;
import com.android.wm.shell.windowdecor.extension.TaskInfoKt;
import com.android.wm.shell.windowdecor.viewhost.WindowDecorViewHostSupplier;

@@ -240,7 +241,8 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL
            boolean applyStartTransactionOnDraw, boolean setTaskCropAndPosition) {
        final boolean isFreeform =
                taskInfo.getWindowingMode() == WindowConfiguration.WINDOWING_MODE_FREEFORM;
        final boolean isDragResizeable = isFreeform && taskInfo.isResizeable;
        final boolean isDragResizeable = DesktopModeFlags.SCALED_RESIZING.isEnabled(mContext)
                ? isFreeform : isFreeform && taskInfo.isResizeable;

        final WindowDecorLinearLayout oldRootView = mResult.mRootView;
        final SurfaceControl oldDecorationSurface = mDecorationContainerSurface;
+20 −7
Original line number Diff line number Diff line
@@ -1603,14 +1603,27 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
                Transitions transitions,
                InteractionJankMonitor interactionJankMonitor,
                Supplier<SurfaceControl.Transaction> transactionFactory) {
            if (!DesktopModeStatus.isVeiledResizeEnabled()) {
                return new FluidResizeTaskPositioner(
                        taskOrganizer, transitions, windowDecoration, displayController,
                        dragStartListener, transactionFactory);
            }
            return new VeiledResizeTaskPositioner(
                    taskOrganizer, windowDecoration, displayController,
                    dragStartListener, transitions, interactionJankMonitor);
            final TaskPositioner taskPositioner = DesktopModeStatus.isVeiledResizeEnabled()
                    ? new VeiledResizeTaskPositioner(
                            taskOrganizer,
                            windowDecoration,
                            displayController,
                            dragStartListener,
                            transitions,
                            interactionJankMonitor)
                    : new FluidResizeTaskPositioner(
                            taskOrganizer,
                            transitions,
                            windowDecoration,
                            displayController,
                            dragStartListener,
                            transactionFactory);

            if (DesktopModeFlags.SCALED_RESIZING.isEnabled(windowDecoration.mContext)) {
                return new FixedAspectRatioTaskPositionerDecorator(windowDecoration,
                        taskPositioner);
            }
            return taskPositioner;
        }
    }
}
+7 −3
Original line number Diff line number Diff line
@@ -455,7 +455,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
    }

    private void updateDragResizeListener(SurfaceControl oldDecorationSurface) {
        if (!isDragResizable(mTaskInfo)) {
        if (!isDragResizable(mTaskInfo, mContext)) {
            if (!mTaskInfo.positionInParent.equals(mPositionInParent)) {
                // We still want to track caption bar's exclusion region on a non-resizeable task.
                updateExclusionRegion();
@@ -497,12 +497,16 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
        }
    }

    private static boolean isDragResizable(ActivityManager.RunningTaskInfo taskInfo) {
    private static boolean isDragResizable(ActivityManager.RunningTaskInfo taskInfo,
            Context context) {
        if (DesktopModeFlags.SCALED_RESIZING.isEnabled(context)) {
            return taskInfo.isFreeform();
        }
        return taskInfo.isFreeform() && taskInfo.isResizeable;
    }

    private void updateMaximizeMenu(SurfaceControl.Transaction startT) {
        if (!isDragResizable(mTaskInfo) || !isMaximizeMenuActive()) {
        if (!isDragResizable(mTaskInfo, mContext) || !isMaximizeMenuActive()) {
            return;
        }
        if (!mTaskInfo.isVisible()) {
+2 −0
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@ import kotlin.jvm.functions.Function1;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -563,6 +564,7 @@ public class DesktopModeWindowDecorationTests extends ShellTestCase {
    }

    @Test
    @Ignore("TODO(b/367235906): Due to MONITOR_INPUT permission error")
    public void relayout_freeformTask_appliesTransactionOnDraw() {
        final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(/* visible= */ true);
        final DesktopModeWindowDecoration spyWindowDecor = spy(createWindowDecoration(taskInfo));