package Ġio . ag ora . flat . ui . activity . playback . sync player Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . view . View Ċ import Ġcom . google . android . ex op layer 2 .* Ċ import Ġcom . google . android . ex op layer 2 . audio . Audio Attributes Ċ import Ġcom . google . android . ex op layer 2 . source . Media Source Ċ import Ġcom . google . android . ex op layer 2 . source . Progress ive Media Source Ċ import Ġcom . google . android . ex op layer 2 . source . hls . H ls Media Source Ċ import Ġcom . google . android . ex op layer 2 . ui . Player View Ċ import Ġcom . google . android . ex op layer 2 . upstream . DataSource Ċ import Ġcom . google . android . ex op layer 2 . upstream . Default DataSource Factory Ċ import Ġcom . google . android . ex op layer 2 . util . Util Ċ import Ġio . ag ora . flat . R Ċ Ċ class ĠSimple Video Player ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġvideo Path : ĠString , Ċ ) Ġ: ĠAtom Player (), ĠPlayer . EventListener Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġex o Player : ĠSimple Exo Player Ġ= ĠSimple Exo Player . Builder ( context . application Context ). build () ĊĠĠĠ Ġprivate Ġvar Ġmedia Source : ĠMedia Source ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġplayer View : ĠPlayer View ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval ĠdataSource Factory : ĠDataSource . Factory ĊĠĠĠ Ġprivate Ġval Ġhandler : ĠHandler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent State Ġ= ĠPlayer . STATE _ IDLE ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġex o Player . addListener ( this ) ĊĠĠĠĠĠĠĠ Ġex o Player . set Audio Attributes ( Audio Attributes . DEFAULT , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġex o Player . play When Ready Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠdataSource Factory Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault DataSource Factory ( context , ĠUtil . getUser Agent ( context , Ġcontext . getString ( R . string . app _ name ))) ĊĊĠĠĠĠĠĠĠ Ġset Video Path ( video Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æĴŃæĶ¾ è§ĨåĽ¾ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġplayer View Ġ è§ĨåĽ¾ å®ŀä¾ĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġset Player View ( player View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( player View Ġis ĠPlayer View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . player View Ġ= Ġplayer View ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . player View !!. request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . player View !!. player Ġ= Ġex o Player ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æĴŃæĶ¾ éĵ¾æİ¥ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpath Ġæ Ĵ Ń æĶ¾ éĵ¾æİ¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Video Path ( path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Video URI ( Uri . parse ( path )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æĴŃæĶ¾ ĠUri ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġuri Ġæ Ĵ Ń æĶ¾ éĵ¾æİ¥ å¯¹åºĶçļĦ ĠUri ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Video URI ( uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Source Ġ= Ġcreate Media Source ( uri ) ĊĠĠĠĠĠĠĠ Ġatom Player Phase Ġ= ĠAtom Player Phase . Buffer ing ĊĠĠĠĠĠĠĠ Ġex o Player . prepare ( media Source !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĶ± Ġnative Player Ġ è¿Ľè¡Į ä¸» åĬ¨ Ġseek ï¼Į çĦ¶åĲİ åľ¨ Ġseek Ġ å®ĮæĪĲ åĲİ ï¼Į åĨį è°ĥçĶ¨ Ġ[ Player Sync Manager ] Ġ åĲĮæŃ¥ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Ġ è·³è½¬ æĹ¶éĹ´ æĪ ³ ĊĠĠĠĠ Ġ* Ġ@ param Ġunit Ġ æĹ¶éĹ´ æĪ ³ åįķä½į ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġseek ( time Ms : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġex o Player . seek To ( time Ms ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġis Playing : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġex o Player . is Playing ĊĊĠĠĠ Ġoverride Ġvar Ġplayback Speed Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġex o Player . playback Parameters Ġ= ĠPlay back Parameters ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġplay () Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ post ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġex o Player . play When Ready Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d (" play Ġ$ name Ġis Playing Ġ$ is Playing ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpause () Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ post ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġex o Player . play When Ready Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d (" pause Ġ$ name Ġis Playing Ġ$ is Playing ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠ Ġex o Player . release () ĊĠĠĠĠĠĠĠ Ġmedia Source Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Phase (): ĠAtom Player Phase Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġatom Player Phase ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠcurrentTime (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġex o Player . current Position ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġduration (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġex o Player . duration ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Player StateChanged ( play When Ready : ĠBoolean , Ġplayback State : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ("$ name Ġon Player State Ġ$ is Playing Ġ$ playback State ") ĊĠĠĠĠĠĠĠ Ġcurrent State Ġ= Ġplayback State ĊĠĠĠĠĠĠĠ Ġwhen Ġ( playback State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer . STATE _ IDLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer . STATE _ BUFFER ING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Player Phase ( Atom Player Phase . Buffer ing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer . STATE _ READY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Player Phase ( if Ġ( is Playing ) ĠAtom Player Phase . Playing Ġelse ĠAtom Player Phase . Pause ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer . STATE _ ENDED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Player Error ( error : ĠEx o Playback Exception ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ("$ name Ġon Player Error Ġ${ error . message }") ĊĠĠĠĠĠĠĠ Ġwhen Ġ( error . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx o Playback Exception . TYPE _ SOURCE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx o Playback Exception . TYPE _ RENDER ER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx o Playback Exception . TYPE _ UN EXPECTED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx o Playback Exception . TYPE _ REMOTE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Is Playing Changed ( is Playing : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ("$ name Ġon Is Playing Changed Ġ$ is Playing ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Seek Processed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġex o Player . current Position ĊĠĠĠĠĠĠĠ Ġatom Player Listener ?. on Seek To ( this , Ġpos ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Media Source ( uri : ĠUri ): ĠMedia Source Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( val Ġtype Ġ= ĠUtil . infer ContentType ( uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC . TYPE _ H LS Ġ-> ĠH ls Media Source . Factory ( dataSource Factory ). create Media Source ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC . TYPE _ OTHER Ġ-> ĠProgress ive Media Source . Factory ( dataSource Factory ). create Media Source ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Unsupported Ġtype : Ġ$ type ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }