package Ġit . se phi ro th . android . app . app unt i . adapters Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . card view . widget . Card View Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġit . se phi ro th . android . app . app unt i . Detail Activity Ċ import Ġit . se phi ro th . android . app . app unt i . R Ċ import Ġit . se phi ro th . android . app . app unt i . databinding . App unt i Detail Remote url Item Binding Ċ import Ġit . se phi ro th . android . app . app unt i . databinding . App unt i Detail Remote url Others Binding Ċ import Ġit . se phi ro th . android . app . app unt i . db . tables . Remote Url Ċ import Ġit . se phi ro th . android . app . app unt i . ext . load Thumbnail Ċ import Ġit . se phi ro th . android . library . kotlin _ extensions . content . res . resources . theme . getColor Ċ import Ġit . se phi ro th . android . library . kotlin _ extensions . io . reactivex . do On MainThread Ċ Ċ class ĠDetail Remote Url ListAdapter ( private Ġvar Ġactivity : ĠDetail Activity ) Ġ: ĊĠĠĠ ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ ITEM Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ OTHER S Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ ITEMS _ DISPLAY Ġ= Ġ 5 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġexpanded : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġdelete Action : Ġ(( Remote Url ) Ġ-> Ġ( Unit )) ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġlink Click Action : Ġ(( Remote Url ) Ġ-> Ġ( Unit )) ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġdata : ĠMutable List < Remote Url > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġval Ġinflater : ĠLayoutInflater Ġby Ġlazy Ġ{ ĠLayoutInflater . from ( activity ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġcard Color : ĠInt Ġby Ġlazy Ġ{ Ġactivity . theme . getColor ( activity , Ġandroid . R . attr . window Background ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas More (): ĠBoolean Ġ= Ġdata . size Ġ> ĠMAX _ ITEMS _ DISPLAY ĊĊĠĠĠ Ġprivate Ġfun Ġget Others ItemCount (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( hasMore ()) Ġdata . size Ġ- ĠMAX _ ITEMS _ DISPLAY ĊĠĠĠĠĠĠĠ Ġelse Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( view Type Ġ== ĠTYPE _ ITEM ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItem Url ViewHolder ( App unt i Detail Remote url Item Binding . inflate ( in flater , Ġparent , Ġfalse ), Ġcard Color ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠO thers ViewHolder ( App unt i Detail Remote url Others Binding . inflate ( in flater , Ġparent , Ġfalse )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( hasMore ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! expanded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== ĠMAX _ ITEMS _ DISPLAY ) ĠTYPE _ OTHER S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠTYPE _ ITEM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== Ġdata . size ) ĠTYPE _ OTHER S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠTYPE _ ITEM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ ITEM ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( hasMore ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! expanded ) Ġ( MAX _ ITEMS _ DISPLAY Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġdata . size Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( base Holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( base Holder . item ViewType Ġ== ĠTYPE _ ITEM ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġholder Ġ= Ġbase Holder Ġas ĠItem Url ViewHolder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremote Url Ġ= Ġdata [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( remote Url ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink Click Action ?. invoke ( remote Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . remote Url Remove Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Action ?. invoke ( remote Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġholder Ġ= Ġbase Holder Ġas ĠO thers ViewHolder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( expanded , Ġget Others ItemCount ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpanded Ġ= Ġ! expanded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( remote Urls : ĠList < Remote Url > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo On MainThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . addAll ( remote Urls Ġ?: ĠlistOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠO thers ViewHolder ( item View Binding : ĠApp unt i Detail Remote url Others Binding ) Ġ: ĠRecyclerView . ViewHolder ( item View Binding . root ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠtextView : ĠTextView Ġ= ĠitemView Binding . remote Url Other Title ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( expanded : ĠBoolean , Ġothers : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expanded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setText ( R . string . remote _ url _ others _ less ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= ĠitemView . context . resources . get Quantity String ( R . plurals . remote _ url _ others _ count , Ġothers , Ġothers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠItem Url ViewHolder ( item View Binding : ĠApp unt i Detail Remote url Item Binding , Ġcard Color : ĠInt ) Ġ: ĠRecyclerView . ViewHolder ( item View Binding . root ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġremote Url Image : ĠImageView Ġ= ĠitemView Binding . remote Url Image ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġremote Url Remove Button : ĠView Ġ= ĠitemView Binding . remote Url Remove Button ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġremote Url Title : ĠTextView Ġ= ĠitemView Binding . remote Url Title ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġremote Url Description : ĠTextView Ġ= ĠitemView Binding . remote Url Description ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġremote Url : ĠRemote Url ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( item View Binding . root Ġas ĠCard View ). set Card BackgroundColor ( card Color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( remote Url : ĠRemote Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . remote Url Ġ= Ġremote Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Url Title . text Ġ= Ġremote Url . remote Url Title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Url Description . text Ġ= Ġremote Url . remote Url Description ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Url . load Thumbnail ( item View . context , Ġremote Url Image ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ