package Ġcom . let it play . ma u gry . let it play . user _ flow . ui . screen . search . query Ċ Ċ import Ġandroid . support . v 7 . util . Diff Util Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . gs fox pro . music service . model . Audio Track Ċ import Ġcom . gs fox pro . music service . service . Music Service Ċ import Ġcom . let it play . ma u gry . let it play . R Ċ import Ġcom . let it play . ma u gry . let it play . data _ management . db . entity . Channel Ċ import Ġcom . let it play . ma u gry . let it play . data _ management . db . entity . Channel With Follow Ċ import Ġcom . let it play . ma u gry . let it play . data _ management . model . SearchResult Item Ċ import Ġcom . let it play . ma u gry . let it play . data _ management . model . to Audio Track Ċ import Ġcom . let it play . ma u gry . let it play . user _ flow . business . Base ViewHolder Ċ import Ġcom . let it play . ma u gry . let it play . user _ flow . ui . screen . player . Track Adapter Ċ import Ġcom . let it play . ma u gry . let it play . utils . ext . load Image Ċ import Ġkotlinx . android . synt hetic . main . channels _ item _ small . view .* Ċ Ċ type alias ĠChannel VH Ġ= ĠSearch Results Adapter . Channel Small ViewHolder Ċ type alias ĠTrack VH Ġ= ĠTrack Adapter . Track Item Holder Ċ Ċ class ĠSearch Results Adapter ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmusic Service : ĠMusic Service ?, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Other Click : Ġ( Int , ĠInt ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Channel Click : Ġ(( Channel ) Ġ-> ĠUnit ), ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Track Click : Ġ( Audio Track ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Follow Click : Ġ( Channel With Follow ) Ġ-> ĠUnit Ċ ) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġdata : ĠList < SearchResult Item > Ġ= Ġempty List () ĊĊĠĠĠ Ġfun Ġupdate Items ( items : ĠList < SearchResult Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiff Result Ġ= ĠDiff Util . calculate Diff ( Results Differ ( this . data , Ġitems ), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġthis . data Ġ= Ġitems ĊĠĠĠĠĠĠĠ Ġdiff Result . dispatch Updates To ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( data [ position ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSearch Result Item . Channel Item Ġ-> ĠCHAN NEL _ ITEM _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSearch Result Item . Track Item Ġ-> ĠTR ACK _ ITEM _ TYPE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġdata . size ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCHAN NEL _ ITEM _ TYPE Ġ-> ĠChannel VH ( parent , Ġon Channel Click , Ġon Follow Click ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTR ACK _ ITEM _ TYPE Ġ-> ĠTrack VH ( parent , Ġon Track Click , Ġon Other Click , Ġmusic Service ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt , Ġpayload s : ĠList < Any >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( payload s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Bind ViewHolder ( holder , Ġposition , Ġpayload s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġdata [ position ] ĊĠĠĠĠĠĠĠ Ġif Ġ( FOLLOW _ CHANGED Ġin Ġpayload s Ġ&& Ġitem Ġis ĠSearch Result Item . Channel Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( holder Ġas ? ĠChannel VH )?. update Follow ( item . channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġdata [ position ] ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder Ġis ĠChannel VH Ġ&& Ġitem Ġis ĠSearch Result Item . Channel Item Ġ-> Ġholder . update ( item . channel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder Ġis ĠTrack VH Ġ&& Ġitem Ġis ĠSearch Result Item . Track Item Ġ-> Ġholder . update ( item . track . to Audio Track ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠChannel Small ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick : Ġ( Channel ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Follow Click : Ġ( Channel With Follow ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ: ĠBase ViewHolder ( parent , ĠR . layout . channels _ item _ small ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġchannel : ĠChannel With Follow ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick ( channel . channel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . channel _ follow . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Follow Click ( channel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġupdate ( channel Item : ĠChannel With Follow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . channel Ġ= Ġchannel Item ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel _ name . text Ġ= Ġchannel Item . channel . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel _ small _ logo . load Image ( channel Item . channel . imageUrl , Ġplaceholder Ġ= ĠR . drawable . feed _ item _ placeholder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Follow ( channel Item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġupdate Follow ( channel Item : ĠChannel With Follow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . channel Ġ= Ġchannel Item ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel _ follow . is Following Ġ= Ġchannel Item . is Following ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel _ followers _ count . text Ġ= Ġchannel Item . channel . subscription Count . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCHAN NEL _ ITEM _ TYPE Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTR ACK _ ITEM _ TYPE Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġval ĠFOL LOW _ CHANGED Ġ= ĠAny () ĊĠĠĠ Ġ} Ċ }