Advertisement
muhaiminurabir

Custom Audio kotlin

Jan 27th, 2025 (edited)
350
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 11.77 KB | None | 0 0
  1. package asia.ifarmer.farmers.views.custom
  2.  
  3. import android.app.Activity
  4. import android.content.Context
  5. import android.media.AudioAttributes
  6. import android.media.MediaPlayer
  7. import android.os.Handler
  8. import android.os.Looper
  9. import android.os.PowerManager
  10. import android.util.AttributeSet
  11. import android.view.LayoutInflater
  12. import android.widget.LinearLayout
  13. import androidx.core.content.ContextCompat
  14. import asia.ifarmer.farmers.R
  15. import asia.ifarmer.farmers.databinding.LayoutCustomAudioBinding
  16. import com.google.android.material.slider.Slider
  17.  
  18.  
  19. class CustomAudio//initViews(context)
  20.     (context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
  21.     private lateinit var binding: LayoutCustomAudioBinding
  22.     private var audioUrl: String = ""
  23.     var endTime: String = ""
  24.     var mHandler: Handler = Handler(Looper.getMainLooper())
  25.     var duration: Long = 0
  26.     var minutes: Long = 0
  27.     var seconds: Long = 0
  28.     var mediaPlayer: MediaPlayer? = null
  29.     fun Mediainit(url: String, activity: Activity) {
  30.         try {
  31.             if (mediaPlayer == null) {
  32.                 binding = LayoutCustomAudioBinding.inflate(LayoutInflater.from(context), this, true)
  33.                 audioUrl = url
  34.                 /*mediaPlayer = MediaPlayersingleTon.getInstance()
  35.             mediaPlayer.apply {
  36.                 setAudioAttributes(
  37.                     AudioAttributes.Builder()
  38.                         .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
  39.                         .setUsage(AudioAttributes.USAGE_MEDIA)
  40.                         .build()
  41.                 )
  42.                 setDataSource(audioUrl)
  43.                 prepare() // might take long! (for buffering, etc)
  44.                 //start()
  45.                 setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK)
  46.                 *//*setOnPreparedListener {
  47.                 }*//*
  48.             }*/
  49.                 mediaPlayer = MediaPlayer().apply {
  50.                     setAudioAttributes(
  51.                         AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
  52.                             .setUsage(AudioAttributes.USAGE_MEDIA).build()
  53.                     )
  54.                     setDataSource(audioUrl)
  55.                     prepare() // might take long! (for buffering, etc)
  56.                     //start()
  57.                     setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK)
  58.                 }
  59.                 binding.ivAudioAction.setOnClickListener {
  60.                     try {
  61.                         if (mediaPlayer != null) {
  62.                             if (mediaPlayer!!.isPlaying) {
  63.                                 mediaPlayer!!.pause()
  64.                                 binding.ivAudioAction.setImageResource(R.drawable.ic_play_24)
  65.                             } else {
  66.                                 mediaPlayer!!.start()
  67.                                 binding.ivAudioAction.setImageResource(R.drawable.ic_pause_24)
  68.                             }
  69.                         } else {
  70.                             mediaPlayer = MediaPlayer().apply {
  71.                                 setAudioAttributes(
  72.                                     AudioAttributes.Builder()
  73.                                         .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
  74.                                         .setUsage(AudioAttributes.USAGE_MEDIA).build()
  75.                                 )
  76.                                 setDataSource(audioUrl)
  77.                                 prepare() // might take long! (for buffering, etc)
  78.                                 start()
  79.                                 setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK)
  80.                             }
  81.                             mediaPlayer!!.setOnPreparedListener {
  82.                                 binding.ivAudioAction.setImageResource(R.drawable.ic_pause_24)
  83.                                 activity.runOnUiThread(object : Runnable {
  84.                                     override fun run() {
  85.                                         try {
  86.                                             if (mediaPlayer!!.currentPosition.compareTo(mediaPlayer!!.duration) < 1) {
  87.                                                 binding.lpAudioProgress.value =
  88.                                                     mediaPlayer!!.currentPosition.toFloat()
  89.                                             } else {
  90.                                                 binding.lpAudioProgress.value =
  91.                                                     mediaPlayer!!.duration.toFloat()
  92.                                             }
  93.                                             binding.tvAudioDuration.text = buildString {
  94.                                                 append(((mediaPlayer!!.currentPosition / 1000) / 60).toString() + ":" + ((mediaPlayer!!.currentPosition / 1000) % 60))
  95.                                                 append("/")
  96.                                                 append(endTime)
  97.                                             }
  98.                                             mHandler.postDelayed(this, 1000)
  99.                                         } catch (e: Exception) {
  100.                                             mHandler.removeCallbacks(this)
  101.                                         }
  102.                                     }
  103.                                 })
  104.                             }
  105.                             mediaPlayer!!.setOnCompletionListener {
  106.                                 binding.ivAudioAction.setImageResource(R.drawable.ic_play_24)
  107.                                 //mediaPlayer.release();
  108.                             }
  109.                         }
  110.                     } catch (e: Exception) {
  111.                         e.printStackTrace()
  112.                         Mediainit(url, activity)
  113.                         //binding.ivAudioAction.setImageResource(R.drawable.ic_play_24)
  114.                     }
  115.                 }
  116.                 mediaPlayer!!.setOnPreparedListener {
  117.                     binding.ivAudioAction.setImageResource(R.drawable.ic_play_24)
  118.                 }
  119.                 duration = mediaPlayer!!.duration.toLong()
  120.                 minutes = (duration / 1000) / 60
  121.                 seconds = ((duration / 1000) % 60)
  122.                 //endTime = (mediaPlayer.duration / 1000 % 60).toString()
  123.                 endTime = "$minutes:$seconds"
  124.                 binding.lpAudioProgress.valueTo = mediaPlayer!!.duration.toFloat()
  125.                 binding.tvAudioDuration.text = endTime
  126.                 activity.runOnUiThread(object : Runnable {
  127.                     override fun run() {
  128.                         try {
  129.                             /*if (mediaPlayer!!.currentPosition > mediaPlayer!!.duration) {
  130.                                 binding.lpAudioProgress.value = mediaPlayer!!.duration.toFloat()
  131.                             } else {
  132.                                 binding.lpAudioProgress.value = mediaPlayer!!.currentPosition.toFloat()
  133.                             }*/
  134.                             if (mediaPlayer!!.currentPosition.compareTo(mediaPlayer!!.duration) < 1) {
  135.                                 binding.lpAudioProgress.value =
  136.                                     mediaPlayer!!.currentPosition.toFloat()
  137.                             } else {
  138.                                 binding.lpAudioProgress.value = mediaPlayer!!.duration.toFloat()
  139.                             }
  140.  
  141.                             binding.tvAudioDuration.text = buildString {
  142.                                 append(((mediaPlayer!!.currentPosition / 1000) / 60).toString() + ":" + ((mediaPlayer!!.currentPosition / 1000) % 60))
  143.                                 append("/")
  144.                                 append(endTime)
  145.                             }
  146.                             mHandler.postDelayed(this, 1000)
  147.                         } catch (e: Exception) {
  148.                             mHandler.removeCallbacks(this)
  149.                         }
  150.                     }
  151.                 })
  152.                 binding.lpAudioProgress.addOnChangeListener(Slider.OnChangeListener { slider, value, fromUser ->
  153.                     if (fromUser) {
  154.                         //mediaPlayer.seekTo((value * 1000).toInt())
  155.                         mediaPlayer!!.seekTo(value.toInt())
  156.                         mediaPlayer!!.start()
  157.                         binding.ivAudioAction.setImageResource(R.drawable.ic_pause_24)
  158.                     }
  159.                 })
  160.                 binding.ivAudioAction.setColorFilter(
  161.                     ContextCompat.getColor(
  162.                         context,//this@AdvisoryDetailsActivity,
  163.                         R.color.semi_white
  164.                     )
  165.                 )
  166.                 mediaPlayer!!.setOnCompletionListener {
  167.                     binding.ivAudioAction.setImageResource(R.drawable.ic_play_24)
  168.                     //mediaPlayer.release();
  169.                 }
  170.             } else {
  171.                 mediaPlayer!!.setDataSource(url);
  172.                 mediaPlayer!!.prepareAsync();
  173.             }
  174.         } catch (e: Exception) {
  175.             e.printStackTrace()
  176.         }
  177.     }
  178.  
  179.     fun release() {
  180.         try {
  181.             mediaPlayer?.reset()
  182.             mediaPlayer = null
  183.             binding.ivAudioAction.setImageResource(R.drawable.ic_play_24)
  184.         } catch (e: Exception) {
  185.             e.printStackTrace()
  186.         }
  187.     }
  188.  
  189.  
  190. }
  191. layout
  192. <asia.ifarmer.farmers.views.custom.CustomAudio
  193.                     android:id="@+id/customAudio"
  194.                     android:visibility="gone"
  195.                     android:layout_width="match_parent"
  196.                     android:layout_height="wrap_content"/>
  197. LayoutCustomAudioBinding.xml
  198. <?xml version="1.0" encoding="utf-8"?>
  199. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  200.     xmlns:app="http://schemas.android.com/apk/res-auto"
  201.     android:layout_width="match_parent"
  202.     android:layout_height="wrap_content"
  203.     android:gravity="center"
  204.     android:orientation="horizontal">
  205.  
  206.     <ImageView
  207.         android:id="@+id/ivAudioAction"
  208.         android:layout_width="wrap_content"
  209.         android:layout_height="wrap_content"
  210.         android:layout_marginStart="10dp"
  211.         android:layout_marginTop="5dp"
  212.         android:layout_marginEnd="5dp"
  213.         android:layout_marginBottom="5dp"
  214.         android:background="@drawable/circular_button_white"
  215.         android:backgroundTint="@color/dark"
  216.         android:contentDescription="@string/multiple_selection"
  217.         android:padding="@dimen/_6sdp"
  218.         android:src="@drawable/ic_loading"
  219.         app:tint="@color/semi_white" />
  220.  
  221.     <com.google.android.material.slider.Slider
  222.         android:id="@+id/lpAudioProgress"
  223.         android:layout_width="0dp"
  224.         android:layout_height="wrap_content"
  225.         android:layout_marginStart="0dp"
  226.         android:layout_marginTop="5dp"
  227.         android:layout_marginEnd="0dp"
  228.         android:layout_marginBottom="5dp"
  229.         android:layout_weight="1"
  230.         android:gravity="center"
  231.         app:labelBehavior="gone"
  232.         app:thumbColor="@color/dark"
  233.         app:thumbElevation="0dp"
  234.         app:thumbRadius="0dp"
  235.         app:tickColor="@color/dark"
  236.  
  237.         app:tickRadiusActive="0dp"
  238.         app:tickVisible="false"
  239.         app:trackColorActive="@color/accent"
  240.         app:trackColorInactive="@color/dark"
  241.         app:trackHeight="12dp" />
  242.  
  243.     <TextView
  244.         android:id="@+id/tvAudioDuration"
  245.         android:layout_width="wrap_content"
  246.         android:layout_height="wrap_content"
  247.         android:layout_gravity="center"
  248.         android:layout_marginStart="5dp"
  249.         android:layout_marginTop="5dp"
  250.         android:layout_marginEnd="10dp"
  251.         android:layout_marginBottom="5dp"
  252.         android:fontFamily="@font/font_family_normal"
  253.         android:gravity="center"
  254.         android:textColor="@color/dark"
  255.         android:textSize="10sp" />
  256. </LinearLayout>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement