diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt index b2a5e356b9360..d59967917e6cf 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt @@ -23,9 +23,11 @@ import android.view.View import com.android.internal.logging.UiEventLogger import com.android.internal.statusbar.IUndoMediaTransferCallback import com.android.systemui.CoreStartable +import com.android.systemui.Dumpable import com.android.systemui.R import com.android.systemui.common.shared.model.Text import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dump.DumpManager import com.android.systemui.media.taptotransfer.MediaTttFlags import com.android.systemui.media.taptotransfer.common.MediaTttUtils import com.android.systemui.statusbar.CommandQueue @@ -34,6 +36,7 @@ import com.android.systemui.temporarydisplay.ViewPriority import com.android.systemui.temporarydisplay.chipbar.ChipbarCoordinator import com.android.systemui.temporarydisplay.chipbar.ChipbarEndItem import com.android.systemui.temporarydisplay.chipbar.ChipbarInfo +import java.io.PrintWriter import javax.inject.Inject /** @@ -47,14 +50,14 @@ constructor( private val chipbarCoordinator: ChipbarCoordinator, private val commandQueue: CommandQueue, private val context: Context, + private val dumpManager: DumpManager, private val logger: MediaTttSenderLogger, private val mediaTttFlags: MediaTttFlags, private val uiEventLogger: MediaTttSenderUiEventLogger, -) : CoreStartable { +) : CoreStartable, Dumpable { private var displayedState: ChipStateSender? = null // A map to store current chip state per id. - // TODO(b/265455911): Log whenever we add or remove from the store. private var stateMap: MutableMap = mutableMapOf() private val commandQueueCallbacks = @@ -75,6 +78,7 @@ constructor( override fun start() { if (mediaTttFlags.isMediaTttEnabled()) { commandQueue.addCallback(commandQueueCallbacks) + dumpManager.registerNormalDumpable(this) } } @@ -104,12 +108,13 @@ constructor( uiEventLogger.logSenderStateChange(chipState) if (chipState == ChipStateSender.FAR_FROM_RECEIVER) { + val removalReason = ChipStateSender.FAR_FROM_RECEIVER.name + // No need to store the state since it is the default state - removeIdFromStore(routeInfo.id) + removeIdFromStore(routeInfo.id, reason = removalReason) // Return early if we're not displaying a chip anyway val currentDisplayedState = displayedState ?: return - val removalReason = ChipStateSender.FAR_FROM_RECEIVER.name if ( currentDisplayedState.transferStatus == TransferStatus.IN_PROGRESS || currentDisplayedState.transferStatus == TransferStatus.SUCCEEDED @@ -127,6 +132,7 @@ constructor( chipbarCoordinator.removeView(routeInfo.id, removalReason) } else { stateMap[routeInfo.id] = chipState + logger.logStateMap(stateMap) displayedState = chipState chipbarCoordinator.registerListener(displayListener) chipbarCoordinator.displayView( @@ -232,12 +238,19 @@ constructor( } private val displayListener = - TemporaryViewDisplayController.Listener { id -> removeIdFromStore(id) } + TemporaryViewDisplayController.Listener { id, reason -> removeIdFromStore(id, reason) } - private fun removeIdFromStore(id: String) { + private fun removeIdFromStore(id: String, reason: String) { + logger.logStateMapRemoval(id, reason) stateMap.remove(id) + logger.logStateMap(stateMap) if (stateMap.isEmpty()) { chipbarCoordinator.unregisterListener(displayListener) } } + + override fun dump(pw: PrintWriter, args: Array) { + pw.println("Current sender states:") + pw.println(stateMap.toString()) + } } diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderLogger.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderLogger.kt index 6363425d6db98..964a95b9be9a8 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderLogger.kt @@ -85,6 +85,29 @@ constructor( ) } + /** Logs the current contents of the state map. */ + fun logStateMap(map: Map) { + buffer.log( + TAG, + LogLevel.DEBUG, + { str1 = map.toString() }, + { "Current sender states: $str1" } + ) + } + + /** Logs that [id] has been removed from the state map due to [reason]. */ + fun logStateMapRemoval(id: String, reason: String) { + buffer.log( + TAG, + LogLevel.DEBUG, + { + str1 = id + str2 = reason + }, + { "State removal: id=$str1 reason=$str2" } + ) + } + companion object { private const val TAG = "MediaTttSender" } diff --git a/packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayController.kt b/packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayController.kt index df8d16142b8bd..1065d3349930d 100644 --- a/packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayController.kt +++ b/packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayController.kt @@ -327,7 +327,7 @@ abstract class TemporaryViewDisplayController - listener.onInfoPermanentlyRemoved(it.info.id) + listener.onInfoPermanentlyRemoved(it.info.id, REMOVAL_REASON_TIME_EXPIRED) } } } @@ -457,7 +457,7 @@ abstract class TemporaryViewDisplayController() - override fun onInfoPermanentlyRemoved(id: String) { + override fun onInfoPermanentlyRemoved(id: String, reason: String) { permanentlyRemovedIds.add(id) } }