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

Commit e3fc5fb3 authored by Pierre Barbier de Reuille's avatar Pierre Barbier de Reuille Committed by Android (Google) Code Review
Browse files

Merge "Correct showing desktop experience dev option" into main

parents 81ac1ee3 97c707c8
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package android.window;

import static com.android.server.display.feature.flags.Flags.enableDisplayContentModeManagement;

import android.annotation.Nullable;
import android.app.ActivityThread;
import android.app.Application;
@@ -214,6 +216,10 @@ public enum DesktopModeFlags {
            boolean shouldOverrideByDevOption) {
        if (!shouldOverrideByDevOption) return flagFunction.getAsBoolean();
        if (Flags.showDesktopExperienceDevOption()) {
            // If the feature is enabled, just return the flag's value.
            if (enableDisplayContentModeManagement()) {
                return flagFunction.getAsBoolean();
            }
            return switch (getToggleOverride()) {
                case OVERRIDE_UNSET, OVERRIDE_OFF -> flagFunction.getAsBoolean();
                case OVERRIDE_ON -> true;
+2 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import static android.window.DesktopModeFlags.ToggleOverride.OVERRIDE_ON;
import static android.window.DesktopModeFlags.ToggleOverride.OVERRIDE_UNSET;
import static android.window.DesktopModeFlags.ToggleOverride.fromSetting;

import static com.android.server.display.feature.flags.Flags.FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT;
import static com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE;
import static com.android.window.flags.Flags.FLAG_SHOW_DESKTOP_EXPERIENCE_DEV_OPTION;
import static com.android.window.flags.Flags.FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION;
@@ -67,6 +68,7 @@ import java.util.List;
@SmallTest
@Presubmit
@RunWith(ParameterizedAndroidJunit4.class)
@DisableFlags(FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT)
public class DesktopModeFlagsTest {

    @Parameters(name = "{0}")
+2 −8
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.wm.shell.shared.desktopmode;

import static android.hardware.display.DisplayManager.DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED;
import static android.window.DesktopExperienceFlags.ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE;

import static com.android.server.display.feature.flags.Flags.enableDisplayContentModeManagement;
import static com.android.wm.shell.shared.bubbles.BubbleAnythingFlagHelper.enableBubbleToFullscreen;
@@ -207,15 +206,10 @@ public class DesktopModeStatus {
        if (!enforceDeviceRestrictions()) {
            return true;
        }
        // If projected display is enabled, #canInternalDisplayHostDesktops is no longer a
        // requirement.
        final boolean desktopModeSupported = ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE.isTrue()
                ? isDesktopModeSupported(context) : (isDesktopModeSupported(context)
                && canInternalDisplayHostDesktops(context));
        final boolean desktopModeSupportedByDevOptions =
                Flags.enableDesktopModeThroughDevOption()
                    && isDesktopModeDevOptionSupported(context);
        return desktopModeSupported || desktopModeSupportedByDevOptions;
        return isDesktopModeSupported(context) || desktopModeSupportedByDevOptions;
    }

    /**
+2 −21
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import android.window.DesktopExperienceFlags
import android.window.DesktopModeFlags
import com.android.internal.R
import com.android.internal.annotations.VisibleForTesting
import com.android.server.display.feature.flags.Flags.enableDisplayContentModeManagement
import com.android.window.flags.Flags
import com.android.wm.shell.shared.bubbles.BubbleAnythingFlagHelper

@@ -85,18 +84,9 @@ class DesktopStateImpl(context: Context) : DesktopState {
    override val isDeviceEligibleForDesktopMode: Boolean
        get() {
            if (!enforceDeviceRestrictions) return true

            // If projected display is enabled, [canInternalDisplayHostDesktops] is no longer a
            // requirement.
            val desktopModeSupported =
                if (DesktopExperienceFlags.ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE.isTrue) {
                    isDesktopModeSupported
                } else {
                    isDesktopModeSupported && canInternalDisplayHostDesktops
                }
            val desktopModeSupportedByDevOptions =
                Flags.enableDesktopModeThroughDevOption() && isDesktopModeDevOptionSupported
            return desktopModeSupported || desktopModeSupportedByDevOptions
            return isDesktopModeSupported || desktopModeSupportedByDevOptions
        }

    override val enableMultipleDesktops: Boolean =
@@ -111,18 +101,9 @@ class DesktopStateImpl(context: Context) : DesktopState {
        if (!canEnterDesktopMode) return false
        if (!enforceDeviceRestrictions) return true
        if (display.type == Display.TYPE_INTERNAL) return canInternalDisplayHostDesktops

        // TODO (b/395014779): Change this to use WM API
        if (
            (display.type == Display.TYPE_EXTERNAL || display.type == Display.TYPE_OVERLAY) &&
                enableDisplayContentModeManagement()
        ) {
        return windowManager?.isEligibleForDesktopMode(display.displayId) ?: false
    }

        return false
    }

    override fun isProjectedMode(): Boolean {
        if (!DesktopExperienceFlags.ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE.isTrue) {
            return false
+29 −14
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.platform.test.annotations.Presubmit
import android.platform.test.flag.junit.SetFlagsRule
import android.window.DesktopExperienceFlags
import android.window.DesktopModeFlags
import androidx.test.filters.SmallTest
import com.android.internal.R
@@ -57,7 +58,6 @@ class DesktopModeStatusTest : ShellTestCase() {
        doReturn(false).whenever(mockResources).getBoolean(
            eq(R.bool.config_isDesktopModeDevOptionSupported)
        )
        setDeviceEligibleForDesktopMode(false)
        doReturn(context.contentResolver).whenever(mockContext).contentResolver
        resetDesktopModeFlagsCache()
        resetEnforceDeviceRestriction()
@@ -140,8 +140,10 @@ class DesktopModeStatusTest : ShellTestCase() {
        assertThat(DesktopModeStatus.canEnterDesktopMode(mockContext)).isTrue()
    }

    @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_MODE_THROUGH_DEV_OPTION)
    @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
    @EnableFlags(
        Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
        Flags.FLAG_ENABLE_DESKTOP_MODE_THROUGH_DEV_OPTION
    )
    @Test
    fun canEnterDesktopMode_DWFlagEnabled_deviceNotEligible_forceUsingDevOption_returnsTrue() {
        doReturn(true).whenever(mockResources).getBoolean(
@@ -170,12 +172,12 @@ class DesktopModeStatusTest : ShellTestCase() {

    @DisableFlags(Flags.FLAG_ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE)
    @Test
    fun isDeviceEligibleForDesktopMode_configDEModeOnAndIntDispHostsDesktopOff_returnsFalse() {
    fun isDeviceEligibleForDesktopMode_configDEModeOnAndIntDispHostsDesktopOff_returnsTrue() {
        doReturn(true).whenever(mockResources).getBoolean(eq(R.bool.config_isDesktopModeSupported))
        doReturn(false).whenever(mockResources)
            .getBoolean(eq(R.bool.config_canInternalDisplayHostDesktops))

        assertThat(DesktopModeStatus.isDeviceEligibleForDesktopMode(mockContext)).isFalse()
        assertThat(DesktopModeStatus.isDeviceEligibleForDesktopMode(mockContext)).isTrue()
    }

    @EnableFlags(Flags.FLAG_ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE)
@@ -247,23 +249,36 @@ class DesktopModeStatusTest : ShellTestCase() {
    }

    private fun resetDesktopModeFlagsCache() {
        val cachedToggleOverride =
        // Toggle override cache for DesktopModeFlags
        val cachedToggleOverride1 =
            DesktopModeFlags::class.java.getDeclaredField("sCachedToggleOverride")
        cachedToggleOverride.isAccessible = true
        cachedToggleOverride.set(null, null)
        cachedToggleOverride1.isAccessible = true
        cachedToggleOverride1.set(null, DesktopModeFlags.ToggleOverride.OVERRIDE_OFF)

        // Toggle override cache for DesktopExperienceFlags
        val cachedToggleOverride2 =
            DesktopExperienceFlags::class.java.getDeclaredField("sCachedToggleOverride")
        cachedToggleOverride2.isAccessible = true
        cachedToggleOverride2.set(null, false)
    }

    private fun setFlagOverride(override: DesktopModeFlags.ToggleOverride) {
        val cachedToggleOverride =
        // Toggle override cache for DesktopModeFlags can be on/off/unset
        val cachedToggleOverride1 =
            DesktopModeFlags::class.java.getDeclaredField("sCachedToggleOverride")
        cachedToggleOverride.isAccessible = true
        cachedToggleOverride.set(null, override)
        cachedToggleOverride1.isAccessible = true
        cachedToggleOverride1.set(null, override)

        // Toggle override cache for DesktopExperienceFlags can be true or false
        val cachedToggleOverride2 =
            DesktopExperienceFlags::class.java.getDeclaredField("sCachedToggleOverride")
        cachedToggleOverride2.isAccessible = true
        cachedToggleOverride2.set(null, override == DesktopModeFlags.ToggleOverride.OVERRIDE_ON)
    }

    private fun setDeviceEligibleForDesktopMode(eligible: Boolean) {
        val deviceRestrictions = DesktopModeStatus::class.java.getDeclaredField("ENFORCE_DEVICE_RESTRICTIONS")
        deviceRestrictions.isAccessible = true
        deviceRestrictions.setBoolean(/* obj= */ null, /* z= */ !eligible)
        doReturn(eligible).whenever(mockResources)
            .getBoolean(eq(R.bool.config_isDesktopModeSupported))
    }

    private fun setIsVeiledResizeEnabled(enabled: Boolean) {
Loading