Loading src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt +13 −6 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import android.view.ViewGroup import android.widget.FrameLayout import androidx.core.view.isVisible import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle Loading Loading @@ -89,13 +90,19 @@ object ClockCarouselViewBinder { } } lifecycleOwner.lifecycleScope.launch { lifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) { clockViewFactory.registerTimeTicker() lifecycleOwner.lifecycle.addObserver( LifecycleEventObserver { source, event -> when (event) { Lifecycle.Event.ON_RESUME -> { clockViewFactory.registerTimeTicker(source) } Lifecycle.Event.ON_PAUSE -> { clockViewFactory.unregisterTimeTicker(source) } // When paused clockViewFactory.unregisterTimeTicker() else -> {} } } ) return object : Binding { override fun show() { Loading src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt +13 −6 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.widget.SeekBar import androidx.core.view.isInvisible import androidx.core.view.isVisible import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle Loading Loading @@ -170,12 +171,18 @@ object ClockSettingsBinder { } } lifecycleOwner.lifecycleScope.launch { lifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) { clockViewFactory.registerTimeTicker() lifecycleOwner.lifecycle.addObserver( LifecycleEventObserver { source, event -> when (event) { Lifecycle.Event.ON_RESUME -> { clockViewFactory.registerTimeTicker(source) } Lifecycle.Event.ON_PAUSE -> { clockViewFactory.unregisterTimeTicker(source) } // When paused clockViewFactory.unregisterTimeTicker() else -> {} } } ) } } src/com/android/customization/picker/clock/ui/view/ClockViewFactory.kt +15 −5 Original line number Diff line number Diff line Loading @@ -18,18 +18,20 @@ package com.android.customization.picker.clock.ui.view import android.app.Activity import android.view.View import androidx.annotation.ColorInt import androidx.lifecycle.LifecycleOwner import com.android.systemui.plugins.ClockController import com.android.systemui.shared.clocks.ClockRegistry import com.android.wallpaper.R import com.android.wallpaper.util.ScreenSizeCalculator import com.android.wallpaper.util.TimeUtils.TimeTicker import java.util.concurrent.ConcurrentHashMap class ClockViewFactory( private val activity: Activity, private val registry: ClockRegistry, ) { private val timeTickListeners: ConcurrentHashMap<Int, TimeTicker> = ConcurrentHashMap() private val clockControllers: HashMap<String, ClockController> = HashMap() private var ticker: TimeTicker? = null fun getView(clockId: String): View { return (clockControllers[clockId] ?: initClockController(clockId)).largeClock.view Loading @@ -45,15 +47,23 @@ class ClockViewFactory( .onSeedColorChanged(seedColor) } fun registerTimeTicker() { ticker = fun registerTimeTicker(owner: LifecycleOwner) { val hashCode = owner.hashCode() if (timeTickListeners.keys.contains(hashCode)) { return } timeTickListeners[hashCode] = TimeTicker.registerNewReceiver(activity.applicationContext) { clockControllers.values.forEach { it.largeClock.events.onTimeTick() } } } fun unregisterTimeTicker() { activity.applicationContext.unregisterReceiver(ticker) fun unregisterTimeTicker(owner: LifecycleOwner) { val hashCode = owner.hashCode() timeTickListeners[hashCode]?.let { activity.applicationContext.unregisterReceiver(it) timeTickListeners.remove(hashCode) } } private fun initClockController(clockId: String): ClockController { Loading Loading
src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt +13 −6 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import android.view.ViewGroup import android.widget.FrameLayout import androidx.core.view.isVisible import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle Loading Loading @@ -89,13 +90,19 @@ object ClockCarouselViewBinder { } } lifecycleOwner.lifecycleScope.launch { lifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) { clockViewFactory.registerTimeTicker() lifecycleOwner.lifecycle.addObserver( LifecycleEventObserver { source, event -> when (event) { Lifecycle.Event.ON_RESUME -> { clockViewFactory.registerTimeTicker(source) } Lifecycle.Event.ON_PAUSE -> { clockViewFactory.unregisterTimeTicker(source) } // When paused clockViewFactory.unregisterTimeTicker() else -> {} } } ) return object : Binding { override fun show() { Loading
src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt +13 −6 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.widget.SeekBar import androidx.core.view.isInvisible import androidx.core.view.isVisible import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle Loading Loading @@ -170,12 +171,18 @@ object ClockSettingsBinder { } } lifecycleOwner.lifecycleScope.launch { lifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) { clockViewFactory.registerTimeTicker() lifecycleOwner.lifecycle.addObserver( LifecycleEventObserver { source, event -> when (event) { Lifecycle.Event.ON_RESUME -> { clockViewFactory.registerTimeTicker(source) } Lifecycle.Event.ON_PAUSE -> { clockViewFactory.unregisterTimeTicker(source) } // When paused clockViewFactory.unregisterTimeTicker() else -> {} } } ) } }
src/com/android/customization/picker/clock/ui/view/ClockViewFactory.kt +15 −5 Original line number Diff line number Diff line Loading @@ -18,18 +18,20 @@ package com.android.customization.picker.clock.ui.view import android.app.Activity import android.view.View import androidx.annotation.ColorInt import androidx.lifecycle.LifecycleOwner import com.android.systemui.plugins.ClockController import com.android.systemui.shared.clocks.ClockRegistry import com.android.wallpaper.R import com.android.wallpaper.util.ScreenSizeCalculator import com.android.wallpaper.util.TimeUtils.TimeTicker import java.util.concurrent.ConcurrentHashMap class ClockViewFactory( private val activity: Activity, private val registry: ClockRegistry, ) { private val timeTickListeners: ConcurrentHashMap<Int, TimeTicker> = ConcurrentHashMap() private val clockControllers: HashMap<String, ClockController> = HashMap() private var ticker: TimeTicker? = null fun getView(clockId: String): View { return (clockControllers[clockId] ?: initClockController(clockId)).largeClock.view Loading @@ -45,15 +47,23 @@ class ClockViewFactory( .onSeedColorChanged(seedColor) } fun registerTimeTicker() { ticker = fun registerTimeTicker(owner: LifecycleOwner) { val hashCode = owner.hashCode() if (timeTickListeners.keys.contains(hashCode)) { return } timeTickListeners[hashCode] = TimeTicker.registerNewReceiver(activity.applicationContext) { clockControllers.values.forEach { it.largeClock.events.onTimeTick() } } } fun unregisterTimeTicker() { activity.applicationContext.unregisterReceiver(ticker) fun unregisterTimeTicker(owner: LifecycleOwner) { val hashCode = owner.hashCode() timeTickListeners[hashCode]?.let { activity.applicationContext.unregisterReceiver(it) timeTickListeners.remove(hashCode) } } private fun initClockController(clockId: String): ClockController { Loading