package Ġio . github . vl ad im irm i . intern e tr adi op layer . presentation . history Ċ Ċ import Ġandroid . graphics . drawable . Gradient Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . view . ContextMenu Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . widget . TextView Compat Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġio . github . vl ad im irm i . intern e tr adi op layer . R Ċ import Ġio . github . vl ad im irm i . intern e tr adi op layer . data . db . entity . Station Ċ import Ġio . github . vl ad im irm i . intern e tr adi op layer . domain . model . Media Ċ import Ġio . github . vl ad im irm i . intern e tr adi op layer . extensions . color Ċ import Ġio . github . vl ad im irm i . intern e tr adi op layer . presentation . favorite . stations .* Ċ import Ġkotlinx . android . extensions . Layout Container Ċ import Ġkotlinx . android . synt hetic . main . item _ station .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠV lad im ir ĠM ik h ale v Ġ 1 5 . 1 1 . 2 0 1 8 . Ċ Ġ*/ Ċ Ċ class ĠHistory Adapter Ġ: ĠRecyclerView . Adapter < History VH >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġselected Uri : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġlong Clicked Item : ĠStation ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon ItemClickListener : Ġ(( Station ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġdata : ĠList < Station > Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= Ġget Diff ( field , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiff . dispatch Updates To ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Range Changed ( 0 , Ġitem Count , ĠP AY LOAD _ BACKGROUND _ CHANGE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Diff ( old : ĠList < Station >, Ġnew : ĠList < Station >): ĠDiff Util . Diff Result Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDiff Util . calculate Diff ( object Ġ: ĠDiff Util . Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Old List Size () Ġ= Ġold . size ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget New List Size () Ġ= Ġnew . size ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold [ old Item Position ]. uri Ġ== Ġnew [ new Item Position ]. uri ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold [ old Item Position ]. is Favorite Ġ== Ġnew [ new Item Position ]. is Favorite ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Change Payload ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠP AY LOAD _ FA V OR ITE _ CHANGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠHistory VH Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( R . layout . item _ history , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠHistory VH ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠHistory VH , Ġposition : ĠInt , Ġpayload s : ĠMutable List < Any >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmedia Ġ= Ġdata [ position ] ĊĠĠĠĠĠĠĠ Ġif Ġ( payload s . contains ( PAYLOAD _ SELECTED _ CHANGE )) Ġholder . select ( media . uri Ġ== Ġselected Uri ) ĊĠĠĠĠĠĠĠ Ġif Ġ( payload s . contains ( PAYLOAD _ BACKGROUND _ CHANGE )) Ġholder . setBackground ( position , Ġitem Count ) ĊĠĠĠĠĠĠĠ Ġif Ġ( payload s . contains ( PAYLOAD _ FA V OR ITE _ CHANGE )) Ġholder . set Favorite ( media . is Favorite ) ĊĠĠĠĠĠĠĠ Ġif Ġ( payload s . isEmpty ()) Ġsuper . on Bind ViewHolder ( holder , Ġposition , Ġpayload s ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠHistory VH , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmedia Ġ= Ġdata [ position ] ĊĠĠĠĠĠĠĠ Ġholder . bind ( media ) ĊĠĠĠĠĠĠĠ Ġholder . set Favorite ( media . is Favorite ) ĊĠĠĠĠĠĠĠ Ġholder . select ( media . uri Ġ== Ġselected Uri ) ĊĠĠĠĠĠĠĠ Ġholder . setBackground ( position , Ġitem Count ) ĊĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ Ġon ItemClickListener ?. invoke ( media ) Ġ} ĊĠĠĠĠĠĠĠ Ġholder . item View . setOn Long ClickListener Ġ{ Ġlong Clicked Item Ġ= Ġmedia ; Ġfalse Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdata . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġselect Media ( id : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Pos Ġ= Ġdata . indexOf First Ġ{ Ġit . uri Ġ== Ġselected Uri Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnew Pos Ġ= Ġdata . indexOf First Ġ{ Ġit . uri Ġ== Ġid Ġ} ĊĠĠĠĠĠĠĠ Ġselected Uri Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġnotify Item Changed ( old Pos , ĠP AY LOAD _ SELECTED _ CHANGE ) ĊĠĠĠĠĠĠĠ Ġnotify Item Changed ( new Pos , ĠP AY LOAD _ SELECTED _ CHANGE ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnew Pos ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠHistory VH ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) ĊĠĠĠĠĠĠĠ Ġ, ĠView . On Create ContextMenu Listener , ĠLayout Container Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġbg Color : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠitemView . setOn Create ContextMenu Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġcontainer View : ĠView ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠitemView ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ContextMenu ( menu : ĠContext Menu ?, Ġv : ĠView ?, Ġmenu Info : ĠContext Menu . ContextMenu Info ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu ?. add ( R . id . context _ menu _ history , ĠR . id . context _ menu _ action _ delete , Ġ 0 , ĠR . string . menu _ delete ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbind ( media : ĠMedia ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtitle Tv . text Ġ= Ġmedia . name ĊĠĠĠĠĠĠĠ Ġsubtitle Tv . text Ġ= Ġmedia . specs ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Favorite ( is Favorite : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTextView Compat . set Compound Draw ables Relative With Intr insic Bounds ( title Tv , Ġ 0 , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Favorite ) ĠR . drawable . ic _ star Ġelse Ġ 0 , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġselect ( selected : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbg Color Ġ= ĠitemView . context . color ( if Ġ( selected ) ĠR . color . accent _ light Ġelse ĠR . color . grey _ 5 0 ) ĊĠĠĠĠĠĠĠ Ġ( item View . background Ġas ? ĠGradient Drawable )?. setColor ( bgColor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Background ( position : ĠInt , Ġitem Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmiddle Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġbg Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Count Ġ== Ġ 1 Ġ-> ĠR . drawable . bg _ item _ single ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ== Ġ 0 Ġ-> ĠR . drawable . bg _ item _ top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ== Ġitem Count Ġ- Ġ 1 Ġ-> ĠR . drawable . bg _ item _ bottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmiddle Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . bg _ item _ middle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠitemView . background Ġ= ĠContext Compat . get Drawable ( item View . context , Ġbg ) ĊĠĠĠĠĠĠĠ Ġ( item View . background Ġas ? ĠGradient Drawable )?. setColor ( bgColor ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< Ġ 2 1 ) Ġreturn ĊĠĠĠĠĠĠĠ ĠitemView . outline Provider Ġ= Ġif Ġ( middle ) Ġfixed Outline Ġelse Ġdefault Outline ĊĠĠĠ Ġ} Ċ } Ċ