From ae173fef18e04d47c6f9fe51ee07afeb0d5f9155 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 This is a cherrypick of commit 543dd362fed9c1d1c2a7fac043640df5e0b79eab. 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 Merged-In: Icb4573d30790b4055b67eff57c495ceb6c3ae61b --- .../systemui/media/MediaDeviceManager.kt | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt b/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt index 267c1f55a6814..b3a4ddf8ec1f4 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) {