package Ġchat . rocket . android . widget . auto completion . strategy . regex Ċ Ċ 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 . ui . Suggestions Adapter Ċ import Ġjava . util . concurrent . Copy On Write ArrayList Ċ Ċ internal Ġclass ĠString Matching Completion Strategy ( private Ġval Ġthreshold : ĠInt Ġ= Ġ- 1 ) Ġ: ĠCompletion Strategy Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlist Ġ= ĠCopy On Write ArrayList < Suggestion Model >() ĊĊĠĠĠ Ġoverride Ġfun Ġautocomplete Items ( prefix : ĠString ): ĠList < Suggestion Model > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġlist . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . search List . forEach Ġ{ Ġword Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( word . contains ( prefix , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ filter Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ}. sorted By Descending Ġ{ Ġit . pinned Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( threshold Ġ== ĠSuggest ions Adapter . UN LIMIT ED _ RESULT _ COUNT ) Ġresult Ġelse Ġresult . take ( threshold ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd All ( list : ĠList < Suggestion Model >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . list . addAll Absent ( list ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ( prefix : ĠString , Ġposition : ĠInt ): ĠSuggest ion Model Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlist [ position ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsize (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlist . size ĊĠĠĠ Ġ} Ċ }