diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt b/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt index de0af16bc2faf..7ae2dc5c0941a 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt +++ b/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt @@ -22,6 +22,10 @@ import android.media.session.MediaController import com.android.settingslib.media.LocalMediaManager import com.android.settingslib.media.MediaDevice import com.android.systemui.dagger.qualifiers.Main +import com.android.systemui.Dumpable +import com.android.systemui.dump.DumpManager +import java.io.FileDescriptor +import java.io.PrintWriter import java.util.concurrent.Executor import javax.inject.Inject import javax.inject.Singleton @@ -35,13 +39,15 @@ class MediaDeviceManager @Inject constructor( private val localMediaManagerFactory: LocalMediaManagerFactory, private val mr2manager: MediaRouter2Manager, @Main private val fgExecutor: Executor, - private val mediaDataManager: MediaDataManager -) : MediaDataManager.Listener { + private val mediaDataManager: MediaDataManager, + private val dumpManager: DumpManager +) : MediaDataManager.Listener, Dumpable { private val listeners: MutableSet = mutableSetOf() private val entries: MutableMap = mutableMapOf() init { mediaDataManager.addListener(this) + dumpManager.registerDumpable(javaClass.name, this) } /** @@ -81,6 +87,17 @@ class MediaDeviceManager @Inject constructor( } } + override fun dump(fd: FileDescriptor, pw: PrintWriter, args: Array) { + with(pw) { + println("MediaDeviceManager state:") + entries.forEach { + key, entry -> + println(" key=$key") + entry.dump(fd, pw, args) + } + } + } + private fun processDevice(key: String, device: MediaDevice?) { val enabled = device != null val data = MediaDeviceData(enabled, device?.iconWithoutBackground, device?.name) @@ -122,6 +139,17 @@ class MediaDeviceManager @Inject constructor( localMediaManager.stopScan() localMediaManager.unregisterCallback(this) } + fun dump(fd: FileDescriptor, pw: PrintWriter, args: Array) { + val route = controller?.let { + mr2manager.getRoutingSessionForMediaController(it) + } + with(pw) { + println(" current device is ${current?.name}") + val type = controller?.playbackInfo?.playbackType + println(" PlaybackType=$type (1 for local, 2 for remote)") + println(" route=$route") + } + } override fun onDeviceListUpdate(devices: List?) = fgExecutor.execute { updateCurrent() } diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/MediaDeviceManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/MediaDeviceManagerTest.kt index 6fcf6e37572be..22155b6cf953f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/MediaDeviceManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/MediaDeviceManagerTest.kt @@ -30,6 +30,7 @@ import androidx.test.filters.SmallTest import com.android.settingslib.media.LocalMediaManager import com.android.settingslib.media.MediaDevice import com.android.systemui.SysuiTestCase +import com.android.systemui.dump.DumpManager import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.time.FakeSystemClock @@ -71,6 +72,7 @@ public class MediaDeviceManagerTest : SysuiTestCase() { @Mock private lateinit var lmm: LocalMediaManager @Mock private lateinit var mr2: MediaRouter2Manager private lateinit var fakeExecutor: FakeExecutor + @Mock private lateinit var dumpster: DumpManager @Mock private lateinit var listener: MediaDeviceManager.Listener @Mock private lateinit var device: MediaDevice @Mock private lateinit var icon: Drawable @@ -85,7 +87,8 @@ public class MediaDeviceManagerTest : SysuiTestCase() { @Before fun setUp() { fakeExecutor = FakeExecutor(FakeSystemClock()) - manager = MediaDeviceManager(context, lmmFactory, mr2, fakeExecutor, mediaDataManager) + manager = MediaDeviceManager(context, lmmFactory, mr2, fakeExecutor, mediaDataManager, + dumpster) manager.addListener(listener) // Configure mocks.