Loading libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeFlags.kt +8 −3 Original line number Diff line number Diff line Loading @@ -35,7 +35,8 @@ enum class DesktopModeFlags( private val shouldOverrideByDevOption: Boolean ) { // All desktop mode related flags will be added here DESKTOP_WINDOWING_MODE(DesktopModeStatus::isDesktopModeFlagEnabled, true); DESKTOP_WINDOWING_MODE(DesktopModeStatus::isDesktopModeFlagEnabled, true), WALLPAPER_ACTIVITY(Flags::enableDesktopWindowingWallpaperActivity, true); // Local cache for toggle override, which is initialized once on its first access. It needs to be // refreshed only on reboots as overridden state takes effect on reboots. Loading @@ -52,10 +53,14 @@ enum class DesktopModeFlags( context.contentResolver == null) { flagFunction() } else { val shouldToggleBeEnabledByDefault = DesktopModeStatus.shouldDevOptionBeEnabledByDefault() when (getToggleOverride(context)) { ToggleOverride.OVERRIDE_UNSET -> flagFunction() ToggleOverride.OVERRIDE_OFF -> false ToggleOverride.OVERRIDE_ON -> true // When toggle override matches its default state, don't override flags. This helps users // reset their feature overrides. ToggleOverride.OVERRIDE_OFF -> if (shouldToggleBeEnabledByDefault) false else flagFunction() ToggleOverride.OVERRIDE_ON -> if (shouldToggleBeEnabledByDefault) flagFunction() else true } } Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/desktopmode/DesktopModeFlagsTest.kt +142 −3 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import androidx.test.filters.SmallTest import com.android.dx.mockito.inline.extended.ExtendedMockito import com.android.dx.mockito.inline.extended.StaticMockitoSession import com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE import com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY import com.android.window.flags.Flags.FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION import com.android.wm.shell.ShellTestCase import com.android.wm.shell.shared.DesktopModeStatus Loading @@ -32,6 +33,7 @@ import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.DESKTOP_WINDOWIN import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride.OVERRIDE_OFF import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride.OVERRIDE_ON import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride.OVERRIDE_UNSET import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.WALLPAPER_ACTIVITY import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Rule Loading Loading @@ -308,6 +310,138 @@ class DesktopModeFlagsTest : ShellTestCase() { .isEqualTo(OVERRIDE_UNSET.setting.toString()) } @Test @EnableFlags( FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagEnabled_overrideUnset_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_UNSET.setting) // For unset overrides, follow flag assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagEnabled_overrideUnset_featureFlagOff_returnsFalse() { setOverride(OVERRIDE_UNSET.setting) // For unset overrides, follow flag assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() } @Test @EnableFlags( FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagEnabled_overrideOn_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_ON.setting) // When toggle override matches its default state (dw flag), don't override flags assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagEnabled_overrideOn_featureFlagOff_returnFalse() { setOverride(OVERRIDE_ON.setting) // When toggle override matches its default state (dw flag), don't override flags assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() } @Test @EnableFlags( FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagEnabled_overrideOff_featureFlagOn_returnsFalse() { setOverride(OVERRIDE_OFF.setting) // Follow override if they exist, and is not equal to default toggle state (dw flag) assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagEnabled_overrideOff_featureFlagOff_returnsFalse() { setOverride(OVERRIDE_OFF.setting) // Follow override if they exist, and is not equal to default toggle state (dw flag) assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() } @Test @EnableFlags( FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) fun isEnabled_dwFlagDisabled_overrideUnset_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_UNSET.setting) // For unset overrides, follow flag assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) @DisableFlags( FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagDisabled_overrideUnset_featureFlagOff_returnsFalse() { setOverride(OVERRIDE_UNSET.setting) // For unset overrides, follow flag assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() } @Test @EnableFlags( FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) fun isEnabled_dwFlagDisabled_overrideOn_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_ON.setting) // Follow override if they exist, and is not equal to default toggle state (dw flag) assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) @DisableFlags( FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagDisabled_overrideOn_featureFlagOff_returnTrue() { setOverride(OVERRIDE_ON.setting) // Follow override if they exist, and is not equal to default toggle state (dw flag) assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() } @Test @EnableFlags( FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) fun isEnabled_dwFlagDisabled_overrideOff_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_OFF.setting) // When toggle override matches its default state (dw flag), don't override flags assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) @DisableFlags( FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagDisabled_overrideOff_featureFlagOff_returnsFalse() { setOverride(OVERRIDE_OFF.setting) // When toggle override matches its default state (dw flag), don't override flags assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() } private fun setOverride(setting: Int?) { val contentResolver = mContext.contentResolver val key = Settings.Global.DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES Loading @@ -319,10 +453,15 @@ class DesktopModeFlagsTest : ShellTestCase() { } private fun resetCache() { val cachedToggleOverride = val cachedToggleOverrideDesktopMode = DESKTOP_WINDOWING_MODE::class.java.getDeclaredField("cachedToggleOverride") cachedToggleOverride.isAccessible = true cachedToggleOverride.set(DESKTOP_WINDOWING_MODE, null) cachedToggleOverrideDesktopMode.isAccessible = true cachedToggleOverrideDesktopMode.set(DESKTOP_WINDOWING_MODE, null) val cachedToggleOverrideWallpaperActivity = WALLPAPER_ACTIVITY::class.java.getDeclaredField("cachedToggleOverride") cachedToggleOverrideWallpaperActivity.isAccessible = true cachedToggleOverrideWallpaperActivity.set(WALLPAPER_ACTIVITY, null) // Clear override cache stored in System property System.clearProperty(SYSTEM_PROPERTY_OVERRIDE_KEY) Loading Loading
libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeFlags.kt +8 −3 Original line number Diff line number Diff line Loading @@ -35,7 +35,8 @@ enum class DesktopModeFlags( private val shouldOverrideByDevOption: Boolean ) { // All desktop mode related flags will be added here DESKTOP_WINDOWING_MODE(DesktopModeStatus::isDesktopModeFlagEnabled, true); DESKTOP_WINDOWING_MODE(DesktopModeStatus::isDesktopModeFlagEnabled, true), WALLPAPER_ACTIVITY(Flags::enableDesktopWindowingWallpaperActivity, true); // Local cache for toggle override, which is initialized once on its first access. It needs to be // refreshed only on reboots as overridden state takes effect on reboots. Loading @@ -52,10 +53,14 @@ enum class DesktopModeFlags( context.contentResolver == null) { flagFunction() } else { val shouldToggleBeEnabledByDefault = DesktopModeStatus.shouldDevOptionBeEnabledByDefault() when (getToggleOverride(context)) { ToggleOverride.OVERRIDE_UNSET -> flagFunction() ToggleOverride.OVERRIDE_OFF -> false ToggleOverride.OVERRIDE_ON -> true // When toggle override matches its default state, don't override flags. This helps users // reset their feature overrides. ToggleOverride.OVERRIDE_OFF -> if (shouldToggleBeEnabledByDefault) false else flagFunction() ToggleOverride.OVERRIDE_ON -> if (shouldToggleBeEnabledByDefault) flagFunction() else true } } Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/desktopmode/DesktopModeFlagsTest.kt +142 −3 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import androidx.test.filters.SmallTest import com.android.dx.mockito.inline.extended.ExtendedMockito import com.android.dx.mockito.inline.extended.StaticMockitoSession import com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE import com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY import com.android.window.flags.Flags.FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION import com.android.wm.shell.ShellTestCase import com.android.wm.shell.shared.DesktopModeStatus Loading @@ -32,6 +33,7 @@ import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.DESKTOP_WINDOWIN import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride.OVERRIDE_OFF import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride.OVERRIDE_ON import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride.OVERRIDE_UNSET import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.WALLPAPER_ACTIVITY import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Rule Loading Loading @@ -308,6 +310,138 @@ class DesktopModeFlagsTest : ShellTestCase() { .isEqualTo(OVERRIDE_UNSET.setting.toString()) } @Test @EnableFlags( FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagEnabled_overrideUnset_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_UNSET.setting) // For unset overrides, follow flag assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagEnabled_overrideUnset_featureFlagOff_returnsFalse() { setOverride(OVERRIDE_UNSET.setting) // For unset overrides, follow flag assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() } @Test @EnableFlags( FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagEnabled_overrideOn_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_ON.setting) // When toggle override matches its default state (dw flag), don't override flags assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagEnabled_overrideOn_featureFlagOff_returnFalse() { setOverride(OVERRIDE_ON.setting) // When toggle override matches its default state (dw flag), don't override flags assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() } @Test @EnableFlags( FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagEnabled_overrideOff_featureFlagOn_returnsFalse() { setOverride(OVERRIDE_OFF.setting) // Follow override if they exist, and is not equal to default toggle state (dw flag) assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagEnabled_overrideOff_featureFlagOff_returnsFalse() { setOverride(OVERRIDE_OFF.setting) // Follow override if they exist, and is not equal to default toggle state (dw flag) assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() } @Test @EnableFlags( FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) fun isEnabled_dwFlagDisabled_overrideUnset_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_UNSET.setting) // For unset overrides, follow flag assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) @DisableFlags( FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagDisabled_overrideUnset_featureFlagOff_returnsFalse() { setOverride(OVERRIDE_UNSET.setting) // For unset overrides, follow flag assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() } @Test @EnableFlags( FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) fun isEnabled_dwFlagDisabled_overrideOn_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_ON.setting) // Follow override if they exist, and is not equal to default toggle state (dw flag) assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) @DisableFlags( FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagDisabled_overrideOn_featureFlagOff_returnTrue() { setOverride(OVERRIDE_ON.setting) // Follow override if they exist, and is not equal to default toggle state (dw flag) assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() } @Test @EnableFlags( FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) fun isEnabled_dwFlagDisabled_overrideOff_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_OFF.setting) // When toggle override matches its default state (dw flag), don't override flags assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) @DisableFlags( FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun isEnabled_dwFlagDisabled_overrideOff_featureFlagOff_returnsFalse() { setOverride(OVERRIDE_OFF.setting) // When toggle override matches its default state (dw flag), don't override flags assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() } private fun setOverride(setting: Int?) { val contentResolver = mContext.contentResolver val key = Settings.Global.DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES Loading @@ -319,10 +453,15 @@ class DesktopModeFlagsTest : ShellTestCase() { } private fun resetCache() { val cachedToggleOverride = val cachedToggleOverrideDesktopMode = DESKTOP_WINDOWING_MODE::class.java.getDeclaredField("cachedToggleOverride") cachedToggleOverride.isAccessible = true cachedToggleOverride.set(DESKTOP_WINDOWING_MODE, null) cachedToggleOverrideDesktopMode.isAccessible = true cachedToggleOverrideDesktopMode.set(DESKTOP_WINDOWING_MODE, null) val cachedToggleOverrideWallpaperActivity = WALLPAPER_ACTIVITY::class.java.getDeclaredField("cachedToggleOverride") cachedToggleOverrideWallpaperActivity.isAccessible = true cachedToggleOverrideWallpaperActivity.set(WALLPAPER_ACTIVITY, null) // Clear override cache stored in System property System.clearProperty(SYSTEM_PROPERTY_OVERRIDE_KEY) Loading