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

Commit fa089c89 authored by Graciela Putri's avatar Graciela Putri Committed by Android (Google) Code Review
Browse files

Merge "Move app compat TaskTests to AppCompatUtilsTest" into main

parents 19861d84 427599a1
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -230,6 +230,10 @@ class AppCompatActivityRobot {
        mDisplayContent.setIgnoreOrientationRequest(enabled);
    }

    void setTopOrganizedTaskAsTopTask() {
        doReturn(mTaskStack.top()).when(mActivityStack.top()).getOrganizedTask();
    }

    void setTopTaskInMultiWindowMode(boolean inMultiWindowMode) {
        doReturn(inMultiWindowMode).when(mTaskStack.top()).inMultiWindowMode();
    }
+98 −0
Original line number Diff line number Diff line
@@ -16,10 +16,14 @@

package com.android.server.wm;

import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE;

import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;

import static org.mockito.Mockito.when;

import android.app.CameraCompatTaskInfo.FreeformCameraCompatMode;
import android.app.TaskInfo;
import android.platform.test.annotations.Presubmit;

import androidx.annotation.NonNull;
@@ -114,6 +118,72 @@ public class AppCompatUtilsTest extends WindowTestsBase {
        });
    }

    @Test
    public void testTopActivityEligibleForUserAspectRatioButton_eligible() {
        runTestScenario((robot) -> {
            robot.applyOnActivity((a) -> {
                a.createActivityWithComponentInNewTask();
                a.setIgnoreOrientationRequest(true);
            });
            robot.conf().enableUserAppAspectRatioSettings(true);

            robot.checkTaskInfoEligibleForUserAspectRatioButton(true);
        });
    }

    @Test
    public void testTopActivityEligibleForUserAspectRatioButton_disabled_notEligible() {
        runTestScenario((robot) -> {
            robot.applyOnActivity((a) -> {
                a.createActivityWithComponentInNewTask();
                a.setIgnoreOrientationRequest(true);
            });
            robot.conf().enableUserAppAspectRatioSettings(false);

            robot.checkTaskInfoEligibleForUserAspectRatioButton(false);
        });
    }

    @Test
    public void testTopActivityEligibleForUserAspectRatioButton_inSizeCompatMode_notEligible() {
        runTestScenario((robot) -> {
            robot.applyOnActivity((a) -> {
                a.createActivityWithComponentInNewTask();
                a.setIgnoreOrientationRequest(true);
                a.setTopOrganizedTaskAsTopTask();
                a.setTopActivityInSizeCompatMode(true);
                a.setTopActivityVisible(true);
            });
            robot.conf().enableUserAppAspectRatioSettings(true);

            robot.checkTaskInfoEligibleForUserAspectRatioButton(false);
        });
    }

    @Test
    public void testTopActivityEligibleForUserAspectRatioButton_transparentTop_notEligible() {
        runTestScenario((robot) -> {
            robot.transparentActivity((ta) -> {
                ta.launchTransparentActivityInTask();
                ta.activity().setIgnoreOrientationRequest(true);
            });
            robot.conf().enableUserAppAspectRatioSettings(true);

            robot.checkTaskInfoEligibleForUserAspectRatioButton(false);
        });
    }

    @Test
    public void getTaskInfoPropagatesCameraCompatMode() {
        runTestScenario((robot) -> {
            robot.applyOnActivity(AppCompatActivityRobot::createActivityWithComponentInNewTask);

            robot.setFreeformCameraCompatMode(CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE);
            robot.checkTaskInfoFreeformCameraCompatMode(
                    CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE);
        });
    }

    /**
     * Runs a test scenario providing a Robot.
     */
@@ -125,11 +195,14 @@ public class AppCompatUtilsTest extends WindowTestsBase {
    private static class AppCompatUtilsRobotTest extends AppCompatRobotBase {

        private final WindowState mWindowState;
        @NonNull
        private final AppCompatTransparentActivityRobot mTransparentActivityRobot;

        AppCompatUtilsRobotTest(@NonNull WindowManagerService wm,
                @NonNull ActivityTaskManagerService atm,
                @NonNull ActivityTaskSupervisor supervisor) {
            super(wm, atm, supervisor);
            mTransparentActivityRobot = new AppCompatTransparentActivityRobot(activity());
            mWindowState = Mockito.mock(WindowState.class);
        }

@@ -139,6 +212,12 @@ public class AppCompatUtilsTest extends WindowTestsBase {
            spyOn(activity.mAppCompatController.getAppCompatAspectRatioPolicy());
        }

        void transparentActivity(@NonNull Consumer<AppCompatTransparentActivityRobot> consumer) {
            // We always create at least an opaque activity in a Task.
            activity().createNewTaskWithBaseActivity();
            consumer.accept(mTransparentActivityRobot);
        }

        void setIsLetterboxedForFixedOrientationAndAspectRatio(
                boolean forFixedOrientationAndAspectRatio) {
            when(activity().top().mAppCompatController.getAppCompatAspectRatioPolicy()
@@ -155,11 +234,30 @@ public class AppCompatUtilsTest extends WindowTestsBase {
            when(mWindowState.isLetterboxedForDisplayCutout()).thenReturn(displayCutout);
        }

        void setFreeformCameraCompatMode(@FreeformCameraCompatMode int mode) {
            activity().top().mAppCompatController.getAppCompatCameraOverrides()
                    .setFreeformCameraCompatMode(mode);
        }

        void checkTopActivityLetterboxReason(@NonNull String expected) {
            Assert.assertEquals(expected,
                    AppCompatUtils.getLetterboxReasonString(activity().top(), mWindowState));
        }

        @NonNull
        TaskInfo getTopTaskInfo() {
            return activity().top().getTask().getTaskInfo();
        }

        void checkTaskInfoEligibleForUserAspectRatioButton(boolean eligible) {
            Assert.assertEquals(eligible, getTopTaskInfo().appCompatTaskInfo
                    .eligibleForUserAspectRatioButton());
        }

        void checkTaskInfoFreeformCameraCompatMode(@FreeformCameraCompatMode int mode) {
            Assert.assertEquals(mode, getTopTaskInfo().appCompatTaskInfo
                    .cameraCompatTaskInfo.freeformCameraCompatMode);
        }
    }

}
+0 −56
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.server.wm;


import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
@@ -704,50 +703,6 @@ public class TaskTests extends WindowTestsBase {
        assertEquals(freeformBounds, task.getBounds());
    }

    @Test
    public void testTopActivityEligibleForUserAspectRatioButton() {
        DisplayContent display = mAtm.mRootWindowContainer.getDefaultDisplay();
        final Task rootTask = new TaskBuilder(mSupervisor).setCreateActivity(true)
                .setWindowingMode(WINDOWING_MODE_FULLSCREEN).setDisplay(display).build();
        final Task task = rootTask.getBottomMostTask();
        final ActivityRecord root = task.getTopNonFinishingActivity();
        spyOn(mWm.mAppCompatConfiguration);
        spyOn(root);
        spyOn(root.mAppCompatController.getAppCompatAspectRatioOverrides());

        doReturn(true).when(root).fillsParent();
        doReturn(true).when(
                root.mAppCompatController.getAppCompatAspectRatioOverrides())
                    .shouldEnableUserAspectRatioSettings();
        doReturn(false).when(root).inSizeCompatMode();
        doReturn(task).when(root).getOrganizedTask();

        // The button should be eligible to be displayed
        assertTrue(task.getTaskInfo()
                .appCompatTaskInfo.eligibleForUserAspectRatioButton());

        // When shouldApplyUserMinAspectRatioOverride is disable the button is not enabled
        doReturn(false).when(
                root.mAppCompatController.getAppCompatAspectRatioOverrides())
                    .shouldEnableUserAspectRatioSettings();
        assertFalse(task.getTaskInfo()
                .appCompatTaskInfo.eligibleForUserAspectRatioButton());
        doReturn(true).when(root.mAppCompatController
                .getAppCompatAspectRatioOverrides()).shouldEnableUserAspectRatioSettings();

        // When in size compat mode the button is not enabled
        doReturn(true).when(root).inSizeCompatMode();
        assertFalse(task.getTaskInfo()
                .appCompatTaskInfo.eligibleForUserAspectRatioButton());
        doReturn(false).when(root).inSizeCompatMode();

        // When the top activity is transparent, the button is not enabled
        doReturn(false).when(root).fillsParent();
        assertFalse(task.getTaskInfo()
                .appCompatTaskInfo.eligibleForUserAspectRatioButton());
        doReturn(true).when(root).fillsParent();
    }

    @Test
    public void testIsTopActivityTranslucent() {
        DisplayContent display = mAtm.mRootWindowContainer.getDefaultDisplay();
@@ -2111,17 +2066,6 @@ public class TaskTests extends WindowTestsBase {
        assertNotEquals(activityDifferentPackage, task.getBottomMostActivityInSamePackage());
    }

    @Test
    public void getTaskInfoPropagatesCameraCompatMode() {
        final Task task = new TaskBuilder(mSupervisor).setCreateActivity(true).build();
        final ActivityRecord activity = task.getTopMostActivity();
        activity.mAppCompatController.getAppCompatCameraOverrides().setFreeformCameraCompatMode(
                CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE);

        assertEquals(CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE,
                task.getTaskInfo().appCompatTaskInfo.cameraCompatTaskInfo.freeformCameraCompatMode);
    }

    @Test
    public void testUpdateTaskDescriptionOnReparent() {
        final Task rootTask1 = createTask(mDisplayContent);