package Ġole hak amin sk yi . li vest ream fails . player Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġcom . google . android . ex op layer 2 . Exo Playback Exception Ċ import Ġcom . google . android . ex op layer 2 . Exo Player Ċ import Ġcom . google . android . ex op layer 2 . Player . REPEAT _ MODE _ ONE Ċ import Ġcom . google . android . ex op layer 2 . Player . REPEAT _ MODE _ OFF Ċ import Ġcom . google . android . ex op layer 2 . Player . STATE _ IDLE Ċ import Ġcom . google . android . ex op layer 2 . Player . STATE _ BUFFER ING Ċ import Ġcom . google . android . ex op layer 2 . Player . STATE _ READY Ċ import Ġcom . google . android . ex op layer 2 . Player . STATE _ ENDED Ċ import Ġcom . google . android . ex op layer 2 . Player . EventListener Ċ import Ġcom . google . android . ex op layer 2 . extractor . Default Extract ors Factory Ċ import Ġcom . google . android . ex op layer 2 . source . Extractor Media Source Ċ import Ġcom . google . android . ex op layer 2 . source . Media Source Ċ import Ġcom . google . android . ex op layer 2 . upstream . Default Http DataSource Factory Ċ import Ġcom . google . android . ex op layer 2 . util . Util Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġole hak amin sk yi . li vest ream fails . player . Video Player Controller . State Ċ import Ġole hak amin sk yi . li vest ream fails . player . Video Player Controller . Repeat Mode Ċ Ċ class ĠEx o Video Player Controller ( ĊĠĠĠ Ġprivate Ġval Ġ_ context : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġ_ player : ĠEx o Player , ĊĠĠĠ Ġprivate Ġval Ġ_ source Converter : ĠUrl Source Converter Ġ= ĠDefault Url Source Converter Ċ ) Ġ: ĠVideo Player Controller , ĠCor outine Scope Ġby ĠCor outine Scope ( Dispatch ers . Main ) Ġ{ ĊĠĠĠ Ġoverride Ġvar Ġrepeat Mode : ĠRepeat Mode Ġ= ĠRepeat Mode . NONE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ player . repeat Mode Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepeat Mode . ONE Ġ-> ĠRE PEAT _ MODE _ ONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepeat Mode . NONE Ġ-> ĠRE PEAT _ MODE _ OFF ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ listeners : ĠMutable List < Video Player Controller . Listener > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġvar Ġplayer Listener : ĠEvent Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġplay ( url Source : ĠUrl Source ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ player . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Listener ( player Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( create Player Listener ( url Source ). also Ġ{ Ġplayer Listener Ġ= Ġit Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepare (_ source Converter . convert ( url Source , Ġ_ context )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay When Ready Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ player . stop ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresume () Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ player . play When Ready Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpause () Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ player . play When Ready Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġ_ state : ĠState Ġ= ĠState . Idle ĊĠĠĠ Ġoverride Ġval Ġstate ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ state ĊĊĠĠĠ Ġoverride Ġfun Ġadd Listener ( listener : ĠVideo Player Controller . Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ listeners . add ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Listener ( listener : ĠVideo Player Controller . Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ listeners . remove ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Player Listener ( video Source : ĠUrl Source ) Ġ= Ġobject Ġ: ĠEvent Listener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Player Error ( error : ĠEx o Playback Exception ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify StateChange ( video Source , ĠState . Error ( error ?. message Ġ?: Ġ" Unknown Ġerror ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Player StateChanged ( play When Ready : ĠBoolean , Ġplayback State : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( playback State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ IDLE Ġ-> Ġnotify StateChange ( video Source , ĠState . Idle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ BUFFER ING Ġ-> Ġnotify StateChange ( video Source , ĠState . Buffer ing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ READY Ġ-> Ġnotify StateChange ( video Source , ĠState . Ready ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ ENDED Ġ-> Ġnotify StateChange ( video Source , ĠState . Ended ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify StateChange ( video Source : ĠUrl Source , Ġstate : ĠState ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ state Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ listeners . forEach Ġ{ Ġit . on StateChanged ( video Source , Ġstate ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠUrl Source Converter Ġ{ ĊĠĠĠ Ġfun Ġconvert ( url Source : ĠUrl Source , Ġcontext : ĠContext ): ĠMedia Source Ċ } Ċ Ċ object ĠDefault Url Source Converter Ġ: ĠUrl Source Converter Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġconvert ( url Source : ĠUrl Source , Ġcontext : ĠContext ): ĠMedia Source Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Agent Ġ= ĠUtil . getUser Agent ( context , Ġ"${ context . packageName } # media ") ĊĠĠĠĠĠĠĠ Ġreturn ĠExtract or Media Source ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. Factory ( Default Http DataSource Factory ( userAgent )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Extract ors Factory ( Default Extract ors Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Media Source ( Uri . parse ( url Source . url )) ĊĠĠĠ Ġ} Ċ }