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

Commit 1f1914cd authored by Matt Pietal's avatar Matt Pietal
Browse files

Support ambient aod wallpaper on foldables

Only some displays may support this, so allow an override that
systemui can use while still specifying general device support.

Fixes: 414284526
Test: atest WallpaperRepositoryImplTest
Flag: com.android.systemui.shared.ambient_aod
Change-Id: Iccef9ba747eff0c00a5f73b7fa6bd49e8aed13b9
parent 60a92520
Loading
Loading
Loading
Loading
+57 −0
Original line number Diff line number Diff line
@@ -247,6 +247,63 @@ class WallpaperRepositoryImplTest : SysuiTestCase() {
            assertThat(latest).isFalse()
        }

    @Test
    @EnableFlags(SharedFlags.FLAG_AMBIENT_AOD)
    fun wallpaperSupportsAmbientMode_sysuiOverrideFalse_deviceDoesSupport_false() =
        testScope.runTest {
            underTest = kosmos.wallpaperRepository
            secureSettings.putInt(Settings.Secure.DOZE_ALWAYS_ON_WALLPAPER_ENABLED, 1)
            context.orCreateTestableResources.addOverride(
                R.bool.config_dozeSupportsAodWallpaper,
                true,
            )
            context.orCreateTestableResources.addOverride(
                SysUIR.integer.config_dozeSupportsAodWallpaperOverride,
                0,
            )

            val latest by collectLastValue(underTest.wallpaperSupportsAmbientMode)
            assertThat(latest).isFalse()
        }

    @Test
    @EnableFlags(SharedFlags.FLAG_AMBIENT_AOD)
    fun wallpaperSupportsAmbientMode_sysuiOverrideTrue_deviceDoesSupport_true() =
        testScope.runTest {
            underTest = kosmos.wallpaperRepository
            secureSettings.putInt(Settings.Secure.DOZE_ALWAYS_ON_WALLPAPER_ENABLED, 1)
            context.orCreateTestableResources.addOverride(
                R.bool.config_dozeSupportsAodWallpaper,
                true,
            )
            context.orCreateTestableResources.addOverride(
                SysUIR.integer.config_dozeSupportsAodWallpaperOverride,
                1,
            )

            val latest by collectLastValue(underTest.wallpaperSupportsAmbientMode)
            assertThat(latest).isTrue()
        }

    @Test
    @EnableFlags(SharedFlags.FLAG_AMBIENT_AOD)
    fun wallpaperSupportsAmbientMode_sysuiOverrideNull_deviceDoesSupport_true() =
        testScope.runTest {
            underTest = kosmos.wallpaperRepository
            secureSettings.putInt(Settings.Secure.DOZE_ALWAYS_ON_WALLPAPER_ENABLED, 1)
            context.orCreateTestableResources.addOverride(
                R.bool.config_dozeSupportsAodWallpaper,
                true,
            )
            context.orCreateTestableResources.addOverride(
                SysUIR.integer.config_dozeSupportsAodWallpaperOverride,
                -1,
            )

            val latest by collectLastValue(underTest.wallpaperSupportsAmbientMode)
            assertThat(latest).isTrue()
        }

    @Test
    @EnableFlags(SharedFlags.FLAG_AMBIENT_AOD)
    fun wallpaperSupportsAmbientMode_deviceDoesSupport_true() =
+3 −0
Original line number Diff line number Diff line
@@ -1128,4 +1128,7 @@

    <!-- Whether to enable the desktop specific audio tile details view. -->
    <bool name="config_enableDesktopAudioTileDetailsView">false</bool>

    <!-- If AOD can show an ambient version of the wallpaper (-1 means ignore) -->
    <integer name="config_dozeSupportsAodWallpaperOverride">-1</integer>
</resources>
+16 −3
Original line number Diff line number Diff line
@@ -134,9 +134,7 @@ constructor(
            .map {
                val userEnabled =
                    secureSettings.getInt(Settings.Secure.DOZE_ALWAYS_ON_WALLPAPER_ENABLED, 1) == 1
                userEnabled &&
                    context.resources.getBoolean(R.bool.config_dozeSupportsAodWallpaper) &&
                    ambientAod()
                userEnabled && configEnabled() && ambientAod()
            }
            .flowOn(bgDispatcher)

@@ -197,6 +195,21 @@ constructor(
                initialValue = extendedWallpaperEffects(),
            )

    private fun configEnabled(): Boolean {
        // Some devices like foldables may only support AOD wallpaper on one screen. The override
        // config adds the ability to specify general device support but allow per screen config
        val sysuiOverride =
            when (
                context.resources.getInteger(SysUIR.integer.config_dozeSupportsAodWallpaperOverride)
            ) {
                0 -> false
                1 -> true
                else -> null
            }
        return if (sysuiOverride != null) sysuiOverride
        else context.resources.getBoolean(R.bool.config_dozeSupportsAodWallpaper)
    }

    private suspend fun getWallpaper(
        selectedUser: SelectedUserModel,
        which: Int = FLAG_SYSTEM,