diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/regionsampling/RegionSampler.kt b/packages/SystemUI/shared/src/com/android/systemui/shared/regionsampling/RegionSampler.kt index 9a00447615049..0ca2f7a363112 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/regionsampling/RegionSampler.kt +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/regionsampling/RegionSampler.kt @@ -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() } diff --git a/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt b/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt index 8ea4c31a5ac94..84a2c25999a05 100644 --- a/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt +++ b/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt @@ -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 @@ -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() @@ -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?) { @@ -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 - 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 - } + clock?.let { clock -> + smallRegionSampler?.let { + smallClockIsDark = it.currentRegionDarkness().isDark + clock.smallClock.events.onRegionDarknessChanged(smallClockIsDark) + } + + largeRegionSampler?.let { + largeClockIsDark = it.currentRegionDarkness().isDark + clock.largeClock.events.onRegionDarknessChanged(largeClockIsDark) } } + return } val isLightTheme = TypedValue() @@ -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?, @@ -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 @@ -319,7 +342,8 @@ constructor( configurationController.removeCallback(configListener) batteryController.removeCallback(batteryCallback) keyguardUpdateMonitor.removeCallback(keyguardUpdateMonitorCallback) - regionSampler?.stopRegionSampler() + smallRegionSampler?.stopRegionSampler() + largeRegionSampler?.stopRegionSampler() smallTimeListener?.stop() largeTimeListener?.stop() } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java index 8f17edd23f55c..25ad3af52d04f 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java @@ -531,9 +531,13 @@ public class KeyguardClockSwitchController extends ViewController() verify(configurationController).addCallback(capture(captor))