package Ġcom . l zx . music lib . example Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . media . MediaPlayer Ċ import Ġcom . l zx . music lib . example . Focus And Lock Manager . Companion . AUDIO _ NO _ FOCUS _ CAN _ DU CK Ċ import Ġcom . l zx . music lib . example . Focus And Lock Manager . Companion . AUDIO _ NO _ FOCUS _ NO _ DU CK Ċ import Ġcom . l zx . music lib . example . Focus And Lock Manager . Companion . VOLUME _ DU CK Ċ import Ġcom . l zx . music lib . example . Focus And Lock Manager . Companion . VOLUME _ NORMAL Ċ import Ġcom . l zx . st arr ys ky . playback . offline . IC ache Ċ import Ġcom . l zx . st arr ys ky . playback . player . Playback Ċ import Ġcom . l zx . st arr ys ky . provider . Song Info Ċ import Ġcom . l zx . st arr ys ky . utils . St arry Sky Utils Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠMedia Player Ġ ç®Ģåįķ demo Ċ Ġ*/ Ċ class ĠMedia Playback ( context : ĠContext , Ġprivate Ġval Ġplayback Cache : ĠI Cache ?) Ġ: ĠPlay back , ĊĠĠĠ ĠMedia Player . On Prepared Listener , ĊĠĠĠ ĠMedia Player . On Completion Listener , ĊĠĠĠ ĠMedia Player . OnError Listener , ĊĠĠĠ ĠMedia Player . On Buffer ing Update Listener , ĊĠĠĠ ĠFocus And Lock Manager . Audio Focus ChangeListener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġmedia Player : ĠMedia Player ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Callback : ĠPlay back . Callback ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Play State : ĠInt Ġ= ĠPlay back . STATE _ IDLE ĊĊĠĠĠ Ġprivate Ġvar Ġm MediaPlayer Null Is Stopped Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Play On Focus Gain Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġcurr Buffered Position : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar ĠmCurrent Media Id : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġm Curr Volume : ĠFloat Ġ= Ġ 0 F ĊĠĠĠ Ġprivate Ġvar Ġm Error Progress : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcurr Song Info : ĠSong Info ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Focus And Lock Manager : ĠFocus And Lock Manager ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Focus And Lock Manager Ġ= ĠFocus And Lock Manager ( context , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġplayback State : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( media Player Ġ== Ġnull ) ĠPlay back . STATE _ IDLE Ġelse Ġm Play State ĊĊĠĠĠ Ġoverride Ġval Ġis Connected : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġval Ġis Playing : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Play On Focus Gain Ġ|| Ġ( media Player Ġ!= Ġnull Ġ&& Ġm Play State Ġ== ĠPlay back . STATE _ PLAY ING ) ĊĊĠĠĠ Ġoverride Ġval Ġcurrent Stream Position : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmedia Player ?. current Position ?. to Long () Ġ?: Ġ 0 L ĊĊĠĠĠ Ġoverride Ġval Ġbuffered Position : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcurr Buffered Position ĊĊĠĠĠ Ġoverride Ġval Ġduration : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmedia Player ?. duration ?. to Long () Ġ?: Ġ 0 ĊĊĠĠĠ Ġoverride Ġvar Ġcurrent Media Id : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠmCurrent Media Id ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Media Id Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġvolume : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Curr Volume ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Curr Volume Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. set Volume ( value , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġcurr Play Info : ĠSong Info ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcurr Song Info ĊĊĠĠĠ Ġoverride Ġval Ġaudio SessionId : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmedia Player ?. audio SessionId Ġ?: Ġ 0 ĊĊĠĠĠ Ġprivate Ġfun Ġrelease Resources ( release Player : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSto ps Ġand Ġreleases Ġplayer Ġ( if Ġrequested Ġand Ġavailable ). ĊĠĠĠĠĠĠĠ Ġif Ġ( release Player ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. release () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm MediaPlayer Null Is Stopped Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Play On Focus Gain Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Focus And Lock Manager ?. release Wifi Lock () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Focus And Lock Manager ?. give Up Audio Focus () ĊĠĠĠĠĠĠĠ Ġrelease Resources ( true ) ĊĠĠĠĠĠĠĠ Ġm Play State Ġ= ĠPlay back . STATE _ STOP PED ĊĠĠĠĠĠĠĠ Ġm Callback ?. on Playback Status Changed ( curr Song Info , Ġm Play State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġplay ( song Info : ĠSong Info , Ġis Play When Ready : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Play On Focus Gain Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Focus And Lock Manager ?. try To Get Audio Focus () ĊĊĠĠĠĠĠĠĠ Ġval Ġmedia Id Ġ= Ġsong Info . song Id ĊĠĠĠĠĠĠĠ Ġif Ġ( media Id . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurr Song Info Ġ= Ġsong Info ĊĠĠĠĠĠĠĠ Ġval Ġmedia Has Changed Ġ= Ġmedia Id Ġ!= Ġcurrent Media Id ĊĠĠĠĠĠĠĠ Ġif Ġ( media Has Changed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Media Id Ġ= Ġmedia Id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( media Has Changed Ġ|| Ġmedia Player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// url Ġ å¤ĦçĲĨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsource Ġ= Ġsong Info . song Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( source . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback ?. on Playback Error ( curr Play Info , Ġ" æĴŃæĶ¾ Ġurl Ġ ä¸ºç©º ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġsource . replace (" Ġ". to Regex (), Ġ"% 2 0 ") Ġ// ĠE scape Ġspaces Ġfor ĠURL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä»£çĲĨ url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproxy Url Ġ= Ġplayback Cache ?. get Proxy Url ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġif Ġ( proxy Url . isNull OrEmpty ()) Ġsource Ġelse Ġproxy Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayback Cache ?. start Cache ( source ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( media Player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player Ġ= ĠMedia Player () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å½ĵ è£ħ è½½ æµģ åªĴ ä½ĵ å®Į æ¯ķ çļĦæĹ¶åĢĻ åĽŀè°ĥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. setOn Prepared Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å½ĵ æµģ åªĴ ä½ĵ æĴŃæĶ¾ å®Į æ¯ķ çļĦæĹ¶åĢĻ åĽŀè°ĥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. setOn Completion Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å½ĵ æĴŃæĶ¾ ä¸Ń åıĳçĶŁ éĶĻè¯¯ çļĦæĹ¶åĢĻ åĽŀè°ĥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. setOn Error Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. setOn Buffer ing Update Listener ( this ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġchange Playback Parameters () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. reset () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. set DataSource ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. prepare Async () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Play State Ġ= ĠPlay back . STATE _ BUFFER ING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback ?. on Playback Status Changed ( curr Song Info , Ġm Play State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Focus And Lock Manager ?. acquire Wifi Lock () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Player State () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepared ( mp : ĠMedia Player ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġconfigure Player State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Completion ( mp : ĠMedia Player ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Play State Ġ= ĠPlay back . STATE _ IDLE ĊĠĠĠĠĠĠĠ Ġm Callback ?. on Playback Completion () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError ( mp : ĠMedia Player ?, Ġwhat : ĠInt , Ġextra : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠSt arry Sky Utils . log (" onError Ġ= Ġ$ what ") ĊĠĠĠĠĠĠĠ Ġm Callback ?. on Playback Error ( curr Song Info , Ġ" MediaPlayer Ġerror Ġ$ what ") ĊĠĠĠĠĠĠĠ Ġm Play State Ġ= ĠPlay back . STATE _ ERROR ĊĠĠĠĠĠĠĠ Ġm Error Progress Ġ= Ġcurr Buffered Position ĊĠĠĠĠĠĠĠ ĠmCurrent Media Id Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Buffer ing Update ( mp : ĠMedia Player ?, Ġpercent : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurr Buffered Position Ġ= Ġpercent Ġ* Ġduration ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpause () Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Player ?. pause () ĊĠĠĠĠĠĠĠ Ġm Play State Ġ= ĠPlay back . STATE _ PA USED ĊĠĠĠĠĠĠĠ Ġm Callback ?. on Playback Status Changed ( curr Song Info , Ġm Play State ) ĊĠĠĠĠĠĠĠ Ġrelease Resources ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġseek To ( position : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Player ?. seek To ( position . toInt ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fast Forward () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Rew ind () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Der ail le ur ( refer : ĠBoolean , Ġmultiple : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Playback Speed (): ĠFloat Ġ= Ġ 1 . 0 f ĊĊĠĠĠ Ġoverride Ġfun Ġset Callback ( callback : ĠPlay back . Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Callback Ġ= Ġcallback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Audio Focus Loss Transient () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Play On Focus Gain Ġ= Ġmedia Player Ġ!= Ġnull Ġ&& Ġm Play State Ġ== ĠPlay back . STATE _ PLAY ING ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Audio Focus Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Player ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Player State () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Player State () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Focus And Lock Manager ?. current Audio Focus State Ġ== ĠA UDIO _ NO _ FOCUS _ NO _ DU CK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpause () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Focus And Lock Manager ?. current Audio Focus State Ġ== ĠA UDIO _ NO _ FOCUS _ CAN _ DU CK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. set Volume ( VOLUME _ DU CK , ĠV OL UME _ DU CK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. set Volume ( VOLUME _ NORMAL , ĠV OL UME _ NORMAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Play On Focus Gain ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Play State Ġ= ĠPlay back . STATE _ PLAY ING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Play On Focus Gain Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback ?. on Playback Status Changed ( curr Song Info , Ġm Play State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Error Progress Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek To ( m Error Progress ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Error Progress Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }