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

Commit 7302505c authored by Evan Laird's avatar Evan Laird
Browse files

Use synchronize instead of Assert.isMainThread

DemoModeController tried to make sure adding callbacks always happened
on the main thread. But it's breaking some tests if it somehow gets
instantiated (lazily, by Dagger) on a background thread.

It should be fine to just use a couple of locks and call it a day, but
eventually it'd be better to fix that dagger problem...

Test: atest SystemUITests
Fixes: 170122983
Change-Id: Ieff52b268aec4194e932823353c739c1e0641acc
parent 08d64fbc
Loading
Loading
Loading
Loading
+28 −11
Original line number Diff line number Diff line
@@ -85,8 +85,6 @@ class DemoModeController constructor(
    }

    override fun addCallback(listener: DemoMode) {
        Assert.isMainThread()

        // Register this listener for its commands
        val commands = listener.demoCommands()

@@ -99,21 +97,24 @@ class DemoModeController constructor(
            receiverMap[command]!!.add(listener)
        }

        synchronized(this) {
            receivers.add(listener)
        }

        if (isInDemoMode) {
            listener.onDemoModeStarted()
        }
    }

    override fun removeCallback(listener: DemoMode) {
        Assert.isMainThread()

        synchronized(this) {
            listener.demoCommands().forEach { command ->
                receiverMap[command]!!.remove(listener)
            }

            receivers.remove(listener)
        }
    }

    private fun setIsDemoModeAllowed(enabled: Boolean) {
        // Turn off demo mode if it was on
@@ -125,7 +126,13 @@ class DemoModeController constructor(
    private fun enterDemoMode() {
        isInDemoMode = true
        Assert.isMainThread()
        receivers.forEach { r ->

        val copy: List<DemoModeCommandReceiver>
        synchronized(this) {
            copy = receivers.toList()
        }

        copy.forEach { r ->
            r.onDemoModeStarted()
        }
    }
@@ -133,7 +140,13 @@ class DemoModeController constructor(
    private fun exitDemoMode() {
        isInDemoMode = false
        Assert.isMainThread()
        receivers.forEach { r ->

        val copy: List<DemoModeCommandReceiver>
        synchronized(this) {
            copy = receivers.toList()
        }

        copy.forEach { r ->
            r.onDemoModeFinished()
        }
    }
@@ -168,7 +181,11 @@ class DemoModeController constructor(
        pw.println("  isInDemoMode=$isInDemoMode")
        pw.println("  isDemoModeAllowed=$isAvailable")
        pw.print("  receivers=[")
        receivers.forEach { recv ->
        val copy: List<DemoModeCommandReceiver>
        synchronized(this) {
            copy = receivers.toList()
        }
        copy.forEach { recv ->
            pw.print(" ${recv.javaClass.simpleName}")
        }
        pw.println(" ]")