diff --git a/app/src/main/kotlin/com/tutpro/baresip/CallDetailsActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/CallDetailsActivity.kt index a8b303d0..b10f7b20 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/CallDetailsActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/CallDetailsActivity.kt @@ -1,5 +1,6 @@ package com.tutpro.baresip +import android.media.MediaPlayer import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.MenuItem @@ -11,6 +12,8 @@ class CallDetailsActivity : AppCompatActivity() { private lateinit var binding: ActivityCallDetailsBinding private lateinit var aor: String private lateinit var peer: String + private val decPlayer = MediaPlayer() + private val encPlayer = MediaPlayer() private var position = 0 private val onBackPressedCallback = object : OnBackPressedCallback(true) { @@ -38,7 +41,8 @@ class CallDetailsActivity : AppCompatActivity() { headerView.text = headerText 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) } @@ -65,6 +69,10 @@ class CallDetailsActivity : AppCompatActivity() { private fun goBack() { BaresipService.activities.remove("call_details,$aor,$peer,$position") + decPlayer.stop() + decPlayer.release() + encPlayer.stop() + encPlayer.release() finish() } diff --git a/app/src/main/kotlin/com/tutpro/baresip/CallDetailsAdapter.kt b/app/src/main/kotlin/com/tutpro/baresip/CallDetailsAdapter.kt index 11c8e17b..1a80d031 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/CallDetailsAdapter.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/CallDetailsAdapter.kt @@ -17,8 +17,9 @@ import java.text.SimpleDateFormat import java.util.* -class CallDetailsAdapter(private val ctx: Context, private val rows: ArrayList) : - ArrayAdapter(ctx, R.layout.call_detail_row, rows) { +class CallDetailsAdapter(private val ctx: Context, private val rows: ArrayList, + private val decPlayer: MediaPlayer, private val encPlayer: MediaPlayer) : + ArrayAdapter(ctx, R.layout.call_detail_row, rows) { private val layoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater @@ -78,14 +79,15 @@ class CallDetailsAdapter(private val ctx: Context, private val rows: ArrayList? = null viewHolder.durationView.setOnClickListener { - if (players == null || (!players!![0].isPlaying && !players!![1].isPlaying)) { - players = Utils.playRecording(ctx, recording) - } else { - players!![0].stop() - players!![1].stop() - players = null + if (!decPlayer.isPlaying && !encPlayer.isPlaying) { + decPlayer.reset() + encPlayer.reset() + Utils.playRecording(ctx, viewHolder.durationView, recording, decPlayer, encPlayer) + } else if (decPlayer.isPlaying && encPlayer.isPlaying) { + decPlayer.stop() + encPlayer.stop() + viewHolder.durationView.setTextColor(ContextCompat.getColor(ctx, R.color.colorItemText)) } } } diff --git a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt index b10aa1d7..93d33775 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt @@ -995,10 +995,9 @@ object Utils { } } - fun playRecording(ctx: Context, recording: Array): Array { - Log.d(TAG, "Playing recording $recording") - val decPlayer = MediaPlayer() - val encPlayer = MediaPlayer() + fun playRecording(ctx: Context, textView: TextView, recording: Array, + decPlayer: MediaPlayer, encPlayer: MediaPlayer) { + Log.d(TAG, "Playing recordings ${recording[0]} and ${recording[1]}") decPlayer.apply { setAudioAttributes( AudioAttributes.Builder() @@ -1017,12 +1016,13 @@ object Utils { setOnPreparedListener { it.start() decPlayer.start() + textView.setTextColor(ContextCompat.getColor(ctx, R.color.colorAccent)) Log.d(TAG, "Started players") } setOnCompletionListener { Log.d(TAG, "Stopping encPlayer") it.stop() - it.release() + textView.setTextColor(ContextCompat.getColor(ctx, R.color.colorItemText)) } try { val file = recording[0] @@ -1042,7 +1042,6 @@ object Utils { setOnCompletionListener { Log.d(TAG, "Stopping decPlayer") it.stop() - it.release() } try { val file = recording[1] @@ -1058,7 +1057,7 @@ object Utils { Log.e(TAG, "decPlayer Exception: $e") } } - return arrayOf(encPlayer, decPlayer) + return } @Suppress("unused")