package oppen.tva.ui.audio_player import android.content.Context import android.media.MediaMetadataRetriever import android.media.MediaPlayer import android.view.MenuInflater import android.view.View import androidx.appcompat.widget.PopupMenu import androidx.core.view.MenuCompat import oppen.tva.R import oppen.tva.databinding.ActivityTvaBinding import oppen.tva.io.TvaState import oppen.visible object AudioPlayer { fun play(context: Context, binding: ActivityTvaBinding, mediaPlayer: MediaPlayer, state: TvaState.ResponseAudio){ val metadataRetriever = MediaMetadataRetriever() metadataRetriever.setDataSource(context, state.cacheUri) val artist = metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST) val trackName = metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE) binding.audioTitle.text = "$trackName - $artist" mediaPlayer.reset() mediaPlayer.setDataSource(context, state.cacheUri) mediaPlayer.prepare() binding.audioPlayButton.setImageResource(R.drawable.vector_pause) mediaPlayer.setOnCompletionListener { player -> binding.audioPlayButton.setImageResource(R.drawable.vector_play) } binding.audioPlayButton.setOnClickListener { if(mediaPlayer.isPlaying){ binding.audioPlayButton.setImageResource(R.drawable.vector_play) mediaPlayer.pause() }else{ binding.audioPlayButton.setImageResource(R.drawable.vector_pause) mediaPlayer.start() } } mediaPlayer.setOnInfoListener { _, what, extra -> when(what){ MediaPlayer.MEDIA_INFO_UNKNOWN -> println("MEDIA_INFO_UNKNOWN") MediaPlayer.MEDIA_INFO_VIDEO_TRACK_LAGGING-> println("MEDIA_INFO_VIDEO_TRACK_LAGGING") MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START-> println("MEDIA_INFO_VIDEO_RENDERING_START") MediaPlayer.MEDIA_INFO_BUFFERING_START-> println("MEDIA_INFO_BUFFERING_START") MediaPlayer.MEDIA_INFO_BUFFERING_END-> println("MEDIA_INFO_BUFFERING_END") MediaPlayer.MEDIA_INFO_BAD_INTERLEAVING-> println("MEDIA_INFO_BAD_INTERLEAVING") MediaPlayer.MEDIA_INFO_NOT_SEEKABLE-> println("MEDIA_INFO_NOT_SEEKABLE") MediaPlayer.MEDIA_INFO_METADATA_UPDATE-> println("MEDIA_INFO_METADATA_UPDATE") MediaPlayer.MEDIA_INFO_UNSUPPORTED_SUBTITLE-> println("MEDIA_INFO_UNSUPPORTED_SUBTITLE") MediaPlayer.MEDIA_INFO_SUBTITLE_TIMED_OUT-> println("MEDIA_INFO_SUBTITLE_TIMED_OUT") } true } mediaPlayer.setOnErrorListener{ _, i: Int, i1: Int -> println("Error Listener.... $i, $i1") true } binding.audioPlayer.visible(true) mediaPlayer.start() binding.audioOverflow.setOnClickListener { val popup = PopupMenu(context, binding.audioOverflow) val inflater: MenuInflater = popup.menuInflater inflater.inflate(R.menu.audio_overflow, popup.menu) popup.setOnMenuItemClickListener { menuItem -> when(menuItem.itemId){ R.id.audio_overflow_save_file -> {} R.id.audio_overflow_dismiss -> { mediaPlayer.stop() binding.audioPlayer.visible(false) } } true } MenuCompat.setGroupDividerEnabled(popup.menu, true) popup.show() } } }