package Ġchat . rocket . android . widget . auto completion . ui Ċ Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġchat . rocket . android . widget . auto completion . model . Suggestion Model Ċ import Ġchat . rocket . android . widget . auto completion . strategy . Completion Strategy Ċ import Ġchat . rocket . android . widget . auto completion . strategy . regex . String Matching Completion Strategy Ċ import Ġjava . lang . reflect . Type Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ abstract Ġclass ĠSuggest ions Adapter < VH Ġ: ĠBase Suggestion ViewHolder >( ĊĠĠĠĠĠĠĠ Ġval Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġconstraint : ĠInt Ġ= ĠCONSTRAINT _ UN BOUND , ĊĠĠĠĠĠĠĠ Ġthreshold : ĠInt Ġ= ĠMAX _ RESULT _ COUNT ) Ġ: ĠRecyclerView . Adapter < VH >() Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAny Ġnumber Ġof Ġresults . ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESULT _ COUNT _ UN LIMIT ED Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ// ĠTrigger Ġsuggestions Ġonly Ġif Ġon Ġthe Ġline Ġstart . ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCONSTRAINT _ BOUND _ TO _ START Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ// ĠTrigger Ġsuggestions Ġfrom Ġanywhere . ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCONSTRAINT _ UN BOUND Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ// ĠMaximum Ġnumber Ġof Ġresults Ġto Ġdisplay Ġby Ġdefault . ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ RESULT _ COUNT Ġ= Ġ 5 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġitem Type : ĠType ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġitem ClickListener : ĠItem ClickListener ? Ġ= Ġnull ĊĠĠĠ Ġ// ĠCalled Ġto Ġgather Ġresults Ġwhen Ġno Ġresults Ġhave Ġpreviously Ġmatched . ĊĠĠĠ Ġprivate Ġvar Ġprovider External : Ġ(( query : ĠString ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpinned Suggestions : ĠList < Suggestion Model >? Ġ= Ġnull ĊĠĠĠ Ġ// ĠMaximum Ġnumber Ġof Ġresults / suggestions Ġto Ġdisplay . ĊĠĠĠ Ġprivate Ġvar Ġresults Threshold : ĠInt Ġ= Ġif Ġ( threshold Ġ> Ġ 0 ) Ġthreshold Ġelse ĠRESULT _ COUNT _ UN LIMIT ED ĊĠĠĠ Ġ// ĠThe Ġstrategy Ġused Ġfor Ġsuggesting Ġcomplet ions . ĊĠĠĠ Ġprivate Ġval Ġstrategy : ĠCompletion Strategy Ġ= ĠString Matching Completion Strategy ( results Threshold ) ĊĠĠĠ Ġ// ĠCurrent Ġinput Ġterm Ġto Ġlook Ġup Ġfor Ġsuggestions . ĊĠĠĠ Ġprivate Ġvar Ġcurrent Term : ĠString Ġby ĠDeleg ates . observable ("", Ġ{ Ġ_, Ġ_, Ġnew Term Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġstrategy . autocomplete Items ( new Term ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Stable Ids ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetItem ( position ). text . hashCode (). to Long () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠV H , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind ( getItem ( position ), Ġitem ClickListener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġstrategy . autocomplete Items ( current Term ). size ĊĊĠĠĠ Ġprivate Ġfun ĠgetItem ( position : ĠInt ): ĠSuggest ion Model Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstrategy . autocomplete Items ( current Term )[ position ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġsuggestions Ġthat Ġshould Ġalways Ġappear Ġwhen Ġpromp ted . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsuggestions ĠThe Ġlist Ġof Ġsuggestions Ġthat Ġwill Ġbe Ġpinned . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Pin ned Suggestions ( suggestions : ĠList < Suggestion Model >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . strategy . add Pin ned ( suggestions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġautocomplete ( new Term : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . current Term Ġ= Ġnew Term . toLowerCase (). trim () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Items ( list : ĠList < Suggestion Model >) Ġ{ ĊĠĠĠĠĠĠĠ Ġstrategy . addAll ( list ) ĊĠĠĠĠĠĠĠ Ġ// ĠSince Ġwe 've Ġjust Ġadded Ġnew Ġitems Ġwe Ġshould Ġcheck Ġfor Ġpossible Ġnew Ġcompletion Ġsuggestions . ĊĠĠĠĠĠĠĠ Ġstrategy . autocomplete Items ( current Term ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset OnClickListener ( click Listener : ĠItem ClickListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . item ClickListener Ġ= Ġclick Listener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas ItemClickListener () Ġ= Ġitem ClickListener Ġ!= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġthe Ġcurrent Ġsearched Ġterm . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġterm () Ġ= Ġthis . current Term ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġmaximum Ġnumber Ġof Ġresults Ġto Ġshow . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġthreshold ĠThe Ġmaximum Ġnumber Ġof Ġsuggestions Ġto Ġdisplay . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Results Threshold ( threshold : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( threshold Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġresults Threshold Ġ= Ġthreshold ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġstrategy . addAll ( emptyList ()) ĊĠĠĠĠĠĠĠ Ġstrategy . autocomplete Items ( current Term ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonClick ( item : ĠSuggest ion Model ) ĊĠĠĠ Ġ} Ċ }