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

Commit 3a695fea authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "canEnterDesktopMode is only true if desktop mode can be started." into main

parents f6efea3d f235025a
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -133,9 +133,12 @@ public class DesktopModeStatus {
     * Return {@code true} if desktop mode is enabled and can be entered on the current device.
     */
    public static boolean canEnterDesktopMode(@NonNull Context context) {
        return (isDeviceEligibleForDesktopMode(context)
                && DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODE.isTrue())
                || isDesktopModeEnabledByDevOption(context);
        boolean isEligibleForDesktopMode = isDeviceEligibleForDesktopMode(context) && (
                DesktopExperienceFlags.ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE.isTrue()
                        || canInternalDisplayHostDesktops(context));
        boolean desktopModeEnabled =
                isEligibleForDesktopMode && DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODE.isTrue();
        return desktopModeEnabled || isDesktopModeEnabledByDevOption(context);
    }

    /**
+5 −1
Original line number Diff line number Diff line
@@ -64,8 +64,12 @@ class DesktopStateImpl(context: Context) : DesktopState {
        DesktopModeFlags.isDesktopModeForcedEnabled() && canShowDesktopModeDevOption

    override val canEnterDesktopMode: Boolean = run {
        val isEligibleForDesktopMode =
            isDeviceEligibleForDesktopMode &&
                    (DesktopExperienceFlags.ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE.isTrue ||
                            canInternalDisplayHostDesktops)
        val desktopModeEnabled =
            isDeviceEligibleForDesktopMode && DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODE.isTrue
            isEligibleForDesktopMode && DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODE.isTrue
        desktopModeEnabled || isDesktopModeEnabledByDevOption
    }

+42 −2
Original line number Diff line number Diff line
@@ -54,10 +54,11 @@ class DesktopModeStatusTest : ShellTestCase() {
    @Before
    fun setUp() {
        doReturn(mockResources).whenever(mockContext).getResources()
        doReturn(false).whenever(mockResources).getBoolean(eq(R.bool.config_isDesktopModeSupported))
        setDeviceEligibleForDesktopMode(false)
        doReturn(false).whenever(mockResources).getBoolean(
            eq(R.bool.config_isDesktopModeDevOptionSupported)
        )
        setCanInternalDisplayHostDesktops(false)
        doReturn(context.contentResolver).whenever(mockContext).contentResolver
        resetDesktopModeFlagsCache()
        resetEnforceDeviceRestriction()
@@ -85,6 +86,7 @@ class DesktopModeStatusTest : ShellTestCase() {
    @Test
    fun canEnterDesktopMode_DWFlagDisabled_deviceEligible_configDevOptionOn_returnsFalse() {
        setDeviceEligibleForDesktopMode(true)
        setCanInternalDisplayHostDesktops(true)
        doReturn(true).whenever(mockResources).getBoolean(
            eq(R.bool.config_isDesktopModeDevOptionSupported)
        )
@@ -131,15 +133,48 @@ class DesktopModeStatusTest : ShellTestCase() {
        assertThat(DesktopModeStatus.canEnterDesktopMode(mockContext)).isFalse()
    }

    @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_MODE_THROUGH_DEV_OPTION)
    @DisableFlags(
        Flags.FLAG_ENABLE_DESKTOP_MODE_THROUGH_DEV_OPTION,
        Flags.FLAG_ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE,
    )
    @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
    @Test
    fun canEnterDesktopMode_DWFlagEnabled_deviceEligible_returnsTrue() {
        setDeviceEligibleForDesktopMode(true)
        setCanInternalDisplayHostDesktops(true)

        assertThat(DesktopModeStatus.canEnterDesktopMode(mockContext)).isTrue()
    }

    @DisableFlags(
        Flags.FLAG_ENABLE_DESKTOP_MODE_THROUGH_DEV_OPTION,
        Flags.FLAG_ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE,
    )
    @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
    @Test
    fun canEnterDesktopMode_DWFlagEnabled_deviceEligibleWithoutInternalDisplay_returnsFalse() {
        setDeviceEligibleForDesktopMode(true)
        setCanInternalDisplayHostDesktops(false)

        assertThat(DesktopModeStatus.canEnterDesktopMode(mockContext)).isFalse()
    }

    @DisableFlags(
        Flags.FLAG_ENABLE_DESKTOP_MODE_THROUGH_DEV_OPTION,
    )
    @EnableFlags(
        Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
        Flags.FLAG_ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE,
    )
    @Test
    fun canEnterDesktopMode_DWAndProjectedFlagEnabled_eligibleWithoutInternalDisplay_returnsTrue() {
        setDeviceEligibleForDesktopMode(true)
        setCanInternalDisplayHostDesktops(false)

        assertThat(DesktopModeStatus.canEnterDesktopMode(mockContext)).isTrue()
    }


    @EnableFlags(
        Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
        Flags.FLAG_ENABLE_DESKTOP_MODE_THROUGH_DEV_OPTION
@@ -281,6 +316,11 @@ class DesktopModeStatusTest : ShellTestCase() {
            .getBoolean(eq(R.bool.config_isDesktopModeSupported))
    }

    private fun setCanInternalDisplayHostDesktops(eligible: Boolean) {
        doReturn(eligible).whenever(mockResources)
            .getBoolean(eq(R.bool.config_canInternalDisplayHostDesktops))
    }

    private fun setIsVeiledResizeEnabled(enabled: Boolean) {
        val deviceRestrictions =
            DesktopModeStatus::class.java.getDeclaredField("IS_VEILED_RESIZE_ENABLED")
+17 −1
Original line number Diff line number Diff line
@@ -194,7 +194,23 @@ class DesktopStateImplTest : ShellTestCase() {
    )
    @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
    @Test
    fun canEnterDesktopMode_DWFlagEnabled_deviceEligibleWithoutInternalDisplay_returnsTrue() {
    fun canEnterDesktopMode_DWFlagEnabled_deviceEligibleWithoutInternalDisplay_returnsFalse() {
        setDeviceEligibleForDesktopMode(true)
        setCanInternalDisplayHostDesktops(false)
        val desktopState = DesktopStateImpl(context)

        assertThat(desktopState.canEnterDesktopMode).isFalse()
    }

    @DisableFlags(
        Flags.FLAG_ENABLE_DESKTOP_MODE_THROUGH_DEV_OPTION,
    )
    @EnableFlags(
        Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
        Flags.FLAG_ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE,
    )
    @Test
    fun canEnterDesktopMode_DWAndProjectedFlagEnabled_eligibleWithoutInternalDisplay_returnsTrue() {
        setDeviceEligibleForDesktopMode(true)
        setCanInternalDisplayHostDesktops(false)
        val desktopState = DesktopStateImpl(context)