From 543dd362fed9c1d1c2a7fac043640df5e0b79eab Mon Sep 17 00:00:00 2001 From: Santiago Seifert Date: Tue, 12 Jul 2022 15:00:26 +0000 Subject: [PATCH] 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 --- .../systemui/media/MediaDeviceManager.kt | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt b/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt index 83050503a18f2..25186597e0e1e 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt +++ b/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt @@ -188,24 +188,28 @@ class MediaDeviceManager @Inject constructor( @AnyThread fun start() = bgExecutor.execute { - localMediaManager.registerCallback(this) - localMediaManager.startScan() - muteAwaitConnectionManager?.startListening() - playbackType = controller?.playbackInfo?.playbackType ?: PLAYBACK_TYPE_UNKNOWN - controller?.registerCallback(this) - updateCurrent() - started = true - configurationController.addCallback(configListener) + if (!started) { + localMediaManager.registerCallback(this) + localMediaManager.startScan() + muteAwaitConnectionManager?.startListening() + playbackType = controller?.playbackInfo?.playbackType ?: PLAYBACK_TYPE_UNKNOWN + controller?.registerCallback(this) + updateCurrent() + started = true + configurationController.addCallback(configListener) + } } @AnyThread fun stop() = bgExecutor.execute { - started = false - controller?.unregisterCallback(this) - localMediaManager.stopScan() - localMediaManager.unregisterCallback(this) - muteAwaitConnectionManager?.stopListening() - configurationController.removeCallback(configListener) + if (started) { + started = false + controller?.unregisterCallback(this) + localMediaManager.stopScan() + localMediaManager.unregisterCallback(this) + muteAwaitConnectionManager?.stopListening() + configurationController.removeCallback(configListener) + } } fun dump(pw: PrintWriter) { @@ -265,7 +269,6 @@ class MediaDeviceManager @Inject constructor( updateCurrent() } - override fun onBroadcastStarted(reason: Int, broadcastId: Int) { if (DEBUG) { Log.d(TAG, "onBroadcastStarted(), reason = $reason , broadcastId = $broadcastId") @@ -279,8 +282,10 @@ class MediaDeviceManager @Inject constructor( } } - override fun onBroadcastMetadataChanged(broadcastId: Int, - metadata: BluetoothLeBroadcastMetadata) { + override fun onBroadcastMetadataChanged( + broadcastId: Int, + metadata: BluetoothLeBroadcastMetadata + ) { if (DEBUG) { Log.d(TAG, "onBroadcastMetadataChanged(), broadcastId = $broadcastId , " + "metadata = $metadata") @@ -291,7 +296,6 @@ class MediaDeviceManager @Inject constructor( override fun onBroadcastStopped(reason: Int, broadcastId: Int) { if (DEBUG) { Log.d(TAG, "onBroadcastStopped(), reason = $reason , broadcastId = $broadcastId") - } updateCurrent() }