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

Commit e64c75c5 authored by Florence Yang's avatar Florence Yang Committed by Automerger Merge Worker
Browse files

Merge "LS Wallpaper Sampling for Clock" into udc-qpr-dev am: e3fca0e5 am: 8bd0d421

parents 4e5a997f 8bd0d421
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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()
    }

+58 −34
Original line number Diff line number Diff line
@@ -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
                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()
@@ -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()
    }
+7 −3
Original line number Diff line number Diff line
@@ -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);
        }
    }

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