Improved starting/stopping of recording play

This commit is contained in:
Juha Heinanen
2023-03-17 19:21:46 +02:00
parent 2c9628f1f4
commit 308faf3c30
3 changed files with 26 additions and 17 deletions
@@ -1,5 +1,6 @@
package com.tutpro.baresip package com.tutpro.baresip
import android.media.MediaPlayer
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.view.MenuItem import android.view.MenuItem
@@ -11,6 +12,8 @@ class CallDetailsActivity : AppCompatActivity() {
private lateinit var binding: ActivityCallDetailsBinding private lateinit var binding: ActivityCallDetailsBinding
private lateinit var aor: String private lateinit var aor: String
private lateinit var peer: String private lateinit var peer: String
private val decPlayer = MediaPlayer()
private val encPlayer = MediaPlayer()
private var position = 0 private var position = 0
private val onBackPressedCallback = object : OnBackPressedCallback(true) { private val onBackPressedCallback = object : OnBackPressedCallback(true) {
@@ -38,7 +41,8 @@ class CallDetailsActivity : AppCompatActivity() {
headerView.text = headerText headerView.text = headerText
val listView = binding.calls val listView = binding.calls
listView.adapter = CallDetailsAdapter(this, CallsActivity.uaHistory[position].details) listView.adapter = CallDetailsAdapter(this, CallsActivity.uaHistory[position].details,
decPlayer, encPlayer)
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
} }
@@ -65,6 +69,10 @@ class CallDetailsActivity : AppCompatActivity() {
private fun goBack() { private fun goBack() {
BaresipService.activities.remove("call_details,$aor,$peer,$position") BaresipService.activities.remove("call_details,$aor,$peer,$position")
decPlayer.stop()
decPlayer.release()
encPlayer.stop()
encPlayer.release()
finish() finish()
} }
@@ -17,8 +17,9 @@ import java.text.SimpleDateFormat
import java.util.* import java.util.*
class CallDetailsAdapter(private val ctx: Context, private val rows: ArrayList<CallRow.Details>) : class CallDetailsAdapter(private val ctx: Context, private val rows: ArrayList<CallRow.Details>,
ArrayAdapter<CallRow.Details>(ctx, R.layout.call_detail_row, rows) { private val decPlayer: MediaPlayer, private val encPlayer: MediaPlayer) :
ArrayAdapter<CallRow.Details>(ctx, R.layout.call_detail_row, rows) {
private val layoutInflater = private val layoutInflater =
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
@@ -78,14 +79,15 @@ class CallDetailsAdapter(private val ctx: Context, private val rows: ArrayList<C
val recording = rows[position].recording val recording = rows[position].recording
if (recording[0] != "") { if (recording[0] != "") {
viewHolder.durationView.typeface = Typeface.DEFAULT_BOLD viewHolder.durationView.typeface = Typeface.DEFAULT_BOLD
var players: Array<MediaPlayer>? = null
viewHolder.durationView.setOnClickListener { viewHolder.durationView.setOnClickListener {
if (players == null || (!players!![0].isPlaying && !players!![1].isPlaying)) { if (!decPlayer.isPlaying && !encPlayer.isPlaying) {
players = Utils.playRecording(ctx, recording) decPlayer.reset()
} else { encPlayer.reset()
players!![0].stop() Utils.playRecording(ctx, viewHolder.durationView, recording, decPlayer, encPlayer)
players!![1].stop() } else if (decPlayer.isPlaying && encPlayer.isPlaying) {
players = null decPlayer.stop()
encPlayer.stop()
viewHolder.durationView.setTextColor(ContextCompat.getColor(ctx, R.color.colorItemText))
} }
} }
} }
@@ -995,10 +995,9 @@ object Utils {
} }
} }
fun playRecording(ctx: Context, recording: Array<String>): Array<MediaPlayer> { fun playRecording(ctx: Context, textView: TextView, recording: Array<String>,
Log.d(TAG, "Playing recording $recording") decPlayer: MediaPlayer, encPlayer: MediaPlayer) {
val decPlayer = MediaPlayer() Log.d(TAG, "Playing recordings ${recording[0]} and ${recording[1]}")
val encPlayer = MediaPlayer()
decPlayer.apply { decPlayer.apply {
setAudioAttributes( setAudioAttributes(
AudioAttributes.Builder() AudioAttributes.Builder()
@@ -1017,12 +1016,13 @@ object Utils {
setOnPreparedListener { setOnPreparedListener {
it.start() it.start()
decPlayer.start() decPlayer.start()
textView.setTextColor(ContextCompat.getColor(ctx, R.color.colorAccent))
Log.d(TAG, "Started players") Log.d(TAG, "Started players")
} }
setOnCompletionListener { setOnCompletionListener {
Log.d(TAG, "Stopping encPlayer") Log.d(TAG, "Stopping encPlayer")
it.stop() it.stop()
it.release() textView.setTextColor(ContextCompat.getColor(ctx, R.color.colorItemText))
} }
try { try {
val file = recording[0] val file = recording[0]
@@ -1042,7 +1042,6 @@ object Utils {
setOnCompletionListener { setOnCompletionListener {
Log.d(TAG, "Stopping decPlayer") Log.d(TAG, "Stopping decPlayer")
it.stop() it.stop()
it.release()
} }
try { try {
val file = recording[1] val file = recording[1]
@@ -1058,7 +1057,7 @@ object Utils {
Log.e(TAG, "decPlayer Exception: $e") Log.e(TAG, "decPlayer Exception: $e")
} }
} }
return arrayOf(encPlayer, decPlayer) return
} }
@Suppress("unused") @Suppress("unused")