package Ġcom . tal entic a . android kotlin . aud iop layer Ċ Ċ import Ġandroid . media . MediaPlayer Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Power Manager Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . OnClickListener Ċ import Ġandroid . widget . Image Button Ċ import Ġandroid . widget . Seek Bar Ċ import Ġandroid . widget . TextView Ċ import Ġcom . tal entic a . android kotlin . aud iop layer . utils . Log Helper Ċ import Ġcom . tal entic a . android kotlin . aud iop layer . utils . Seek Bar Handler ĊĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠSeek Bar . On Seek Bar ChangeListener , ĠMedia Player . On Completion Listener , ĠMedia Player . OnError Listener , ĊĠĠĠĠĠĠĠ ĠMedia Player . On Prepared Listener , ĠMedia Player . On Seek Complete Listener , ĠOn ClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠLog Helper . make Log Tag (" MainActivity ") ĊĠĠĠ Ġprivate Ġvar Ġm MediaPlayer : ĠMedia Player ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Play Pause Button : ĠImage Button ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Seek bar : Seek Bar ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Timer : TextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġseek Bar Handler : Seek Bar Handler ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġm Seek bar Ġ= ĠfindViewById < Seek Bar >( R . id . progressbar ) ĊĠĠĠĠĠĠĠ Ġm Seek bar ?. setOn Seek Bar ChangeListener ( this ) ĊĊĠĠĠĠĠĠĠ Ġm Play Pause Button Ġ= ĠfindViewById < Image Button >( R . id . play _ pause _ btn ) ĊĠĠĠĠĠĠĠ Ġm Play Pause Button ?. setOnClickListener ( this ) ĊĊĠĠĠĠĠĠĠ Ġm Timer Ġ= ĠfindViewById < TextView >( R . id . tv _ progress ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( v ?. id Ġ== ĠR . id . play _ pause _ btn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Playback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle Playback () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m MediaPlayer ?. is Playing Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpause Audio () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate MediaPlayer IfNeeded () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay Audio () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMakes Ġsure Ġthe Ġmedia Ġplayer Ġexists Ġand Ġhas Ġbeen Ġreset . ĠThis Ġwill Ġcreate ĊĠĠĠĠ Ġ* Ġthe Ġmedia Ġplayer Ġif Ġneeded , Ġor Ġreset Ġthe Ġexisting Ġmedia Ġplayer Ġif Ġone ĊĠĠĠĠ Ġ* Ġalready Ġexists . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate MediaPlayer IfNeeded () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" create MediaPlayer IfNeeded ") ĊĠĠĠĠĠĠĠ Ġif Ġ( m MediaPlayer Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm MediaPlayer Ġ= ĠMedia Player . create ( this , ĠR . raw . simp ler ock ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġthe Ġmedia Ġplayer Ġwill Ġacquire Ġa Ġwake - lock Ġwhile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġplaying . ĠIf Ġwe Ġdon 't Ġdo Ġthat , Ġthe ĠCPU Ġmight Ġgo Ġto Ġsleep Ġwhile Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsong Ġis Ġplaying , Ġcausing Ġplayback Ġto Ġstop . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm MediaPlayer ?. set Wake Mode ( this . getApplicationContext (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPower Manager . PAR TIAL _ WAKE _ LOCK ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġwant Ġthe Ġmedia Ġplayer Ġto Ġnotify Ġus Ġwhen Ġit 's Ġready Ġpre paring , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġwhen Ġit 's Ġdone Ġplaying : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm MediaPlayer ?. setOn Prepared Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm MediaPlayer ?. setOn Completion Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm MediaPlayer ?. setOn Error Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm MediaPlayer ?. setOn Seek Complete Listener ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġplay Audio () Ġ{ ĊĠĠĠĠĠĠĠ Ġm MediaPlayer ?. start () ĊĠĠĠĠĠĠĠ Ġseek Bar Handler Ġ= ĠSeek Bar Handler ( m Seek bar , Ġm MediaPlayer , Ġis View On Ġ= Ġtrue , Ġtimer Ġ= Ġm Timer !! ) ĊĠĠĠĠĠĠĠ Ġseek Bar Handler ?. execute () ĊĠĠĠĠĠĠĠ Ġval Ġpause Draw ab ale Ġ= ĠContext Compat . get Drawable ( this , Ġandroid . R . drawable . ic _ media _ pause ) ĊĠĠĠĠĠĠĠ Ġm Play Pause Button ?. setImage Drawable ( pause Draw ab ale ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpause Audio () Ġ{ ĊĠĠĠĠĠĠĠ Ġseek Bar Handler ?. cancel ( true ) ĊĠĠĠĠĠĠĠ Ġm MediaPlayer ?. pause () ĊĠĠĠĠĠĠĠ Ġval Ġplay Draw ab ale Ġ= ĠContext Compat . get Drawable ( this , Ġandroid . R . drawable . ic _ media _ play ) ĊĠĠĠĠĠĠĠ Ġm Play Pause Button ?. setImage Drawable ( play Draw ab ale ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRelease s Ġresources Ġused Ġby Ġthe Ġservice Ġfor Ġplayback . ĠThis Ġincludes Ġthe ĊĠĠĠĠ Ġ* Ġ" foreground Ġservice " Ġstatus , Ġthe Ġwake Ġlocks Ġand Ġpossibly Ġthe ĠMedia Player . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġrelease MediaPlayer ĠIndicates Ġwhether Ġthe ĠMedia ĠPlayer Ġshould Ġalso ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġbe Ġreleased Ġor Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrelax Resources ( release MediaPlayer : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Helper . d ( TAG , Ġ" relax Resources . Ġrelease MediaPlayer =", Ġrelease MediaPlayer ) ĊĊĠĠĠĠĠĠĠ Ġseek Bar Handler ?. cancel ( true ) ĊĠĠĠĠĠĠĠ Ġseek Bar Handler Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ// Ġstop Ġand Ġrelease Ġthe ĠMedia ĠPlayer , Ġif Ġit 's Ġavailable ĊĠĠĠĠĠĠĠ Ġif Ġ( release MediaPlayer Ġ&& Ġm MediaPlayer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm MediaPlayer ?. reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm MediaPlayer ?. release () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm MediaPlayer Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġif Ġ( m MediaPlayer ?. is Playing Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpause Audio () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġrelax Resources ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Completion ( mp : ĠMedia Player ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġrelax Resources ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġplay Draw ab ale Ġ= ĠContext Compat . get Drawable ( this , Ġandroid . R . drawable . ic _ media _ play ) ĊĠĠĠĠĠĠĠ Ġm Play Pause Button ?. setImage Drawable ( play Draw ab ale ) ĊĠĠĠĠĠĠĠ Ġm Seek bar ?. progress Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError ( mp : ĠMedia Player ?, Ġwhat : ĠInt , Ġextra : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepared ( mp : ĠMedia Player ?) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Seek Complete ( mp : ĠMedia Player ?) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( from User ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogress Ġ= Ġseek Bar ?. progress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm MediaPlayer ?. seek To ( progress !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{ ĊĠĠĠ Ġ} Ċ } Ċ