package Ġfr . gro g gy . race control . tv . ui . session . browse Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . Keep Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lean back . app . Vertical Grid Support Fragment Ċ import Ġandroidx . lean back . widget .* Ċ import Ġandroidx . lifecycle . as LiveData Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġfr . gro g gy . race control . tv . ui . channel . Channel Card Presenter Ċ import Ġfr . gro g gy . race control . tv . ui . channel . playback . Channel Playback Activity Ċ Ċ @ Keep Ċ @ Android EntryPoint Ċ class ĠSession Grid Fragment Ġ: ĠVertical Grid Support Fragment (), ĠOn Item View Clicked Listener Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠSession Grid Fragment :: class . simple Name ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOL UMNS Ġ= Ġ 5 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCONTENT _ ID Ġ= Ġ"${ Session Grid Fragment :: class }. CONTENT _ ID " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSESSION _ ID Ġ= Ġ"${ Session Grid Fragment :: class }. SESSION _ ID " ĊĊĠĠĠĠĠĠĠ Ġfun Ġput Content Id ( intent : ĠIntent , Ġcontent Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( CONTENT _ ID , Ġcontent Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġput SessionId ( intent : ĠIntent , ĠsessionId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( SESSION _ ID , ĠsessionId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfind SessionId ( activity : ĠActivity ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġactivity . intent . getString Extra ( SESSION _ ID ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfind Content Id ( activity : ĠActivity ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġactivity . intent . getString Extra ( CONTENT _ ID ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġchannels Adapter Ġ= ĠArray Object Adapter ( Channel Card Presenter ()) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" onCreate ") ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsetup UI Elements () ĊĠĠĠĠĠĠĠ Ġsetup Event Listeners () ĊĊĠĠĠĠĠĠĠ Ġval ĠsessionId Ġ= Ġfind SessionId ( require Activity ()) Ġ?: Ġreturn Ġrequire Activity (). finish () ĊĠĠĠĠĠĠĠ Ġval Ġcontent Id Ġ= Ġfind Content Id ( require Activity ()) Ġ?: Ġreturn Ġrequire Activity (). finish () ĊĠĠĠĠĠĠĠ Ġval ĠviewModel : ĠSession Browse ViewModel Ġby Ġview Models ({ Ġrequire Activity () Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . session ( sessionId , Ġcontent Id ). as LiveData (). observe ( this , Ġthis :: on Updated Session ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup UI Elements () Ġ{ ĊĠĠĠĠĠĠĠ Ġgrid Presenter Ġ= ĠVertical Grid Presenter ( Focus Highlight . ZO OM _ FACTOR _ NONE ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Columns Ġ= ĠCOL UMNS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshadow Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadapter Ġ= Ġchannels Adapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Event Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Item View Clicked Listener Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Updated Session ( session : ĠSession ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( session ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSingle Channel Session Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠChannel Playback Activity . intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . channel ?. value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . content Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMulti Channels Session Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġsession . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannels Adapter . set Items ( session . channels , ĠChannel . diff Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Clicked ( item ViewHolder : ĠPres enter . ViewHolder ?, Ġitem : ĠAny , Ġrow ViewHolder : ĠRow Presenter . ViewHolder ?, Ġrow : ĠRow ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġitem Ġas ĠChannel ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠChannel Playback Activity . intent ( require Activity (), Ġchannel . id ?. value , Ġchannel . content Id ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ