Loading packages/SystemUI/shared/src/com/android/systemui/shared/regionsampling/RegionSampler.kt +2 −0 Original line number Diff line number Diff line Loading @@ -263,6 +263,8 @@ constructor( (colors?.colorHints?.and(WallpaperColors.HINT_SUPPORTS_DARK_TEXT)) != WallpaperColors.HINT_SUPPORTS_DARK_TEXT ) if (DEBUG) Log.d(TAG, "onColorsChanged() | region darkness = $regionDarkness for region $area") updateForegroundColor() } Loading packages/SystemUI/src/com/android/keyguard/ClockEventController.kt +58 −34 Original line number Diff line number Diff line Loading @@ -15,18 +15,18 @@ */ package com.android.keyguard import android.app.WallpaperManager import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.content.res.Resources import android.text.format.DateFormat import android.util.TypedValue import android.util.Log import android.util.TypedValue import android.view.View import android.view.View.OnAttachStateChangeListener import android.view.ViewTreeObserver import android.widget.FrameLayout import androidx.annotation.VisibleForTesting import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle Loading Loading @@ -99,6 +99,28 @@ constructor( if (!regionSamplingEnabled) { 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() updateTimeListeners() Loading @@ -110,8 +132,25 @@ constructor( } value.smallClock.view.addOnAttachStateChangeListener( object : OnAttachStateChangeListener { override fun onViewAttachedToWindow(p0: View?) { var pastVisibility: Int? = null override fun onViewAttachedToWindow(view: View?) { 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?) { Loading Loading @@ -141,21 +180,19 @@ constructor( private fun updateColors() { val wallpaperManager = WallpaperManager.getInstance(context) if (regionSamplingEnabled) { regionSampler?.let { regionSampler -> clock?.let { clock -> if (regionSampler.sampledView == clock.smallClock.view) { smallClockIsDark = regionSampler.currentRegionDarkness().isDark smallRegionSampler?.let { smallClockIsDark = it.currentRegionDarkness().isDark clock.smallClock.events.onRegionDarknessChanged(smallClockIsDark) return@updateColors } else if (regionSampler.sampledView == clock.largeClock.view) { largeClockIsDark = regionSampler.currentRegionDarkness().isDark clock.largeClock.events.onRegionDarknessChanged(largeClockIsDark) return@updateColors } largeRegionSampler?.let { largeClockIsDark = it.currentRegionDarkness().isDark clock.largeClock.events.onRegionDarknessChanged(largeClockIsDark) } } return } val isLightTheme = TypedValue() Loading @@ -168,23 +205,6 @@ constructor( 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( sampledView: View, mainExecutor: Executor?, Loading @@ -202,7 +222,10 @@ constructor( ) { updateColors() } } var regionSampler: RegionSampler? = null var smallRegionSampler: RegionSampler? = null private set var largeRegionSampler: RegionSampler? = null private set var smallTimeListener: TimeListener? = null var largeTimeListener: TimeListener? = null val shouldTimeListenerRun: Boolean Loading Loading @@ -319,7 +342,8 @@ constructor( configurationController.removeCallback(configListener) batteryController.removeCallback(batteryCallback) keyguardUpdateMonitor.removeCallback(keyguardUpdateMonitorCallback) regionSampler?.stopRegionSampler() smallRegionSampler?.stopRegionSampler() largeRegionSampler?.stopRegionSampler() smallTimeListener?.stop() largeTimeListener?.stop() } Loading packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +7 −3 Original line number Diff line number Diff line Loading @@ -531,9 +531,13 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS if (clock != null) { clock.dump(pw); } final RegionSampler regionSampler = mClockEventController.getRegionSampler(); if (regionSampler != null) { regionSampler.dump(pw); final RegionSampler smallRegionSampler = mClockEventController.getSmallRegionSampler(); if (smallRegionSampler != null) { smallRegionSampler.dump(pw); } final RegionSampler largeRegionSampler = mClockEventController.getLargeRegionSampler(); if (largeRegionSampler != null) { largeRegionSampler.dump(pw); } } Loading packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt +3 −3 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyBoolean import org.mockito.ArgumentMatchers.anyFloat import org.mockito.ArgumentMatchers.anyInt import org.mockito.Mock Loading Loading @@ -157,9 +158,8 @@ class ClockEventControllerTest : SysuiTestCase() { @Test fun themeChanged_verifyClockPaletteUpdated() = runBlocking(IMMEDIATE) { // TODO(b/266103601): delete this test and add more coverage for updateColors() // verify(smallClockEvents).onRegionDarknessChanged(anyBoolean()) // verify(largeClockEvents).onRegionDarknessChanged(anyBoolean()) verify(smallClockEvents).onRegionDarknessChanged(anyBoolean()) verify(largeClockEvents).onRegionDarknessChanged(anyBoolean()) val captor = argumentCaptor<ConfigurationController.ConfigurationListener>() verify(configurationController).addCallback(capture(captor)) Loading Loading
packages/SystemUI/shared/src/com/android/systemui/shared/regionsampling/RegionSampler.kt +2 −0 Original line number Diff line number Diff line Loading @@ -263,6 +263,8 @@ constructor( (colors?.colorHints?.and(WallpaperColors.HINT_SUPPORTS_DARK_TEXT)) != WallpaperColors.HINT_SUPPORTS_DARK_TEXT ) if (DEBUG) Log.d(TAG, "onColorsChanged() | region darkness = $regionDarkness for region $area") updateForegroundColor() } Loading
packages/SystemUI/src/com/android/keyguard/ClockEventController.kt +58 −34 Original line number Diff line number Diff line Loading @@ -15,18 +15,18 @@ */ package com.android.keyguard import android.app.WallpaperManager import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.content.res.Resources import android.text.format.DateFormat import android.util.TypedValue import android.util.Log import android.util.TypedValue import android.view.View import android.view.View.OnAttachStateChangeListener import android.view.ViewTreeObserver import android.widget.FrameLayout import androidx.annotation.VisibleForTesting import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle Loading Loading @@ -99,6 +99,28 @@ constructor( if (!regionSamplingEnabled) { 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() updateTimeListeners() Loading @@ -110,8 +132,25 @@ constructor( } value.smallClock.view.addOnAttachStateChangeListener( object : OnAttachStateChangeListener { override fun onViewAttachedToWindow(p0: View?) { var pastVisibility: Int? = null override fun onViewAttachedToWindow(view: View?) { 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?) { Loading Loading @@ -141,21 +180,19 @@ constructor( private fun updateColors() { val wallpaperManager = WallpaperManager.getInstance(context) if (regionSamplingEnabled) { regionSampler?.let { regionSampler -> clock?.let { clock -> if (regionSampler.sampledView == clock.smallClock.view) { smallClockIsDark = regionSampler.currentRegionDarkness().isDark smallRegionSampler?.let { smallClockIsDark = it.currentRegionDarkness().isDark clock.smallClock.events.onRegionDarknessChanged(smallClockIsDark) return@updateColors } else if (regionSampler.sampledView == clock.largeClock.view) { largeClockIsDark = regionSampler.currentRegionDarkness().isDark clock.largeClock.events.onRegionDarknessChanged(largeClockIsDark) return@updateColors } largeRegionSampler?.let { largeClockIsDark = it.currentRegionDarkness().isDark clock.largeClock.events.onRegionDarknessChanged(largeClockIsDark) } } return } val isLightTheme = TypedValue() Loading @@ -168,23 +205,6 @@ constructor( 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( sampledView: View, mainExecutor: Executor?, Loading @@ -202,7 +222,10 @@ constructor( ) { updateColors() } } var regionSampler: RegionSampler? = null var smallRegionSampler: RegionSampler? = null private set var largeRegionSampler: RegionSampler? = null private set var smallTimeListener: TimeListener? = null var largeTimeListener: TimeListener? = null val shouldTimeListenerRun: Boolean Loading Loading @@ -319,7 +342,8 @@ constructor( configurationController.removeCallback(configListener) batteryController.removeCallback(batteryCallback) keyguardUpdateMonitor.removeCallback(keyguardUpdateMonitorCallback) regionSampler?.stopRegionSampler() smallRegionSampler?.stopRegionSampler() largeRegionSampler?.stopRegionSampler() smallTimeListener?.stop() largeTimeListener?.stop() } Loading
packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +7 −3 Original line number Diff line number Diff line Loading @@ -531,9 +531,13 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS if (clock != null) { clock.dump(pw); } final RegionSampler regionSampler = mClockEventController.getRegionSampler(); if (regionSampler != null) { regionSampler.dump(pw); final RegionSampler smallRegionSampler = mClockEventController.getSmallRegionSampler(); if (smallRegionSampler != null) { smallRegionSampler.dump(pw); } final RegionSampler largeRegionSampler = mClockEventController.getLargeRegionSampler(); if (largeRegionSampler != null) { largeRegionSampler.dump(pw); } } Loading
packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt +3 −3 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyBoolean import org.mockito.ArgumentMatchers.anyFloat import org.mockito.ArgumentMatchers.anyInt import org.mockito.Mock Loading Loading @@ -157,9 +158,8 @@ class ClockEventControllerTest : SysuiTestCase() { @Test fun themeChanged_verifyClockPaletteUpdated() = runBlocking(IMMEDIATE) { // TODO(b/266103601): delete this test and add more coverage for updateColors() // verify(smallClockEvents).onRegionDarknessChanged(anyBoolean()) // verify(largeClockEvents).onRegionDarknessChanged(anyBoolean()) verify(smallClockEvents).onRegionDarknessChanged(anyBoolean()) verify(largeClockEvents).onRegionDarknessChanged(anyBoolean()) val captor = argumentCaptor<ConfigurationController.ConfigurationListener>() verify(configurationController).addCallback(capture(captor)) Loading