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

Commit cec1c35e authored by Austin Wang's avatar Austin Wang Committed by Android (Google) Code Review
Browse files

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

parents 5ed54a50 33a31d93
Loading
Loading
Loading
Loading
+21 −6
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import java.util.concurrent.atomic.AtomicBoolean
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

private val KEY_TIMESTAMP = "appliedTimestamp"

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

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

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

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

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

    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)
    }

    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)
    }

    fun createCurrentClock(): ClockController {
        val clockId = currentClockId