Merge "LS Wallpaper Sampling for Clock" into udc-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
e3fca0e525
@@ -263,6 +263,8 @@ constructor(
|
|||||||
(colors?.colorHints?.and(WallpaperColors.HINT_SUPPORTS_DARK_TEXT)) !=
|
(colors?.colorHints?.and(WallpaperColors.HINT_SUPPORTS_DARK_TEXT)) !=
|
||||||
WallpaperColors.HINT_SUPPORTS_DARK_TEXT
|
WallpaperColors.HINT_SUPPORTS_DARK_TEXT
|
||||||
)
|
)
|
||||||
|
if (DEBUG)
|
||||||
|
Log.d(TAG, "onColorsChanged() | region darkness = $regionDarkness for region $area")
|
||||||
updateForegroundColor()
|
updateForegroundColor()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,18 +15,18 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.keyguard
|
package com.android.keyguard
|
||||||
|
|
||||||
import android.app.WallpaperManager
|
|
||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.text.format.DateFormat
|
import android.text.format.DateFormat
|
||||||
import android.util.TypedValue
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import android.util.TypedValue
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.View.OnAttachStateChangeListener
|
import android.view.View.OnAttachStateChangeListener
|
||||||
import android.view.ViewTreeObserver
|
import android.view.ViewTreeObserver
|
||||||
|
import android.widget.FrameLayout
|
||||||
import androidx.annotation.VisibleForTesting
|
import androidx.annotation.VisibleForTesting
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.repeatOnLifecycle
|
import androidx.lifecycle.repeatOnLifecycle
|
||||||
@@ -99,6 +99,28 @@ constructor(
|
|||||||
|
|
||||||
if (!regionSamplingEnabled) {
|
if (!regionSamplingEnabled) {
|
||||||
updateColors()
|
updateColors()
|
||||||
|
} else {
|
||||||
|
clock?.let {
|
||||||
|
smallRegionSampler = createRegionSampler(
|
||||||
|
it.smallClock.view,
|
||||||
|
mainExecutor,
|
||||||
|
bgExecutor,
|
||||||
|
regionSamplingEnabled,
|
||||||
|
isLockscreen = true,
|
||||||
|
::updateColors
|
||||||
|
)?.apply { startRegionSampler() }
|
||||||
|
|
||||||
|
largeRegionSampler = createRegionSampler(
|
||||||
|
it.largeClock.view,
|
||||||
|
mainExecutor,
|
||||||
|
bgExecutor,
|
||||||
|
regionSamplingEnabled,
|
||||||
|
isLockscreen = true,
|
||||||
|
::updateColors
|
||||||
|
)?.apply { startRegionSampler() }
|
||||||
|
|
||||||
|
updateColors()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
updateFontSizes()
|
updateFontSizes()
|
||||||
updateTimeListeners()
|
updateTimeListeners()
|
||||||
@@ -110,8 +132,25 @@ constructor(
|
|||||||
}
|
}
|
||||||
value.smallClock.view.addOnAttachStateChangeListener(
|
value.smallClock.view.addOnAttachStateChangeListener(
|
||||||
object : OnAttachStateChangeListener {
|
object : OnAttachStateChangeListener {
|
||||||
override fun onViewAttachedToWindow(p0: View?) {
|
var pastVisibility: Int? = null
|
||||||
|
override fun onViewAttachedToWindow(view: View?) {
|
||||||
value.events.onTimeFormatChanged(DateFormat.is24HourFormat(context))
|
value.events.onTimeFormatChanged(DateFormat.is24HourFormat(context))
|
||||||
|
if (view != null) {
|
||||||
|
val smallClockFrame = view.parent as FrameLayout
|
||||||
|
pastVisibility = smallClockFrame.visibility
|
||||||
|
smallClockFrame.viewTreeObserver.addOnGlobalLayoutListener(
|
||||||
|
ViewTreeObserver.OnGlobalLayoutListener {
|
||||||
|
val currentVisibility = smallClockFrame.visibility
|
||||||
|
if (pastVisibility != currentVisibility) {
|
||||||
|
pastVisibility = currentVisibility
|
||||||
|
// when small clock visible, recalculate bounds and sample
|
||||||
|
if (currentVisibility == View.VISIBLE) {
|
||||||
|
smallRegionSampler?.stopRegionSampler()
|
||||||
|
smallRegionSampler?.startRegionSampler()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewDetachedFromWindow(p0: View?) {
|
override fun onViewDetachedFromWindow(p0: View?) {
|
||||||
@@ -141,21 +180,19 @@ constructor(
|
|||||||
|
|
||||||
|
|
||||||
private fun updateColors() {
|
private fun updateColors() {
|
||||||
val wallpaperManager = WallpaperManager.getInstance(context)
|
|
||||||
if (regionSamplingEnabled) {
|
if (regionSamplingEnabled) {
|
||||||
regionSampler?.let { regionSampler ->
|
|
||||||
clock?.let { clock ->
|
clock?.let { clock ->
|
||||||
if (regionSampler.sampledView == clock.smallClock.view) {
|
smallRegionSampler?.let {
|
||||||
smallClockIsDark = regionSampler.currentRegionDarkness().isDark
|
smallClockIsDark = it.currentRegionDarkness().isDark
|
||||||
clock.smallClock.events.onRegionDarknessChanged(smallClockIsDark)
|
clock.smallClock.events.onRegionDarknessChanged(smallClockIsDark)
|
||||||
return@updateColors
|
}
|
||||||
} else if (regionSampler.sampledView == clock.largeClock.view) {
|
|
||||||
largeClockIsDark = regionSampler.currentRegionDarkness().isDark
|
largeRegionSampler?.let {
|
||||||
|
largeClockIsDark = it.currentRegionDarkness().isDark
|
||||||
clock.largeClock.events.onRegionDarknessChanged(largeClockIsDark)
|
clock.largeClock.events.onRegionDarknessChanged(largeClockIsDark)
|
||||||
return@updateColors
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val isLightTheme = TypedValue()
|
val isLightTheme = TypedValue()
|
||||||
@@ -168,23 +205,6 @@ constructor(
|
|||||||
largeClock.events.onRegionDarknessChanged(largeClockIsDark)
|
largeClock.events.onRegionDarknessChanged(largeClockIsDark)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateRegionSampler(sampledRegion: View) {
|
|
||||||
regionSampler?.stopRegionSampler()
|
|
||||||
regionSampler =
|
|
||||||
createRegionSampler(
|
|
||||||
sampledRegion,
|
|
||||||
mainExecutor,
|
|
||||||
bgExecutor,
|
|
||||||
regionSamplingEnabled,
|
|
||||||
isLockscreen = true,
|
|
||||||
::updateColors
|
|
||||||
)
|
|
||||||
?.apply { startRegionSampler() }
|
|
||||||
|
|
||||||
updateColors()
|
|
||||||
}
|
|
||||||
|
|
||||||
protected open fun createRegionSampler(
|
protected open fun createRegionSampler(
|
||||||
sampledView: View,
|
sampledView: View,
|
||||||
mainExecutor: Executor?,
|
mainExecutor: Executor?,
|
||||||
@@ -202,7 +222,10 @@ constructor(
|
|||||||
) { updateColors() }
|
) { updateColors() }
|
||||||
}
|
}
|
||||||
|
|
||||||
var regionSampler: RegionSampler? = null
|
var smallRegionSampler: RegionSampler? = null
|
||||||
|
private set
|
||||||
|
var largeRegionSampler: RegionSampler? = null
|
||||||
|
private set
|
||||||
var smallTimeListener: TimeListener? = null
|
var smallTimeListener: TimeListener? = null
|
||||||
var largeTimeListener: TimeListener? = null
|
var largeTimeListener: TimeListener? = null
|
||||||
val shouldTimeListenerRun: Boolean
|
val shouldTimeListenerRun: Boolean
|
||||||
@@ -319,7 +342,8 @@ constructor(
|
|||||||
configurationController.removeCallback(configListener)
|
configurationController.removeCallback(configListener)
|
||||||
batteryController.removeCallback(batteryCallback)
|
batteryController.removeCallback(batteryCallback)
|
||||||
keyguardUpdateMonitor.removeCallback(keyguardUpdateMonitorCallback)
|
keyguardUpdateMonitor.removeCallback(keyguardUpdateMonitorCallback)
|
||||||
regionSampler?.stopRegionSampler()
|
smallRegionSampler?.stopRegionSampler()
|
||||||
|
largeRegionSampler?.stopRegionSampler()
|
||||||
smallTimeListener?.stop()
|
smallTimeListener?.stop()
|
||||||
largeTimeListener?.stop()
|
largeTimeListener?.stop()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -531,9 +531,13 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
|
|||||||
if (clock != null) {
|
if (clock != null) {
|
||||||
clock.dump(pw);
|
clock.dump(pw);
|
||||||
}
|
}
|
||||||
final RegionSampler regionSampler = mClockEventController.getRegionSampler();
|
final RegionSampler smallRegionSampler = mClockEventController.getSmallRegionSampler();
|
||||||
if (regionSampler != null) {
|
if (smallRegionSampler != null) {
|
||||||
regionSampler.dump(pw);
|
smallRegionSampler.dump(pw);
|
||||||
|
}
|
||||||
|
final RegionSampler largeRegionSampler = mClockEventController.getLargeRegionSampler();
|
||||||
|
if (largeRegionSampler != null) {
|
||||||
|
largeRegionSampler.dump(pw);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ import org.junit.Before
|
|||||||
import org.junit.Rule
|
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.ArgumentMatchers.anyBoolean
|
||||||
import org.mockito.ArgumentMatchers.anyFloat
|
import org.mockito.ArgumentMatchers.anyFloat
|
||||||
import org.mockito.ArgumentMatchers.anyInt
|
import org.mockito.ArgumentMatchers.anyInt
|
||||||
import org.mockito.Mock
|
import org.mockito.Mock
|
||||||
@@ -157,9 +158,8 @@ class ClockEventControllerTest : SysuiTestCase() {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun themeChanged_verifyClockPaletteUpdated() = runBlocking(IMMEDIATE) {
|
fun themeChanged_verifyClockPaletteUpdated() = runBlocking(IMMEDIATE) {
|
||||||
// TODO(b/266103601): delete this test and add more coverage for updateColors()
|
verify(smallClockEvents).onRegionDarknessChanged(anyBoolean())
|
||||||
// verify(smallClockEvents).onRegionDarknessChanged(anyBoolean())
|
verify(largeClockEvents).onRegionDarknessChanged(anyBoolean())
|
||||||
// verify(largeClockEvents).onRegionDarknessChanged(anyBoolean())
|
|
||||||
|
|
||||||
val captor = argumentCaptor<ConfigurationController.ConfigurationListener>()
|
val captor = argumentCaptor<ConfigurationController.ConfigurationListener>()
|
||||||
verify(configurationController).addCallback(capture(captor))
|
verify(configurationController).addCallback(capture(captor))
|
||||||
|
|||||||
Reference in New Issue
Block a user