Merge "[Letterbox][Status Bar] Re-fetch background info on wallpaper changes" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
6ac23a11f9
@@ -17,11 +17,14 @@
|
|||||||
package com.android.systemui.statusbar.phone
|
package com.android.systemui.statusbar.phone
|
||||||
|
|
||||||
import android.annotation.ColorInt
|
import android.annotation.ColorInt
|
||||||
|
import android.app.WallpaperManager
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
|
import android.os.Handler
|
||||||
import android.os.RemoteException
|
import android.os.RemoteException
|
||||||
import android.view.IWindowManager
|
import android.view.IWindowManager
|
||||||
import com.android.systemui.Dumpable
|
import com.android.systemui.Dumpable
|
||||||
import com.android.systemui.dagger.qualifiers.Background
|
import com.android.systemui.dagger.qualifiers.Background
|
||||||
|
import com.android.systemui.dagger.qualifiers.Main
|
||||||
import com.android.systemui.dump.DumpManager
|
import com.android.systemui.dump.DumpManager
|
||||||
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent
|
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent
|
||||||
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope
|
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope
|
||||||
@@ -37,6 +40,8 @@ constructor(
|
|||||||
private val windowManager: IWindowManager,
|
private val windowManager: IWindowManager,
|
||||||
@Background private val backgroundExecutor: Executor,
|
@Background private val backgroundExecutor: Executor,
|
||||||
private val dumpManager: DumpManager,
|
private val dumpManager: DumpManager,
|
||||||
|
private val wallpaperManager: WallpaperManager,
|
||||||
|
@Main private val mainHandler: Handler,
|
||||||
) : CentralSurfacesComponent.Startable, Dumpable {
|
) : CentralSurfacesComponent.Startable, Dumpable {
|
||||||
|
|
||||||
@ColorInt
|
@ColorInt
|
||||||
@@ -46,9 +51,18 @@ constructor(
|
|||||||
var isLetterboxBackgroundMultiColored: Boolean = false
|
var isLetterboxBackgroundMultiColored: Boolean = false
|
||||||
private set
|
private set
|
||||||
|
|
||||||
|
private val wallpaperColorsListener =
|
||||||
|
WallpaperManager.OnColorsChangedListener { _, _ ->
|
||||||
|
fetchBackgroundColorInfo()
|
||||||
|
}
|
||||||
|
|
||||||
override fun start() {
|
override fun start() {
|
||||||
dumpManager.registerDumpable(javaClass.simpleName, this)
|
dumpManager.registerDumpable(javaClass.simpleName, this)
|
||||||
|
fetchBackgroundColorInfo()
|
||||||
|
wallpaperManager.addOnColorsChangedListener(wallpaperColorsListener, mainHandler)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun fetchBackgroundColorInfo() {
|
||||||
// Using a background executor, as binder calls to IWindowManager are blocking
|
// Using a background executor, as binder calls to IWindowManager are blocking
|
||||||
backgroundExecutor.execute {
|
backgroundExecutor.execute {
|
||||||
try {
|
try {
|
||||||
@@ -62,6 +76,7 @@ constructor(
|
|||||||
|
|
||||||
override fun stop() {
|
override fun stop() {
|
||||||
dumpManager.unregisterDumpable(javaClass.simpleName)
|
dumpManager.unregisterDumpable(javaClass.simpleName)
|
||||||
|
wallpaperManager.removeOnColorsChangedListener(wallpaperColorsListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun dump(pw: PrintWriter, args: Array<out String>) {
|
override fun dump(pw: PrintWriter, args: Array<out String>) {
|
||||||
|
|||||||
@@ -16,19 +16,28 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar.phone
|
package com.android.systemui.statusbar.phone
|
||||||
|
|
||||||
|
import android.app.WallpaperManager
|
||||||
|
import android.app.WallpaperManager.OnColorsChangedListener
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
|
import android.os.Handler
|
||||||
|
import android.os.Looper
|
||||||
import android.testing.AndroidTestingRunner
|
import android.testing.AndroidTestingRunner
|
||||||
import android.view.IWindowManager
|
import android.view.IWindowManager
|
||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.dump.DumpManager
|
import com.android.systemui.dump.DumpManager
|
||||||
import com.android.systemui.util.concurrency.FakeExecutor
|
import com.android.systemui.util.concurrency.FakeExecutor
|
||||||
|
import com.android.systemui.util.mockito.eq
|
||||||
import com.android.systemui.util.time.FakeSystemClock
|
import com.android.systemui.util.time.FakeSystemClock
|
||||||
|
import com.google.common.truth.Expect
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
|
import org.junit.Rule
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
import org.mockito.Mock
|
import org.mockito.Mock
|
||||||
|
import org.mockito.Mockito.any
|
||||||
|
import org.mockito.Mockito.doAnswer
|
||||||
import org.mockito.Mockito.`when` as whenever
|
import org.mockito.Mockito.`when` as whenever
|
||||||
import org.mockito.MockitoAnnotations
|
import org.mockito.MockitoAnnotations
|
||||||
|
|
||||||
@@ -38,17 +47,41 @@ class LetterboxBackgroundProviderTest : SysuiTestCase() {
|
|||||||
|
|
||||||
private val fakeSystemClock = FakeSystemClock()
|
private val fakeSystemClock = FakeSystemClock()
|
||||||
private val fakeExecutor = FakeExecutor(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 windowManager: IWindowManager
|
||||||
@Mock private lateinit var dumpManager: DumpManager
|
@Mock private lateinit var dumpManager: DumpManager
|
||||||
|
@Mock private lateinit var wallpaperManager: WallpaperManager
|
||||||
|
|
||||||
private lateinit var provider: LetterboxBackgroundProvider
|
private lateinit var provider: LetterboxBackgroundProvider
|
||||||
|
|
||||||
|
private var wallpaperColorsListener: OnColorsChangedListener? = null
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
MockitoAnnotations.initMocks(this)
|
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
|
@Test
|
||||||
@@ -75,6 +108,31 @@ class LetterboxBackgroundProviderTest : SysuiTestCase() {
|
|||||||
assertThat(provider.letterboxBackgroundColor).isEqualTo(Color.RED)
|
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
|
@Test
|
||||||
fun isLetterboxBackgroundMultiColored_defaultValue_returnsFalse() {
|
fun isLetterboxBackgroundMultiColored_defaultValue_returnsFalse() {
|
||||||
assertThat(provider.isLetterboxBackgroundMultiColored).isEqualTo(false)
|
assertThat(provider.isLetterboxBackgroundMultiColored).isEqualTo(false)
|
||||||
|
|||||||
Reference in New Issue
Block a user