package Ġio . github . vl ad im irm i . intern e tr adi op layer . presentation . search Ċ Ċ import Ġandroid . view . ContextMenu Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ 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 . domain . model . Suggestion Ċ import Ġio . github . vl ad im irm i . intern e tr adi op layer . domain . model . Suggestion List Ċ import Ġkotlinx . android . synt hetic . main . item _ suggestion . view .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠV lad im ir ĠM ik h ale v Ġ 1 2 . 1 1 . 2 0 1 8 . Ċ Ġ*/ Ċ Ċ class ĠSearch Suggestions Adapter Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġvar Ġlong Clicked Item : ĠSuggest ion ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon ItemClickListener : Ġ(( Suggestion ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsuggestions Ġ= ĠSuggest ion List () ĊĊĠĠĠ Ġfun Ġadd Recent Suggestions ( list : ĠList < Suggestion >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Ġ= Ġsuggestions . copy () ĊĠĠĠĠĠĠĠ Ġsuggestions Ġ= Ġsuggestions . apply Ġ{ Ġrecent Ġ= Ġlist Ġ} ĊĠĠĠĠĠĠĠ Ġget Diff Result ( old , Ġsuggestions ). dispatch Updates To ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Regular Suggestions ( list : ĠList < Suggestion >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Ġ= Ġsuggestions . copy () ĊĠĠĠĠĠĠĠ Ġsuggestions Ġ= Ġsuggestions . apply Ġ{ Ġregular Ġ= Ġlist Ġ} ĊĠĠĠĠĠĠĠ Ġget Diff Result ( old , Ġsuggestions ). dispatch Updates To ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġreturn ĠSuggest ion VH ( in flater . inflate ( R . layout . item _ suggestion , Ġparent , Ġfalse )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder Ġas ĠSuggest ion VH ĊĠĠĠĠĠĠĠ Ġval Ġsuggestion Ġ= Ġsuggestions [ position ] ĊĠĠĠĠĠĠĠ Ġholder . bind ( suggestion ) ĊĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ Ġon ItemClickListener ?. invoke ( suggestion ) Ġ} ĊĠĠĠĠĠĠĠ Ġholder . item View . setOn Long ClickListener Ġ{ Ġlong Clicked Item Ġ= Ġsuggestion ; Ġfalse Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuggestions . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Diff Result ( old : ĠList < Suggestion >, Ġnew : ĠList < Suggestion >): ĠDiff Util . Diff Result Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDiff Util . calculate Diff ( object Ġ: ĠDiff Util . Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Old List Size (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget New List Size (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold [ old Item Position ] Ġ== Ġnew [ new Item Position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSuggest ion VH ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ), ĠView . On Create ContextMenu Listener Ġ{ ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ContextMenu ( menu : ĠContext Menu ?, Ġv : ĠView ?, Ġmenu Info : ĠContext Menu . ContextMenu Info ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu ?. add ( R . id . context _ menu _ suggestion , ĠR . id . context _ menu _ action _ delete , Ġ 0 , ĠR . string . menu _ delete ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbind ( suggestion : ĠSuggest ion ) Ġ{ ĊĠĠĠĠĠĠĠ ĠitemView . suggestion Tv . text Ġ= Ġsuggestion . value ĊĠĠĠĠĠĠĠ Ġval Ġicon Ġ= Ġif Ġ( suggestion Ġis ĠSuggest ion . Recent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOn Create ContextMenu Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ history ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOn Create ContextMenu Listener ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ search ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠitemView . icon Iv . setImage Resource ( icon ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ