package com.suno.android.media import androidx.media3.common.Player fun playWhenReadyChangeReasonToString( reason: Int, ): String = fromReasonCode(reason)?.toString() ?: "UNKNOWN($reason)" fun positionDiscontinuityReasonToString( reason: Int, ): String = fromReasonCode(reason)?.toString() ?: "UNKNOWN($reason)" fun mediaItemTransitionReasonToString( reason: Int, ): String = fromReasonCode(reason)?.toString() ?: "UNKNOWN($reason)" fun Player.Events.toDebugString(): String { val events = mutableListOf() // Timeline changes if (contains(Player.EVENT_TIMELINE_CHANGED)) events.add("TIMELINE_CHANGED") if (contains(Player.EVENT_MEDIA_ITEM_TRANSITION)) events.add("MEDIA_ITEM_TRANSITION") // Playback state changes if (contains(Player.EVENT_PLAYBACK_STATE_CHANGED)) events.add("PLAYBACK_STATE_CHANGED") if (contains(Player.EVENT_PLAY_WHEN_READY_CHANGED)) events.add("PLAY_WHEN_READY_CHANGED") if (contains(Player.EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED)) events.add("PLAYBACK_SUPPRESSION_REASON_CHANGED") if (contains(Player.EVENT_IS_PLAYING_CHANGED)) events.add("IS_PLAYING_CHANGED") if (contains(Player.EVENT_REPEAT_MODE_CHANGED)) events.add("REPEAT_MODE_CHANGED") if (contains(Player.EVENT_SHUFFLE_MODE_ENABLED_CHANGED)) events.add("SHUFFLE_MODE_ENABLED_CHANGED") // Track changes if (contains(Player.EVENT_TRACKS_CHANGED)) events.add("TRACKS_CHANGED") if (contains(Player.EVENT_TRACK_SELECTION_PARAMETERS_CHANGED)) events.add("TRACK_SELECTION_PARAMETERS_CHANGED") // Media metadata if (contains(Player.EVENT_MEDIA_METADATA_CHANGED)) events.add("MEDIA_METADATA_CHANGED") if (contains(Player.EVENT_PLAYLIST_METADATA_CHANGED)) events.add("PLAYLIST_METADATA_CHANGED") // Loading state if (contains(Player.EVENT_IS_LOADING_CHANGED)) events.add("IS_LOADING_CHANGED") // Position and timing if (contains(Player.EVENT_POSITION_DISCONTINUITY)) events.add("POSITION_DISCONTINUITY") if (contains(Player.EVENT_SEEK_BACK_INCREMENT_CHANGED)) events.add("SEEK_BACK_INCREMENT_CHANGED") if (contains(Player.EVENT_SEEK_FORWARD_INCREMENT_CHANGED)) events.add("SEEK_FORWARD_INCREMENT_CHANGED") // Audio if (contains(Player.EVENT_AUDIO_ATTRIBUTES_CHANGED)) events.add("AUDIO_ATTRIBUTES_CHANGED") if (contains(Player.EVENT_AUDIO_SESSION_ID)) events.add("AUDIO_SESSION_ID") if (contains(Player.EVENT_VOLUME_CHANGED)) events.add("VOLUME_CHANGED") if (contains(Player.EVENT_SKIP_SILENCE_ENABLED_CHANGED)) events.add("SKIP_SILENCE_ENABLED_CHANGED") // Device if (contains(Player.EVENT_DEVICE_INFO_CHANGED)) events.add("DEVICE_INFO_CHANGED") if (contains(Player.EVENT_DEVICE_VOLUME_CHANGED)) events.add("DEVICE_VOLUME_CHANGED") // Error handling if (contains(Player.EVENT_PLAYER_ERROR)) events.add("PLAYER_ERROR") // Video size if (contains(Player.EVENT_VIDEO_SIZE_CHANGED)) events.add("VIDEO_SIZE_CHANGED") // Surface if (contains(Player.EVENT_SURFACE_SIZE_CHANGED)) events.add("SURFACE_SIZE_CHANGED") return events.joinToString(", ") }