2020-10-09 13:53:58 +00:00
|
|
|
package oppen.ariane.ui.audio_player
|
2020-08-25 11:57:35 +00:00
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
import android.media.MediaMetadataRetriever
|
|
|
|
import android.media.MediaPlayer
|
2020-08-25 12:07:20 +00:00
|
|
|
import android.view.MenuInflater
|
|
|
|
import androidx.appcompat.widget.PopupMenu
|
|
|
|
import androidx.core.view.MenuCompat
|
2020-10-09 13:53:58 +00:00
|
|
|
import oppen.ariane.R
|
|
|
|
import oppen.ariane.databinding.ActivityGemBinding
|
|
|
|
import oppen.ariane.io.GemState
|
2020-08-25 11:57:35 +00:00
|
|
|
import oppen.visible
|
|
|
|
|
|
|
|
object AudioPlayer {
|
|
|
|
|
2020-08-26 16:13:26 +00:00
|
|
|
fun play(context: Context,
|
2020-09-10 16:33:10 +00:00
|
|
|
binding: ActivityGemBinding,
|
2020-08-26 16:13:26 +00:00
|
|
|
mediaPlayer: MediaPlayer,
|
2020-09-09 18:29:23 +00:00
|
|
|
state: GemState.ResponseAudio,
|
|
|
|
onSaveAudio: (state: GemState.ResponseAudio) -> Unit){
|
2020-08-25 11:57:35 +00:00
|
|
|
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"
|
|
|
|
|
2020-08-26 15:41:48 +00:00
|
|
|
mediaPlayer.reset()
|
2020-08-25 11:57:35 +00:00
|
|
|
mediaPlayer.setDataSource(context, state.cacheUri)
|
|
|
|
mediaPlayer.prepare()
|
|
|
|
|
|
|
|
binding.audioPlayButton.setImageResource(R.drawable.vector_pause)
|
|
|
|
|
2020-09-10 21:05:11 +00:00
|
|
|
mediaPlayer.setOnCompletionListener { _ ->
|
2020-08-25 11:57:35 +00:00
|
|
|
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()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-09-10 21:05:11 +00:00
|
|
|
mediaPlayer.setOnInfoListener { _, what, _ ->
|
2020-08-25 11:57:35 +00:00
|
|
|
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()
|
2020-08-25 12:07:20 +00:00
|
|
|
|
|
|
|
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){
|
2020-08-26 16:13:26 +00:00
|
|
|
R.id.audio_overflow_save_file -> {
|
|
|
|
onSaveAudio(state)
|
|
|
|
}
|
2020-08-25 12:07:20 +00:00
|
|
|
R.id.audio_overflow_dismiss -> {
|
|
|
|
mediaPlayer.stop()
|
2020-08-26 16:13:26 +00:00
|
|
|
mediaPlayer.release()
|
2020-08-25 12:07:20 +00:00
|
|
|
binding.audioPlayer.visible(false)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
true
|
|
|
|
}
|
|
|
|
MenuCompat.setGroupDividerEnabled(popup.menu, true)
|
|
|
|
popup.show()
|
|
|
|
}
|
2020-08-25 11:57:35 +00:00
|
|
|
}
|
|
|
|
}
|