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

Commit fbb2368e authored by Christian Göllner's avatar Christian Göllner Committed by Automerger Merge Worker
Browse files

Merge "[Letterbox][Status Bar] Re-fetch background info on wallpaper changes"...

Merge "[Letterbox][Status Bar] Re-fetch background info on wallpaper changes" into tm-qpr-dev am: 6ac23a11

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19582311



Change-Id: Ie9c3909cfbc8d8b4ab61c3d41fab466b7050e6bb
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 8f1930e6 6ac23a11
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -17,11 +17,14 @@
package com.android.systemui.statusbar.phone

import android.annotation.ColorInt
import android.app.WallpaperManager
import android.graphics.Color
import android.os.Handler
import android.os.RemoteException
import android.view.IWindowManager
import com.android.systemui.Dumpable
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dump.DumpManager
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope
@@ -37,6 +40,8 @@ constructor(
    private val windowManager: IWindowManager,
    @Background private val backgroundExecutor: Executor,
    private val dumpManager: DumpManager,
    private val wallpaperManager: WallpaperManager,
    @Main private val mainHandler: Handler,
) : CentralSurfacesComponent.Startable, Dumpable {

    @ColorInt
@@ -46,9 +51,18 @@ constructor(
    var isLetterboxBackgroundMultiColored: Boolean = false
        private set

    private val wallpaperColorsListener =
        WallpaperManager.OnColorsChangedListener { _, _ ->
            fetchBackgroundColorInfo()
        }

    override fun start() {
        dumpManager.registerDumpable(javaClass.simpleName, this)
        fetchBackgroundColorInfo()
        wallpaperManager.addOnColorsChangedListener(wallpaperColorsListener, mainHandler)
    }

    private fun fetchBackgroundColorInfo() {
        // Using a background executor, as binder calls to IWindowManager are blocking
        backgroundExecutor.execute {
            try {
@@ -62,6 +76,7 @@ constructor(

    override fun stop() {
        dumpManager.unregisterDumpable(javaClass.simpleName)
        wallpaperManager.removeOnColorsChangedListener(wallpaperColorsListener)
    }

    override fun dump(pw: PrintWriter, args: Array<out String>) {
+59 −1
Original line number Diff line number Diff line
@@ -16,19 +16,28 @@

package com.android.systemui.statusbar.phone

import android.app.WallpaperManager
import android.app.WallpaperManager.OnColorsChangedListener
import android.graphics.Color
import android.os.Handler
import android.os.Looper
import android.testing.AndroidTestingRunner
import android.view.IWindowManager
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.DumpManager
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Expect
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.any
import org.mockito.Mockito.doAnswer
import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations

@@ -38,17 +47,41 @@ class LetterboxBackgroundProviderTest : SysuiTestCase() {

    private val fakeSystemClock = FakeSystemClock()
    private val fakeExecutor = FakeExecutor(fakeSystemClock)
    private val mainHandler = Handler(Looper.getMainLooper())

    @get:Rule var expect: Expect = Expect.create()

    @Mock private lateinit var windowManager: IWindowManager
    @Mock private lateinit var dumpManager: DumpManager
    @Mock private lateinit var wallpaperManager: WallpaperManager

    private lateinit var provider: LetterboxBackgroundProvider

    private var wallpaperColorsListener: OnColorsChangedListener? = null

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)

        provider = LetterboxBackgroundProvider(windowManager, fakeExecutor, dumpManager)
        setUpWallpaperManager()
        provider =
            LetterboxBackgroundProvider(
                windowManager, fakeExecutor, dumpManager, wallpaperManager, mainHandler)
    }

    private fun setUpWallpaperManager() {
        doAnswer { invocation ->
                wallpaperColorsListener = invocation.arguments[0] as OnColorsChangedListener
                return@doAnswer Unit
            }
            .`when`(wallpaperManager)
            .addOnColorsChangedListener(any(), eq(mainHandler))
        doAnswer {
                wallpaperColorsListener = null
                return@doAnswer Unit
            }
            .`when`(wallpaperManager)
            .removeOnColorsChangedListener(any(OnColorsChangedListener::class.java))
    }

    @Test
@@ -75,6 +108,31 @@ class LetterboxBackgroundProviderTest : SysuiTestCase() {
        assertThat(provider.letterboxBackgroundColor).isEqualTo(Color.RED)
    }

    @Test
    fun letterboxBackgroundColor_returnsValueFromWindowManagerOnlyOnce() {
        whenever(windowManager.letterboxBackgroundColorInArgb).thenReturn(Color.RED)
        provider.start()
        fakeExecutor.runAllReady()
        expect.that(provider.letterboxBackgroundColor).isEqualTo(Color.RED)

        whenever(windowManager.letterboxBackgroundColorInArgb).thenReturn(Color.GREEN)
        fakeExecutor.runAllReady()
        expect.that(provider.letterboxBackgroundColor).isEqualTo(Color.RED)
    }

    @Test
    fun letterboxBackgroundColor_afterWallpaperChanges_returnsUpdatedColor() {
        whenever(windowManager.letterboxBackgroundColorInArgb).thenReturn(Color.RED)
        provider.start()
        fakeExecutor.runAllReady()

        whenever(windowManager.letterboxBackgroundColorInArgb).thenReturn(Color.GREEN)
        wallpaperColorsListener!!.onColorsChanged(null, 0)
        fakeExecutor.runAllReady()

        assertThat(provider.letterboxBackgroundColor).isEqualTo(Color.GREEN)
    }

    @Test
    fun isLetterboxBackgroundMultiColored_defaultValue_returnsFalse() {
        assertThat(provider.isLetterboxBackgroundMultiColored).isEqualTo(false)