Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3fca0e5 authored by Florence Yang's avatar Florence Yang Committed by Android (Google) Code Review
Browse files

Merge "LS Wallpaper Sampling for Clock" into udc-qpr-dev

parents 59fc3204 5f650d4d
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -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()
    }
    }


+58 −34
Original line number Original line Diff line number Diff line
@@ -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
                        clock.largeClock.events.onRegionDarknessChanged(largeClockIsDark)
                        return@updateColors
                }
                }

                largeRegionSampler?.let {
                    largeClockIsDark = it.currentRegionDarkness().isDark
                    clock.largeClock.events.onRegionDarknessChanged(largeClockIsDark)
                }
                }
            }
            }
            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()
    }
    }
+7 −3
Original line number Original line Diff line number Diff line
@@ -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);
        }
        }
    }
    }


+3 −3
Original line number Original line Diff line number Diff line
@@ -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))