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

Commit 956f1f97 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Merge cherrypicks of ['googleplex-android-review.googlesource.com/33373294'] into 25Q3-release.

Change-Id: I5f5407ffe5295583d921a927c86f412c2db1d4c3
parents 4a4c8f41 9e021198
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

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;
@@ -215,10 +213,6 @@ 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;
+0 −2
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ 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;
@@ -68,7 +67,6 @@ import java.util.List;
@SmallTest
@Presubmit
@RunWith(ParameterizedAndroidJunit4.class)
@DisableFlags(FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT)
public class DesktopModeFlagsTest {

    @Parameters(name = "{0}")
+8 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
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;
@@ -206,10 +207,15 @@ 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 isDesktopModeSupported(context) || desktopModeSupportedByDevOptions;
        return desktopModeSupported || desktopModeSupportedByDevOptions;
    }

    /**
+21 −2
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ 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

@@ -84,9 +85,18 @@ 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 isDesktopModeSupported || desktopModeSupportedByDevOptions
            return desktopModeSupported || desktopModeSupportedByDevOptions
        }

    override val enableMultipleDesktops: Boolean =
@@ -101,9 +111,18 @@ 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
+14 −29
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ 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
@@ -58,6 +57,7 @@ class DesktopModeStatusTest : ShellTestCase() {
        doReturn(false).whenever(mockResources).getBoolean(
            eq(R.bool.config_isDesktopModeDevOptionSupported)
        )
        setDeviceEligibleForDesktopMode(false)
        doReturn(context.contentResolver).whenever(mockContext).contentResolver
        resetDesktopModeFlagsCache()
        resetEnforceDeviceRestriction()
@@ -140,10 +140,8 @@ class DesktopModeStatusTest : ShellTestCase() {
        assertThat(DesktopModeStatus.canEnterDesktopMode(mockContext)).isTrue()
    }

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

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

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

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

    private fun resetDesktopModeFlagsCache() {
        // Toggle override cache for DesktopModeFlags
        val cachedToggleOverride1 =
        val cachedToggleOverride =
            DesktopModeFlags::class.java.getDeclaredField("sCachedToggleOverride")
        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)
        cachedToggleOverride.isAccessible = true
        cachedToggleOverride.set(null, null)
    }

    private fun setFlagOverride(override: DesktopModeFlags.ToggleOverride) {
        // Toggle override cache for DesktopModeFlags can be on/off/unset
        val cachedToggleOverride1 =
        val cachedToggleOverride =
            DesktopModeFlags::class.java.getDeclaredField("sCachedToggleOverride")
        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)
        cachedToggleOverride.isAccessible = true
        cachedToggleOverride.set(null, override)
    }

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

    private fun setIsVeiledResizeEnabled(enabled: Boolean) {
Loading