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

Commit 814f97f8 authored by Beth Thibodeau's avatar Beth Thibodeau Committed by Android (Google) Code Review
Browse files

Merge "Revert^2 "Add LogBuffer for media device changes"" into main

parents 644a74dd d7e7535c
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -382,6 +382,16 @@ public class LogModule {
        return factory.create("MediaLog", 20);
    }

    /**
     * Provides a buffer for media device changes
     */
    @Provides
    @SysUISingleton
    @MediaDeviceLog
    public static LogBuffer providesMediaDeviceLogBuffer(LogBufferFactory factory) {
        return factory.create("MediaDeviceLog", 50);
    }

    /** Allows logging buffers to be tweaked via adb on debug builds but not on prod builds. */
    @Provides
    @SysUISingleton
+26 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.log.dagger

import com.android.systemui.log.LogBuffer
import javax.inject.Qualifier

/** A [LogBuffer] for [com.android.systemui.media.controls.domain.pipeline.MediaDeviceLogger] */
@Qualifier
@MustBeDocumented
@Retention(AnnotationRetention.RUNTIME)
annotation class MediaDeviceLog
+116 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.media.controls.domain.pipeline

import android.media.session.MediaController
import com.android.settingslib.media.MediaDevice
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.core.LogLevel
import com.android.systemui.log.dagger.MediaDeviceLog
import com.android.systemui.media.controls.shared.model.MediaDeviceData
import javax.inject.Inject

/** A [LogBuffer] for media device changes */
class MediaDeviceLogger @Inject constructor(@MediaDeviceLog private val buffer: LogBuffer) {

    fun logBroadcastEvent(event: String, reason: Int, broadcastId: Int) {
        buffer.log(
            TAG,
            LogLevel.DEBUG,
            {
                str1 = event
                int1 = reason
                int2 = broadcastId
            },
            { "$str1, reason = $int1, broadcastId = $int2" }
        )
    }

    fun logBroadcastEvent(event: String, reason: Int) {
        buffer.log(
            TAG,
            LogLevel.DEBUG,
            {
                str1 = event
                int1 = reason
            },
            { "$str1, reason = $int1" }
        )
    }

    fun logBroadcastMetadataChanged(broadcastId: Int, metadata: String) {
        buffer.log(
            TAG,
            LogLevel.DEBUG,
            {
                int1 = broadcastId
                str1 = metadata
            },
            { "onBroadcastMetadataChanged, broadcastId = $int1, metadata = $str1" }
        )
    }

    fun logNewDeviceName(name: String?) {
        buffer.log(TAG, LogLevel.DEBUG, { str1 = name }, { "New device name $str1" })
    }

    fun logLocalDevice(sassDevice: MediaDeviceData?, connectedDevice: MediaDeviceData?) {
        buffer.log(
            TAG,
            LogLevel.DEBUG,
            {
                str1 = sassDevice?.name?.toString()
                str2 = connectedDevice?.name?.toString()
            },
            { "Local device: $str1 or $str2" }
        )
    }

    fun logRemoteDevice(routingSessionName: CharSequence?, connectedDevice: MediaDeviceData?) {
        buffer.log(
            TAG,
            LogLevel.DEBUG,
            {
                str1 = routingSessionName?.toString()
                str2 = connectedDevice?.name?.toString()
            },
            { "Remote device: $str1 or $str2 or unknown" }
        )
    }

    fun logDeviceName(
        device: MediaDevice?,
        controller: MediaController?,
        routingSessionName: CharSequence?,
        selectedRouteName: CharSequence?
    ) {
        buffer.log(
            TAG,
            LogLevel.DEBUG,
            {
                str1 = "device $device, controller: $controller"
                str2 = routingSessionName?.toString()
                str3 = selectedRouteName?.toString()
            },
            { "$str1, routingSession $str2 or selected route $str3" }
        )
    }

    companion object {
        private const val TAG = "MediaDeviceLog"
    }
}
+20 −40
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ constructor(
    private val localBluetoothManager: Lazy<LocalBluetoothManager?>,
    @Main private val fgExecutor: Executor,
    @Background private val bgExecutor: Executor,
    private val logger: MediaDeviceLogger,
) : MediaDataManager.Listener {

    private val listeners: MutableSet<Listener> = mutableSetOf()
@@ -281,59 +282,38 @@ constructor(
        }

        override fun onBroadcastStarted(reason: Int, broadcastId: Int) {
            if (DEBUG) {
                Log.d(TAG, "onBroadcastStarted(), reason = $reason , broadcastId = $broadcastId")
            }
            logger.logBroadcastEvent("onBroadcastStarted", reason, broadcastId)
            updateCurrent()
        }

        override fun onBroadcastStartFailed(reason: Int) {
            if (DEBUG) {
                Log.d(TAG, "onBroadcastStartFailed(), reason = $reason")
            }
            logger.logBroadcastEvent("onBroadcastStartFailed", reason)
        }

        override fun onBroadcastMetadataChanged(
            broadcastId: Int,
            metadata: BluetoothLeBroadcastMetadata
        ) {
            if (DEBUG) {
                Log.d(
                    TAG,
                    "onBroadcastMetadataChanged(), broadcastId = $broadcastId , " +
                        "metadata = $metadata"
                )
            }
            logger.logBroadcastMetadataChanged(broadcastId, metadata.toString())
            updateCurrent()
        }

        override fun onBroadcastStopped(reason: Int, broadcastId: Int) {
            if (DEBUG) {
                Log.d(TAG, "onBroadcastStopped(), reason = $reason , broadcastId = $broadcastId")
            }
            logger.logBroadcastEvent("onBroadcastStopped", reason, broadcastId)
            updateCurrent()
        }

        override fun onBroadcastStopFailed(reason: Int) {
            if (DEBUG) {
                Log.d(TAG, "onBroadcastStopFailed(), reason = $reason")
            }
            logger.logBroadcastEvent("onBroadcastStopFailed", reason)
        }

        override fun onBroadcastUpdated(reason: Int, broadcastId: Int) {
            if (DEBUG) {
                Log.d(TAG, "onBroadcastUpdated(), reason = $reason , broadcastId = $broadcastId")
            }
            logger.logBroadcastEvent("onBroadcastUpdated", reason, broadcastId)
            updateCurrent()
        }

        override fun onBroadcastUpdateFailed(reason: Int, broadcastId: Int) {
            if (DEBUG) {
                Log.d(
                    TAG,
                    "onBroadcastUpdateFailed(), reason = $reason , " + "broadcastId = $broadcastId"
                )
            }
            logger.logBroadcastEvent("onBroadcastUpdateFailed", reason, broadcastId)
        }

        override fun onPlaybackStarted(reason: Int, broadcastId: Int) {}
@@ -381,12 +361,16 @@ constructor(
                                name = context.getString(R.string.media_seamless_other_device),
                                showBroadcastButton = false
                            )
                    logger.logRemoteDevice(routingSession?.name, connectedDevice)
                } else {
                    // Prefer SASS if available when playback is local.
                    activeDevice = getSassDevice() ?: connectedDevice
                    val sassDevice = getSassDevice()
                    activeDevice = sassDevice ?: connectedDevice
                    logger.logLocalDevice(sassDevice, connectedDevice)
                }

                current = activeDevice ?: EMPTY_AND_DISABLED_MEDIA_DEVICE_DATA
                logger.logNewDeviceName(current?.name?.toString())
            } else {
                val aboutToConnect = aboutToConnectDeviceOverride
                if (
@@ -407,9 +391,7 @@ constructor(
                val enabled = device != null && (controller == null || routingSession != null)

                val name = getDeviceName(device, routingSession)
                if (DEBUG) {
                    Log.d(TAG, "new device name $name")
                }
                logger.logNewDeviceName(name)
                current =
                    MediaDeviceData(
                        enabled,
@@ -463,14 +445,12 @@ constructor(
        ): String? {
            val selectedRoutes = routingSession?.let { mr2manager.get().getSelectedRoutes(it) }

            if (DEBUG) {
                Log.d(
                    TAG,
                    "device is $device, controller $controller," +
                        " routingSession ${routingSession?.name}" +
                        " or ${selectedRoutes?.firstOrNull()?.name}"
            logger.logDeviceName(
                device,
                controller,
                routingSession?.name,
                selectedRoutes?.firstOrNull()?.name
            )
            }

            if (controller == null) {
                // In resume state, we don't have a controller - just use the device name
+4 −0
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ import com.android.systemui.media.muteawait.MediaMuteAwaitConnectionManager
import com.android.systemui.media.muteawait.MediaMuteAwaitConnectionManagerFactory
import com.android.systemui.res.R
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.testKosmos
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
@@ -125,6 +126,8 @@ public class MediaDeviceManagerTest : SysuiTestCase() {
    private lateinit var mediaData: MediaData
    @JvmField @Rule val mockito = MockitoJUnit.rule()

    private val kosmos = testKosmos()

    @Before
    fun setUp() {
        fakeFgExecutor = FakeExecutor(FakeSystemClock())
@@ -141,6 +144,7 @@ public class MediaDeviceManagerTest : SysuiTestCase() {
                { localBluetoothManager },
                fakeFgExecutor,
                fakeBgExecutor,
                kosmos.mediaDeviceLogger,
            )
        manager.addListener(listener)

Loading