Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package asia.ifarmer.farmers.views.custom
- import android.app.Activity
- import android.content.Context
- import android.media.AudioAttributes
- import android.media.MediaPlayer
- import android.os.Handler
- import android.os.Looper
- import android.os.PowerManager
- import android.util.AttributeSet
- import android.view.LayoutInflater
- import android.widget.LinearLayout
- import androidx.core.content.ContextCompat
- import asia.ifarmer.farmers.R
- import asia.ifarmer.farmers.databinding.LayoutCustomAudioBinding
- import com.google.android.material.slider.Slider
- class CustomAudio//initViews(context)
- (context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
- private lateinit var binding: LayoutCustomAudioBinding
- private var audioUrl: String = ""
- var endTime: String = ""
- var mHandler: Handler = Handler(Looper.getMainLooper())
- var duration: Long = 0
- var minutes: Long = 0
- var seconds: Long = 0
- var mediaPlayer: MediaPlayer? = null
- fun Mediainit(url: String, activity: Activity) {
- try {
- if (mediaPlayer == null) {
- binding = LayoutCustomAudioBinding.inflate(LayoutInflater.from(context), this, true)
- audioUrl = url
- /*mediaPlayer = MediaPlayersingleTon.getInstance()
- mediaPlayer.apply {
- setAudioAttributes(
- AudioAttributes.Builder()
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .setUsage(AudioAttributes.USAGE_MEDIA)
- .build()
- )
- setDataSource(audioUrl)
- prepare() // might take long! (for buffering, etc)
- //start()
- setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK)
- *//*setOnPreparedListener {
- }*//*
- }*/
- mediaPlayer = MediaPlayer().apply {
- setAudioAttributes(
- AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .setUsage(AudioAttributes.USAGE_MEDIA).build()
- )
- setDataSource(audioUrl)
- prepare() // might take long! (for buffering, etc)
- //start()
- setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK)
- }
- binding.ivAudioAction.setOnClickListener {
- try {
- if (mediaPlayer != null) {
- if (mediaPlayer!!.isPlaying) {
- mediaPlayer!!.pause()
- binding.ivAudioAction.setImageResource(R.drawable.ic_play_24)
- } else {
- mediaPlayer!!.start()
- binding.ivAudioAction.setImageResource(R.drawable.ic_pause_24)
- }
- } else {
- mediaPlayer = MediaPlayer().apply {
- setAudioAttributes(
- AudioAttributes.Builder()
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .setUsage(AudioAttributes.USAGE_MEDIA).build()
- )
- setDataSource(audioUrl)
- prepare() // might take long! (for buffering, etc)
- start()
- setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK)
- }
- mediaPlayer!!.setOnPreparedListener {
- binding.ivAudioAction.setImageResource(R.drawable.ic_pause_24)
- activity.runOnUiThread(object : Runnable {
- override fun run() {
- try {
- if (mediaPlayer!!.currentPosition.compareTo(mediaPlayer!!.duration) < 1) {
- binding.lpAudioProgress.value =
- mediaPlayer!!.currentPosition.toFloat()
- } else {
- binding.lpAudioProgress.value =
- mediaPlayer!!.duration.toFloat()
- }
- binding.tvAudioDuration.text = buildString {
- append(((mediaPlayer!!.currentPosition / 1000) / 60).toString() + ":" + ((mediaPlayer!!.currentPosition / 1000) % 60))
- append("/")
- append(endTime)
- }
- mHandler.postDelayed(this, 1000)
- } catch (e: Exception) {
- mHandler.removeCallbacks(this)
- }
- }
- })
- }
- mediaPlayer!!.setOnCompletionListener {
- binding.ivAudioAction.setImageResource(R.drawable.ic_play_24)
- //mediaPlayer.release();
- }
- }
- } catch (e: Exception) {
- e.printStackTrace()
- Mediainit(url, activity)
- //binding.ivAudioAction.setImageResource(R.drawable.ic_play_24)
- }
- }
- mediaPlayer!!.setOnPreparedListener {
- binding.ivAudioAction.setImageResource(R.drawable.ic_play_24)
- }
- duration = mediaPlayer!!.duration.toLong()
- minutes = (duration / 1000) / 60
- seconds = ((duration / 1000) % 60)
- //endTime = (mediaPlayer.duration / 1000 % 60).toString()
- endTime = "$minutes:$seconds"
- binding.lpAudioProgress.valueTo = mediaPlayer!!.duration.toFloat()
- binding.tvAudioDuration.text = endTime
- activity.runOnUiThread(object : Runnable {
- override fun run() {
- try {
- /*if (mediaPlayer!!.currentPosition > mediaPlayer!!.duration) {
- binding.lpAudioProgress.value = mediaPlayer!!.duration.toFloat()
- } else {
- binding.lpAudioProgress.value = mediaPlayer!!.currentPosition.toFloat()
- }*/
- if (mediaPlayer!!.currentPosition.compareTo(mediaPlayer!!.duration) < 1) {
- binding.lpAudioProgress.value =
- mediaPlayer!!.currentPosition.toFloat()
- } else {
- binding.lpAudioProgress.value = mediaPlayer!!.duration.toFloat()
- }
- binding.tvAudioDuration.text = buildString {
- append(((mediaPlayer!!.currentPosition / 1000) / 60).toString() + ":" + ((mediaPlayer!!.currentPosition / 1000) % 60))
- append("/")
- append(endTime)
- }
- mHandler.postDelayed(this, 1000)
- } catch (e: Exception) {
- mHandler.removeCallbacks(this)
- }
- }
- })
- binding.lpAudioProgress.addOnChangeListener(Slider.OnChangeListener { slider, value, fromUser ->
- if (fromUser) {
- //mediaPlayer.seekTo((value * 1000).toInt())
- mediaPlayer!!.seekTo(value.toInt())
- mediaPlayer!!.start()
- binding.ivAudioAction.setImageResource(R.drawable.ic_pause_24)
- }
- })
- binding.ivAudioAction.setColorFilter(
- ContextCompat.getColor(
- context,//this@AdvisoryDetailsActivity,
- R.color.semi_white
- )
- )
- mediaPlayer!!.setOnCompletionListener {
- binding.ivAudioAction.setImageResource(R.drawable.ic_play_24)
- //mediaPlayer.release();
- }
- } else {
- mediaPlayer!!.setDataSource(url);
- mediaPlayer!!.prepareAsync();
- }
- } catch (e: Exception) {
- e.printStackTrace()
- }
- }
- fun release() {
- try {
- mediaPlayer?.reset()
- mediaPlayer = null
- binding.ivAudioAction.setImageResource(R.drawable.ic_play_24)
- } catch (e: Exception) {
- e.printStackTrace()
- }
- }
- }
- layout
- <asia.ifarmer.farmers.views.custom.CustomAudio
- android:id="@+id/customAudio"
- android:visibility="gone"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
- LayoutCustomAudioBinding.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:orientation="horizontal">
- <ImageView
- android:id="@+id/ivAudioAction"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="10dp"
- android:layout_marginTop="5dp"
- android:layout_marginEnd="5dp"
- android:layout_marginBottom="5dp"
- android:background="@drawable/circular_button_white"
- android:backgroundTint="@color/dark"
- android:contentDescription="@string/multiple_selection"
- android:padding="@dimen/_6sdp"
- android:src="@drawable/ic_loading"
- app:tint="@color/semi_white" />
- <com.google.android.material.slider.Slider
- android:id="@+id/lpAudioProgress"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_marginStart="0dp"
- android:layout_marginTop="5dp"
- android:layout_marginEnd="0dp"
- android:layout_marginBottom="5dp"
- android:layout_weight="1"
- android:gravity="center"
- app:labelBehavior="gone"
- app:thumbColor="@color/dark"
- app:thumbElevation="0dp"
- app:thumbRadius="0dp"
- app:tickColor="@color/dark"
- app:tickRadiusActive="0dp"
- app:tickVisible="false"
- app:trackColorActive="@color/accent"
- app:trackColorInactive="@color/dark"
- app:trackHeight="12dp" />
- <TextView
- android:id="@+id/tvAudioDuration"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:layout_marginStart="5dp"
- android:layout_marginTop="5dp"
- android:layout_marginEnd="10dp"
- android:layout_marginBottom="5dp"
- android:fontFamily="@font/font_family_normal"
- android:gravity="center"
- android:textColor="@color/dark"
- android:textSize="10sp" />
- </LinearLayout>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement