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

Commit 9b440582 authored by Robert Snoeberger's avatar Robert Snoeberger
Browse files

Dump MediaDeviceManager state

This will help with investigating issues where the output switcher chip
is showing the wrong device name.

Bug: 158813254
Test: manual - cast from Spotify and then take a bug report. Search in
the bug report for `MediaDeviceManager`.

Change-Id: Ia57498363bd0c2520696be90c094b77b91543824
parent e4c1cb51
Loading
Loading
Loading
Loading
+30 −2
Original line number Diff line number Diff line
@@ -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<Listener> = mutableSetOf()
    private val entries: MutableMap<String, Token> = 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<String>) {
        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<String>) {
            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<MediaDevice>?) = fgExecutor.execute {
            updateCurrent()
        }
+4 −1
Original line number Diff line number Diff line
@@ -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.