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

Commit 74414a5b authored by Hawkwood Glazier's avatar Hawkwood Glazier
Browse files

Update ClockRegistry to use injection pattern for assertions

Flag: N/A
Bug: 322196219
Test: Manual & presubmits
Change-Id: Idc0cc0756047de3d8b036b3eeff33eba3e0282d3
parent 08e44ec9
Loading
Loading
Loading
Loading
+8 −17
Original line number Original line Diff line number Diff line
@@ -36,7 +36,7 @@ import com.android.systemui.plugins.clocks.ClockMetadata
import com.android.systemui.plugins.clocks.ClockProvider
import com.android.systemui.plugins.clocks.ClockProvider
import com.android.systemui.plugins.clocks.ClockProviderPlugin
import com.android.systemui.plugins.clocks.ClockProviderPlugin
import com.android.systemui.plugins.clocks.ClockSettings
import com.android.systemui.plugins.clocks.ClockSettings
import com.android.systemui.util.Assert
import com.android.systemui.util.ThreadAssert
import java.io.PrintWriter
import java.io.PrintWriter
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicBoolean
@@ -89,6 +89,7 @@ open class ClockRegistry(
    val keepAllLoaded: Boolean,
    val keepAllLoaded: Boolean,
    subTag: String,
    subTag: String,
    var isTransitClockEnabled: Boolean = false,
    var isTransitClockEnabled: Boolean = false,
    val assert: ThreadAssert = ThreadAssert(),
) {
) {
    private val TAG = "${ClockRegistry::class.simpleName} ($subTag)"
    private val TAG = "${ClockRegistry::class.simpleName} ($subTag)"
    private val logger: Logger =
    private val logger: Logger =
@@ -286,7 +287,7 @@ open class ClockRegistry(


    @OpenForTesting
    @OpenForTesting
    open fun querySettings() {
    open fun querySettings() {
        assertNotMainThread()
        assert.isNotMainThread()
        val result =
        val result =
            try {
            try {
                val json =
                val json =
@@ -313,7 +314,7 @@ open class ClockRegistry(


    @OpenForTesting
    @OpenForTesting
    open fun applySettings(value: ClockSettings?) {
    open fun applySettings(value: ClockSettings?) {
        assertNotMainThread()
        assert.isNotMainThread()


        try {
        try {
            value?.metadata?.put(KEY_TIMESTAMP, System.currentTimeMillis())
            value?.metadata?.put(KEY_TIMESTAMP, System.currentTimeMillis())
@@ -339,16 +340,6 @@ open class ClockRegistry(
        settings = value
        settings = value
    }
    }


    @OpenForTesting
    protected open fun assertMainThread() {
        Assert.isMainThread()
    }

    @OpenForTesting
    protected open fun assertNotMainThread() {
        Assert.isNotMainThread()
    }

    private var isClockChanged = AtomicBoolean(false)
    private var isClockChanged = AtomicBoolean(false)
    private fun triggerOnCurrentClockChanged() {
    private fun triggerOnCurrentClockChanged() {
        val shouldSchedule = isClockChanged.compareAndSet(false, true)
        val shouldSchedule = isClockChanged.compareAndSet(false, true)
@@ -357,7 +348,7 @@ open class ClockRegistry(
        }
        }


        scope.launch(mainDispatcher) {
        scope.launch(mainDispatcher) {
            assertMainThread()
            assert.isMainThread()
            isClockChanged.set(false)
            isClockChanged.set(false)
            clockChangeListeners.forEach { it.onCurrentClockChanged() }
            clockChangeListeners.forEach { it.onCurrentClockChanged() }
        }
        }
@@ -371,7 +362,7 @@ open class ClockRegistry(
        }
        }


        scope.launch(mainDispatcher) {
        scope.launch(mainDispatcher) {
            assertMainThread()
            assert.isMainThread()
            isClockListChanged.set(false)
            isClockListChanged.set(false)
            clockChangeListeners.forEach { it.onAvailableClocksChanged() }
            clockChangeListeners.forEach { it.onAvailableClocksChanged() }
        }
        }
@@ -585,7 +576,7 @@ open class ClockRegistry(
     * Calling from main thread to make sure the access is thread safe.
     * Calling from main thread to make sure the access is thread safe.
     */
     */
    fun registerClockChangeListener(listener: ClockChangeListener) {
    fun registerClockChangeListener(listener: ClockChangeListener) {
        assertMainThread()
        assert.isMainThread()
        clockChangeListeners.add(listener)
        clockChangeListeners.add(listener)
    }
    }


@@ -595,7 +586,7 @@ open class ClockRegistry(
     * Calling from main thread to make sure the access is thread safe.
     * Calling from main thread to make sure the access is thread safe.
     */
     */
    fun unregisterClockChangeListener(listener: ClockChangeListener) {
    fun unregisterClockChangeListener(listener: ClockChangeListener) {
        assertMainThread()
        assert.isMainThread()
        clockChangeListeners.remove(listener)
        clockChangeListeners.remove(listener)
    }
    }


+3 −1
Original line number Original line Diff line number Diff line
@@ -33,6 +33,7 @@ import com.android.systemui.plugins.clocks.ClockMessageBuffers;
import com.android.systemui.res.R;
import com.android.systemui.res.R;
import com.android.systemui.shared.clocks.ClockRegistry;
import com.android.systemui.shared.clocks.ClockRegistry;
import com.android.systemui.shared.clocks.DefaultClockProvider;
import com.android.systemui.shared.clocks.DefaultClockProvider;
import com.android.systemui.util.ThreadAssert;


import dagger.Module;
import dagger.Module;
import dagger.Provides;
import dagger.Provides;
@@ -74,7 +75,8 @@ public abstract class ClockRegistryModule {
                clockBuffers,
                clockBuffers,
                /* keepAllLoaded = */ false,
                /* keepAllLoaded = */ false,
                /* subTag = */ "System",
                /* subTag = */ "System",
                /* isTransitClockEnabled = */ featureFlags.isEnabled(Flags.TRANSIT_CLOCK));
                /* isTransitClockEnabled = */ featureFlags.isEnabled(Flags.TRANSIT_CLOCK),
                new ThreadAssert());
        registry.registerListeners();
        registry.registerListeners();
        return registry;
        return registry;
    }
    }
+3 −3
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.systemui.plugins.PluginListener
import com.android.systemui.plugins.PluginManager
import com.android.systemui.plugins.PluginManager
import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.ThreadAssert
import java.util.function.BiConsumer
import java.util.function.BiConsumer
import junit.framework.Assert.assertEquals
import junit.framework.Assert.assertEquals
import junit.framework.Assert.fail
import junit.framework.Assert.fail
@@ -69,6 +70,7 @@ class ClockRegistryTest : SysuiTestCase() {
    @Mock private lateinit var mockDefaultClock: ClockController
    @Mock private lateinit var mockDefaultClock: ClockController
    @Mock private lateinit var mockThumbnail: Drawable
    @Mock private lateinit var mockThumbnail: Drawable
    @Mock private lateinit var mockContentResolver: ContentResolver
    @Mock private lateinit var mockContentResolver: ContentResolver
    @Mock private lateinit var mockThreadAssert: ThreadAssert
    private lateinit var fakeDefaultProvider: FakeClockPlugin
    private lateinit var fakeDefaultProvider: FakeClockPlugin
    private lateinit var pluginListener: PluginListener<ClockProviderPlugin>
    private lateinit var pluginListener: PluginListener<ClockProviderPlugin>
    private lateinit var registry: ClockRegistry
    private lateinit var registry: ClockRegistry
@@ -163,14 +165,12 @@ class ClockRegistryTest : SysuiTestCase() {
            defaultClockProvider = fakeDefaultProvider,
            defaultClockProvider = fakeDefaultProvider,
            keepAllLoaded = false,
            keepAllLoaded = false,
            subTag = "Test",
            subTag = "Test",
            assert = mockThreadAssert,
        ) {
        ) {
            override fun querySettings() { }
            override fun querySettings() { }
            override fun applySettings(value: ClockSettings?) {
            override fun applySettings(value: ClockSettings?) {
                settings = value
                settings = value
            }
            }
            // Unit Test does not validate threading
            override fun assertMainThread() {}
            override fun assertNotMainThread() {}
        }
        }
        registry.registerListeners()
        registry.registerListeners()