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

Commit 12ed2b89 authored by Austin Wang's avatar Austin Wang Committed by Automerger Merge Worker
Browse files

Merge "Fix race condition when accessing ClockChangeListener" into udc-dev am:...

Merge "Fix race condition when accessing ClockChangeListener" into udc-dev am: cec1c35e am: 7c75fe53 am: dd7a4b20

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23356839



Change-Id: I0d9f8839b4375c8cc9d8ccd7171060db7ab428ec
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 6fca55a1 dd7a4b20
Loading
Loading
Loading
Loading
+21 −6
Original line number Original line Diff line number Diff line
@@ -45,6 +45,7 @@ import java.util.concurrent.atomic.AtomicBoolean
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext


private val KEY_TIMESTAMP = "appliedTimestamp"
private val KEY_TIMESTAMP = "appliedTimestamp"


@@ -320,20 +321,20 @@ open class ClockRegistry(
        }
        }
    }
    }


    public fun mutateSetting(mutator: (ClockSettings) -> ClockSettings) {
    public suspend fun mutateSetting(mutator: (ClockSettings) -> ClockSettings) {
        scope.launch(bgDispatcher) { applySettings(mutator(settings ?: ClockSettings())) }
        withContext(bgDispatcher) { applySettings(mutator(settings ?: ClockSettings())) }
    }
    }


    var currentClockId: ClockId
    var currentClockId: ClockId
        get() = settings?.clockId ?: fallbackClockId
        get() = settings?.clockId ?: fallbackClockId
        set(value) {
        set(value) {
            mutateSetting { it.copy(clockId = value) }
            scope.launch(bgDispatcher) { mutateSetting { it.copy(clockId = value) } }
        }
        }


    var seedColor: Int?
    var seedColor: Int?
        get() = settings?.seedColor
        get() = settings?.seedColor
        set(value) {
        set(value) {
            mutateSetting { it.copy(seedColor = value) }
            scope.launch(bgDispatcher) { mutateSetting { it.copy(seedColor = value) } }
        }
        }


    init {
    init {
@@ -501,11 +502,25 @@ open class ClockRegistry(


    fun createExampleClock(clockId: ClockId): ClockController? = createClock(clockId)
    fun createExampleClock(clockId: ClockId): ClockController? = createClock(clockId)


    fun registerClockChangeListener(listener: ClockChangeListener) =
    /**
     * Adds [listener] to receive future clock changes.
     *
     * Calling from main thread to make sure the access is thread safe.
     */
    fun registerClockChangeListener(listener: ClockChangeListener) {
        assertMainThread()
        clockChangeListeners.add(listener)
        clockChangeListeners.add(listener)
    }


    fun unregisterClockChangeListener(listener: ClockChangeListener) =
    /**
     * Removes [listener] from future clock changes.
     *
     * Calling from main thread to make sure the access is thread safe.
     */
    fun unregisterClockChangeListener(listener: ClockChangeListener) {
        assertMainThread()
        clockChangeListeners.remove(listener)
        clockChangeListeners.remove(listener)
    }


    fun createCurrentClock(): ClockController {
    fun createCurrentClock(): ClockController {
        val clockId = currentClockId
        val clockId = currentClockId