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

Commit 543dd362 authored by Santiago Seifert's avatar Santiago Seifert
Browse files

Guard MediaDeviceManager.Entry against successive stop calls

It's non obvious from the code that an entry will be stopped
only once. The start() protection is added for simmetry.

Bug: 232812007
Test: Manual behavioral test.
Test: atest MediaDeviceManagerTest MediaDataCombineLatestTest
Change-Id: Icb4573d30790b4055b67eff57c495ceb6c3ae61b
parent 2dfcb94d
Loading
Loading
Loading
Loading
+22 −18
Original line number Original line Diff line number Diff line
@@ -188,6 +188,7 @@ class MediaDeviceManager @Inject constructor(


        @AnyThread
        @AnyThread
        fun start() = bgExecutor.execute {
        fun start() = bgExecutor.execute {
            if (!started) {
                localMediaManager.registerCallback(this)
                localMediaManager.registerCallback(this)
                localMediaManager.startScan()
                localMediaManager.startScan()
                muteAwaitConnectionManager?.startListening()
                muteAwaitConnectionManager?.startListening()
@@ -197,9 +198,11 @@ class MediaDeviceManager @Inject constructor(
                started = true
                started = true
                configurationController.addCallback(configListener)
                configurationController.addCallback(configListener)
            }
            }
        }


        @AnyThread
        @AnyThread
        fun stop() = bgExecutor.execute {
        fun stop() = bgExecutor.execute {
            if (started) {
                started = false
                started = false
                controller?.unregisterCallback(this)
                controller?.unregisterCallback(this)
                localMediaManager.stopScan()
                localMediaManager.stopScan()
@@ -207,6 +210,7 @@ class MediaDeviceManager @Inject constructor(
                muteAwaitConnectionManager?.stopListening()
                muteAwaitConnectionManager?.stopListening()
                configurationController.removeCallback(configListener)
                configurationController.removeCallback(configListener)
            }
            }
        }


        fun dump(pw: PrintWriter) {
        fun dump(pw: PrintWriter) {
            val routingSession = controller?.let {
            val routingSession = controller?.let {
@@ -265,7 +269,6 @@ class MediaDeviceManager @Inject constructor(
            updateCurrent()
            updateCurrent()
        }
        }



        override fun onBroadcastStarted(reason: Int, broadcastId: Int) {
        override fun onBroadcastStarted(reason: Int, broadcastId: Int) {
            if (DEBUG) {
            if (DEBUG) {
                Log.d(TAG, "onBroadcastStarted(), reason = $reason , broadcastId = $broadcastId")
                Log.d(TAG, "onBroadcastStarted(), reason = $reason , broadcastId = $broadcastId")
@@ -279,8 +282,10 @@ class MediaDeviceManager @Inject constructor(
            }
            }
        }
        }


        override fun onBroadcastMetadataChanged(broadcastId: Int,
        override fun onBroadcastMetadataChanged(
                                                metadata: BluetoothLeBroadcastMetadata) {
            broadcastId: Int,
            metadata: BluetoothLeBroadcastMetadata
        ) {
            if (DEBUG) {
            if (DEBUG) {
                Log.d(TAG, "onBroadcastMetadataChanged(), broadcastId = $broadcastId , " +
                Log.d(TAG, "onBroadcastMetadataChanged(), broadcastId = $broadcastId , " +
                        "metadata = $metadata")
                        "metadata = $metadata")
@@ -291,7 +296,6 @@ class MediaDeviceManager @Inject constructor(
        override fun onBroadcastStopped(reason: Int, broadcastId: Int) {
        override fun onBroadcastStopped(reason: Int, broadcastId: Int) {
            if (DEBUG) {
            if (DEBUG) {
                Log.d(TAG, "onBroadcastStopped(), reason = $reason , broadcastId = $broadcastId")
                Log.d(TAG, "onBroadcastStopped(), reason = $reason , broadcastId = $broadcastId")

            }
            }
            updateCurrent()
            updateCurrent()
        }
        }