diff options
| author | 2022-08-11 15:06:09 +0000 | |
|---|---|---|
| committer | 2022-08-11 15:06:09 +0000 | |
| commit | 3fe81e51621a3a90d062aba363853130b4c2a465 (patch) | |
| tree | 9482358889e8f39af657d072a91320d2f1730638 | |
| parent | d2b278821f937c12c946e110bb511d3a11fb57be (diff) | |
| parent | fbb2368eb00e8a4d627a49fbe762cf29994fa35c (diff) | |
Merge "[Letterbox][Status Bar] Re-fetch background info on wallpaper changes" into tm-qpr-dev am: 6ac23a11f9 am: fbb2368eb0
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19582311
Change-Id: If2c67029cf9c022b524523fbc06bb58bd6a6dc13
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2 files changed, 74 insertions, 1 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProvider.kt index 96b9aca9c64c..276375004f76 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProvider.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProvider.kt @@ -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>) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProviderTest.kt index 44325dddd111..a2828d33375b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProviderTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProviderTest.kt @@ -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 @@ -76,6 +109,31 @@ class LetterboxBackgroundProviderTest : SysuiTestCase() { } @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) } |