package Ġcom . ni uc ube . players dk . player ĊĊ Ċ import Ġandroid . content . Context Ċ import Ġandroid . media . Audio Manager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . view . Surface Ċ import Ġcom . ni uc ube . players dk . player . utils . P aly er Util Ċ Ċ abstract Ġclass ĠAbs Player Engine ( protected Ġval Ġcontext : ĠContext ) Ġ: ĠI Player Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġlisteners Ġ= ĠArrayList < Player Status Listener >() ĊĠĠĠ Ġprotected Ġvar Ġm Player Config Ġ= ĠPlayer Config () ĊĠĠĠ Ġprivate Ġvar Ġorigin Uri : ĠUri ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar ĠmCurrent State Ġ= ĠPlayer Status . STATE _ IDLE ĊĠĠĠ Ġprivate Ġvar Ġis Loss Pause Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġtag Nam Ġ= "" ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġmedia _ Player Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠI JK _ Player Ġ= Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġaudio Focus ChangeListener : ĠAudio Manager . On Audio Focus ChangeListener Ġ= ĊĠĠĠĠĠĠĠ ĠAudio Manager . On Audio Focus ChangeListener Ġ{ Ġfocus Change Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( focus Change ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA UDIO FOCUS _ GAIN ï¼ļ ä½ł å·²ç»ı èİ·å¾Ĺ éŁ³ é¢ĳ çĦ ¦ çĤ¹ ï¼Ľ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA UDIO FOCUS _ LO SS ï¼ļ ä½ł å·²ç»ı å¤± åİ» éŁ³ é¢ĳ çĦ ¦ çĤ¹ å¾Ī éķ¿ æĹ¶éĹ´ äºĨ ï¼Į å¿ħé¡» ç»Ī æŃ¢ æīĢæľīçļĦ éŁ³ é¢ĳ æĴŃæĶ¾ ãĢĤ åĽłä¸º éķ¿ æĹ¶éĹ´ çļĦ å¤± åİ» çĦ ¦ çĤ¹ åĲİ ï¼Į ä¸į åºĶè¯¥ åľ¨ æľŁ æľĽ æľī çĦ ¦ çĤ¹ è¿ĶåĽŀ ï¼Į è¿Ļ æĺ¯ä¸Ģä¸ª å°½ åı¯èĥ½ æ¸ħ éĻ¤ ä¸į çĶ¨ èµĦæºĲ çļĦ å¥½ ä½įç½® ãĢĤ ä¾ĭå¦Ĥ ï¼Į åºĶè¯¥ åľ¨ æŃ¤ æĹ¶ éĩĬæĶ¾ MediaPlayer å¯¹è±¡ ï¼Ľ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// AUDIO FOCUS _ LO SS _ TRAN SI ENT ï¼ļ è¿Ļ è¯´æĺİ ä½ł ä¸´ æĹ¶ å¤± åİ» äºĨ éŁ³ é¢ĳ çĦ ¦ çĤ¹ ï¼Į ä½Ĩæĺ¯ åľ¨ ä¸į ä¹ħ å°±ä¼ļ åĨį è¿ĶåĽŀ æĿ¥ ãĢĤ æŃ¤ æĹ¶ ï¼Į ä½ł å¿ħé¡» ç»Ī æŃ¢ æīĢæľīçļĦ éŁ³ é¢ĳ æĴŃæĶ¾ ï¼Į ä½Ĩæĺ¯ ä¿ĿçķĻ ä½łçļĦ æĴŃæĶ¾ èµĦæºĲ ï¼Į åĽłä¸º åı¯èĥ½ ä¸į ä¹ħ å°±ä¼ļ è¿ĶåĽŀ æĿ¥ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA UDIO FOCUS _ LO SS _ TRAN SI ENT _ CAN _ DU CK ï¼ļ è¿Ļ è¯´æĺİ ä½ł å·²ç»ı ä¸´ æĹ¶ å¤± åİ» äºĨ éŁ³ é¢ĳ çĦ ¦ çĤ¹ ï¼Į ä½Ĩ åħģè®¸ ä½ł å®ī éĿĻ çļĦ æĴŃæĶ¾ éŁ³ é¢ĳ ï¼Ī ä½İ éŁ³ éĩı ï¼īï¼Į èĢĮä¸įæĺ¯ å®Įåħ¨ çļĦ ç»Ī æŃ¢ éŁ³ é¢ĳ æĴŃæĶ¾ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAudio Manager . AUDIO FOCUS _ LO SS _ TRAN SI ENT // Pause Ġplayback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Playing ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Loss Pause Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAudio Manager . AUDIO FOCUS _ GAIN // Resume Ġplayback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Loss Pause Ġ&& Ġis Paused ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresume () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Loss Pause Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAudio Manager . AUDIO FOCUS _ LO SS _ TRAN SI ENT _ CAN _ DU CK // ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAudio Manager . AUDIO FOCUS _ LO SS // Stop Ġplayback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Audio Manager : ĠAudio Manager Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaudio Manager Ġ= Ġcontext . getSystem Service ( Context . AUDIO _ SERVICE ) Ġas ĠAudio Manager ĊĠĠĠĠĠĠĠ Ġaudio Manager ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġm Player Status Listener Ġ= Ġobject Ġ: ĠPlayer Status Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Play Mode Changed ( model : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Play Mode Changed ( model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Play StateChanged ( status : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Play StateChanged ( status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun ĠgetCurrent Url (): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġorigin Uri ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfinal Ġoverride Ġfun ĠsetUp ( uir : ĠUri , Ġheaders : ĠMap < String , ĠString > ?, Ġpre Loading : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġu ir . toString () ĊĠĠĠĠĠĠĠ Ġorigin Uri Ġ= Ġu ir ĊĠĠĠĠĠĠĠ ĠsetUp After Deal Url ( uir , Ġheaders , Ġpre Loading ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġreq est F ou ces () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Loss Pause Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Audio Manager . request Audio Focus ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Focus ChangeListener , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAudio Manager . STREAM _ M US IC , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAudio Manager . AUDIO FOCUS _ GAIN ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġsave P otion () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Playing () Ġ|| Ġis Buffer ing Playing () Ġ|| Ġis Buffer ing Paused () Ġ|| Ġis Paused ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP aly er Util . save Play Position ( context , Ġorigin Uri ?. path , ĠgetCurrent Position (). toInt ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( is Completed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP aly er Util . save Play Position ( context , Ġorigin Uri ?. path , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun ĠgetLast Position (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠP aly er Util . get Saved Play Position ( context , Ġorigin Uri ?. path ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġabstract Ġfun ĠsetUp After Deal Url ( uir : ĠUri , Ġheaders : ĠMap < String , ĠString > ?, Ġpre Loading : ĠBoolean ) ĊĊĊĠĠĠ Ġoverride Ġfun Ġset Player Config ( player Config : ĠPlayer Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Player Config Ġ= Ġplayer Config ĊĠĠĠĠĠĠĠ Ġread Player Config () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Player Config (): ĠPlayer Config Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Player Config ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrelease Player () Ġ{ ĊĠĠĠĠĠĠĠ ĠmCurrent State Ġ= ĠPlayer Status . STATE _ IDLE ĊĠĠĠĠĠĠĠ Ġm Audio Manager . ab and on Audio Focus ( audio Focus ChangeListener ) ĊĠĠĠĠĠĠĠ Ġm Player Status Listener . on Play StateChanged ( m Current State ) ĊĠĠĠĠĠĠĠ Ġsave P otion () ĊĠĠĠĠĠĠĠ ĠRuntime . get Runtime (). gc () ĊĠĠĠĠĠĠĠ Ġlisteners . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġread Player Config () ĊĊĠĠĠ Ġoverride Ġfun Ġadd Play Status Listener ( list er : ĠPlayer Status Listener , Ġadd : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( add ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . add ( list er ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . remove ( list er ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġset Surface ( surface : ĠSurface ) ĊĊĠĠĠ Ġabstract Ġfun Ġset On Video Size Changed Listener ( video Size Changed Listener : ĠOn Video Size Changed Listener ) ĊĊĊĠĠĠ Ġinterface ĠOn Video Size Changed Listener { ĊĠĠĠĠĠĠĠ Ġfun Ġon Video Size Changed ( mp : ĠAbs Player Engine , Ġwidth : ĠInt , Ġheight : ĠInt ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Rotation Info ( rotation : Float ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Idle (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠmCurrent State Ġ== ĠPlayer Status . STATE _ IDLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Pre paring (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠmCurrent State Ġ== ĠPlayer Status . STATE _ PRE PAR ING ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Prepared (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠmCurrent State Ġ== ĠPlayer Status . STATE _ PRE PARE D ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Buffer ing Playing (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠmCurrent State Ġ== ĠPlayer Status . STATE _ BUFFER ING _ PLAY ING ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Buffer ing Paused (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠmCurrent State Ġ== ĠPlayer Status . STATE _ BUFFER ING _ PA USED ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġis Paused (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠmCurrent State Ġ== ĠPlayer Status . STATE _ PA USED Ġ|| Ġis Buffer ing Paused () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Error (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠmCurrent State Ġ== ĠPlayer Status . STATE _ ERROR ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Completed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠmCurrent State Ġ== ĠPlayer Status . STATE _ COMPLETED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Pre Loading (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠmCurrent State Ġ== ĠPlayer Status . STATE _ PRE LOADING ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Pre Loaded (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠmCurrent State Ġ== ĠPlayer Status . STATE _ PRE LOADED _ WAIT ING ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġset Volume ( volume : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Audio Manager . set Stream Volume ( Audio Manager . STREAM _ M US IC , Ġvolume , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetCurrent Play Status (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠmCurrent State ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetMax Volume (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Audio Manager . get Stream Max Volume ( Audio Manager . STREAM _ M US IC ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Volume (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Audio Manager . get Stream Volume ( Audio Manager . STREAM _ M US IC ) ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ