package Ġfr . gro g gy . race control . tv . ui . channel . playback Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . Keep Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . lean back . app . Video Support Fragment Ċ import Ġandroidx . lean back . app . Video Support Fragment Gl ue Host Ċ import Ġcom . google . android . ex op layer 2 . Media Item Ċ import Ġcom . google . android . ex op layer 2 . Exo Player Ċ import Ġcom . google . android . ex op layer 2 . source . Media Source Factory Ċ import Ġcom . google . android . ex op layer 2 . source . dash . Dash Media Source Ċ import Ġcom . google . android . ex op layer 2 . source . hls . H ls Media Source Ċ import Ġcom . google . android . ex op layer 2 . track selection . Default Track Selector Ċ import Ġcom . google . android . ex op layer 2 . upstream . Http DataSource Ċ import Ġcom . google . android . ex op layer 2 . util . Event Logger Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġfr . gro g gy . race control . tv . core . settings . Settings Ċ import Ġfr . gro g gy . race control . tv . core . settings . Settings Repository Ċ import Ġfr . gro g gy . race control . tv . f 1 tv . F 1 Tv View ing Ċ import Ġfr . gro g gy . race control . tv . ui . player . Exo Player Playback Transport Control Gl ue Ċ import Ġjavax . inject . Inject Ċ Ċ @ Keep Ċ @ Android EntryPoint Ċ class ĠChannel Playback Fragment Ġ: ĠVideo Support Fragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġval ĠTAG Ġ= ĠChannel Playback Fragment :: class . simple Name ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCHAN NEL _ ID Ġ= Ġ"${ Channel Playback Fragment :: class }. CHANNEL _ ID " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCONTENT _ ID Ġ= Ġ"${ Channel Playback Fragment :: class }. CONTENT _ ID " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠVIEW ING _ URI Ġ= Ġ"${ Channel Playback Fragment :: class }. VIEW ING " ĊĊĠĠĠĠĠĠĠ Ġfun Ġput Channel Id ( intent : ĠIntent , Ġchannel Id : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( CHANNEL _ ID , Ġchannel Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġput Content Id ( intent : ĠIntent , Ġcontent Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( CONTENT _ ID , Ġcontent Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfind Channel Id ( activity : ĠActivity ): ĠString ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . intent . getString Extra ( CHANNEL _ ID ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġfind Content Id ( activity : ĠActivity ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġactivity . intent . getString Extra ( CONTENT _ ID ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfind View ing ( fragment : ĠChannel Playback Fragment ): ĠF 1 Tv View ing ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġfragment . arguments ?. get Parcelable < Uri >( VIEW ING _ URI ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF 1 Tv View ing ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( view ing : ĠF 1 Tv View ing ) Ġ= ĠChannel Playback Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= Ġbundle Of ( VIEW ING _ URI Ġto Ġviewing . url ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Inject Ġinternal Ġlateinit Ġvar Ġhttp DataSource Factory : ĠHttp DataSource . Factory ĊĠĠĠ Ġ@ Inject Ġinternal Ġlateinit Ġvar Ġsettings Repository : ĠSettings Repository ĊĊĠĠĠ Ġprivate Ġval Ġtrack Selector : ĠDefault Track Selector Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠDefault Track Selector ( require Context ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġplayer : ĠEx o Player Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= ĠEx o Player . Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Track Selector ( track Selector ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġplayer . play When Ready Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġplayer . add Analytics Listener ( Event Logger ( track Selector )) ĊĠĠĠĠĠĠĠ Ġplayer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmedia Source Factory : ĠMedia Source Factory Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( settings Repository . getCurrent (). stream Type Ġ== ĠSettings . Stream Type . H LS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH ls Media Source . Factory ( http DataSource Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Allow Chunk less Pre paration ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDash Media Source . Factory ( http DataSource Factory ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġstart Player () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Player () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġglue Ġ= ĠEx o Player Playback Transport Control Gl ue ( require Activity (), Ġplayer , Ġtrack Selector ) ĊĠĠĠĠĠĠĠ Ġglue . host Ġ= ĠVideo Support Fragment Gl ue Host ( this ) ĊĊĠĠĠĠĠĠĠ Ġval Ġviewing Ġ= Ġfind View ing ( this ) Ġ?: Ġreturn Ġrequire Activity (). finish () ĊĠĠĠĠĠĠĠ Ġon View ing Created ( view ing ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon View ing Created ( view ing : ĠF 1 Tv View ing ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" View ing Ġis Ġready Ġ$ view ing ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! player . is Playing ) Ġ{ Ġ// IF Ġis Ġplaying Ġalready Ġjust Ġignore Ġthese Ġcalls ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Source Ġ= Ġmedia Source Factory . create Media Source ( Media Item . from Uri ( view ing . url )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . set Media Source ( media Source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . prepare () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġplayer . play When Ready Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer . release () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} Ċ } Ċ