package Ġcom . byte coders . ipt v service . mobile config . binding adapter Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . byte coders . ipt v service . mobile config . R Ċ import Ġcom . byte coders . ipt v service . mobile config . databinding . Channel Item Binding Ċ import Ġcom . byte coders . m 3 u 8 parser . data . Playlist Ċ import Ġcom . byte coders . m 3 u 8 parser . data . Track Ċ import Ġcom . google . android . media . tv . comp anion library . Program Utils Ċ import Ġcom . google . android . media . tv . comp anion library . model . Program Ċ import Ġcom . google . android . media . tv . comp anion library . xml tv . Xml Tv Parser Ċ import Ġjava . util .* ĊĊ Ċ class ĠPlay List Channels Adapter ( private Ġval Ġplaylist : ĠPlaylist , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠviewHolder ClickListener : ĠViewHolder ClickListener ?): ĊĠĠĠĠĠĠĠ ĠRecyclerView . Adapter < Playlist ViewHolder >(), ĠItem Touch Helper Adapter Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġedit Mode : ĠBoolean ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġlist ings : ĠXml Tv Parser . Tv Listing ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġstart Drag Listener : ĠOn Start Drag Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠPlaylist ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPlaylist ViewHolder ( Data Binding Util ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( LayoutInflater . from ( parent . context ), ĠR . layout . channel _ item , Ġparent , Ġfalse )) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġplaylist . play List Entries . size ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠPlaylist ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrack Ġ= Ġplaylist . play List Entries [ position ] ĊĠĠĠĠĠĠĠ Ġholder . bind ( track , Ġtrack . ext Info ?. tv g Id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist ings Ġ= Ġlist ings ?. get Programs For E pg ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ let Ġif Ġ(! list ings . isNull OrEmpty ()) ĠProgram Utils . get Playing Now ( list ings ) Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġ}, Ġstart Drag Listener Ġ!= Ġnull , ĠviewHolder ClickListener Ġ?: Ġobject Ġ: ĠViewHolder ClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon View Clicked ( view : ĠView , Ġtrack : ĠTrack ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDoes Ġnothing , Ġit 's Ġused Ġin Ġcase Ġthere 's Ġno Ġneed Ġfor Ġlistening ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġholder . binding . handle Drag . setOn Touch Listener Ġ{ Ġ_, Ġmotion Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( motion Event . action Ġ== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Drag Listener ?. onStart Drag ( holder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Touch Listener Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġholder . binding . tv logo Iv . transition Name Ġ= Ġ" PLAY LIST _ TRANS ITION _$ position " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Move ( from Position : ĠInt , Ġto Position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( from Position Ġ< Ġto Position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġfrom Position Ġuntil Ġto Position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollections . swap ( playlist . play List Entries , Ġi , Ġi Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġfrom Position Ġdown To Ġto Position Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollections . swap ( playlist . play List Entries , Ġi , Ġi Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnotify Item Moved ( from Position , Ġto Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Dismiss ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġplaylist . play List Entries . remove At ( position ) ĊĠĠĠĠĠĠĠ Ġnotify Item Removed ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Edit Mode ( edit Mode : ĠBoolean , Ġstart Drag Listener : ĠOn Start Drag Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . start Drag Listener Ġ= Ġstart Drag Listener ĊĠĠĠĠĠĠĠ Ġthis . edit Mode Ġ= Ġedit Mode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate () Ġ= ĠDiff Util . calculate Diff ( Edit Mode Diff ( playlist . play List Entries )). dispatch Updates To ( this ) ĊĊĠĠĠ Ġclass ĠEdit Mode Diff ( private Ġval Ġtrack : ĠList < Track >): ĠDiff Util . Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠBoolean Ġ= Ġtrack [ old Item Position ]. identifier Ġ== Ġtrack [ new Item Position ]. identifier ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Old List Size (): ĠInt Ġ= Ġtrack . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget New List Size (): ĠInt Ġ= Ġtrack . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ interface ĠViewHolder ClickListener Ġ{ ĊĠĠĠ Ġfun Ġon View Clicked ( view : ĠView , Ġtrack : ĠTrack ) Ċ } Ċ Ċ class ĠPlaylist ViewHolder ( internal Ġval Ġbinding : ĠChannel Item Binding ): ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ), ĠItem Touch Helper ViewHolder Ġ{ ĊĠĠĠ Ġfun Ġbind ( track : ĠTrack , Ġprogram : ĠProgram ?, Ġedit Mode : ĠBoolean , ĠviewHolder ClickListener : ĠViewHolder ClickListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . track Ġ= Ġtrack ĊĠĠĠĠĠĠĠ Ġbinding . program Ġ= Ġprogram ĊĠĠĠĠĠĠĠ Ġbinding . edit Mode Ġ= Ġedit Mode ĊĠĠĠĠĠĠĠ Ġbinding . playlist Item . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder ClickListener . on View Clicked ( binding . tv logo Iv , Ġtrack ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon ItemSelected () Ġ{ ĊĠĠĠĠĠĠĠ ĠitemView . alpha Ġ= Ġ 0 . 5 F ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Clear () Ġ{ ĊĠĠĠĠĠĠĠ ĠitemView . alpha Ġ= Ġ 1 . 0 F ĊĠĠĠ Ġ} Ċ } Ċ