package Ġcom . token autocomplete example Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . annotation . Visible ForTesting Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . TextView Ċ import Ġcom . token autocomplete . Tag Tokenizer Ċ import Ġcom . token autocomplete . Token Complete TextView Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġjava . util .* Ċ Ċ class ĠToken Activity Ġ: ĠAppCompatActivity (), ĠToken Complete TextView . Token Listener < Person > Ġ{ ĊĠĠĠ Ġ@ Visible ForTesting Ġval Ġcompletion View : ĠContact s Completion View Ġby Ġlazy Ġ{ Ġsearch View Ġ} ĊĠĠĠ Ġprivate Ġval Ġpeople Ġby Ġlazy Ġ{ ĠPerson . sample People () Ġ} ĊĠĠĠ Ġprivate Ġval Ġadapter Ġby Ġlazy Ġ{ ĠPerson Adapter ( this , ĠR . layout . person _ layout , Ġpeople ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtabs Ġ= Ġtab Host ĊĠĠĠĠĠĠĠ Ġtabs . setup () ĊĠĠĠĠĠĠĠ Ġtabs . add Tab ( tabs . new Tab Spec (" Contacts "). setContent ( R . id . contacts Frame ). set Indicator (" Contacts ")) ĊĠĠĠĠĠĠĠ Ġtabs . add Tab ( tabs . new Tab Spec (" Composer "). setContent ( R . id . hashtags Frame ). set Indicator (" Composer ")) ĊĊĠĠĠĠĠĠĠ Ġcompletion View . setAdapter ( adapter ) ĊĠĠĠĠĠĠĠ Ġcompletion View . threshold Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġcompletion View . set Token Listener ( this ) ĊĠĠĠĠĠĠĠ Ġcompletion View . set Token Click Style ( Token Complete TextView . Token Click Style . None ) ĊĠĠĠĠĠĠĠ Ġcompletion View . is Long Clickable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġcompletion View . add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( char Sequence : ĠCharSequence , Ġi : ĠInt , Ġi 1 : ĠInt , Ġi 2 : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( char Sequence : ĠCharSequence , Ġi : ĠInt , Ġi 1 : ĠInt , Ġi 2 : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( editable : ĠEdit able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( findViewById < View >( R . id . text Value ) Ġas ĠTextView ). text Ġ= Ġeditable . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion View . add Object Sync ( people [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion View . add Object Sync ( people [ 1 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġremove Button Ġ= ĠfindViewById < View >( R . id . remove Button ) Ġas ĠButton ĊĠĠĠĠĠĠĠ Ġremove Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpeople Ġ= Ġcompletion View . objects ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( people . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion View . remove Object Async ( people [ people . size Ġ- Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġadd Button Ġ= ĠfindViewById < View >( R . id . add Button ) Ġas ĠButton ĊĠĠĠĠĠĠĠ Ġadd Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrand Ġ= ĠRandom () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion View . add Object Async ( people [ rand . nextInt ( people . size )]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Setup Ġthe Ġtag Ġcomposer Ġview ĊĠĠĠĠĠĠĠ Ġval Ġtag View Ġ= ĠfindViewById < Tag Completion View >( R . id . compose View ) ĊĠĠĠĠĠĠĠ Ġtag View . perform Best Guess ( false ) ĊĠĠĠĠĠĠĠ Ġtag View . prevent Free Form Text ( false ) ĊĠĠĠĠĠĠĠ Ġtag View . set Tokenizer ( Tag Tokenizer ( Arrays . asList ('@ ', Ġ'# '))) ĊĠĠĠĠĠĠĠ Ġtag View . setAdapter ( Tag Adapter ( this , ĠR . layout . tag _ layout , ĠTag . sample Tags ())) ĊĠĠĠĠĠĠĠ Ġtag View . set Token Click Style ( Token Complete TextView . Token Click Style . Select ) ĊĠĠĠĠĠĠĠ Ġtag View . threshold Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġval Ġtagged Content Preview Ġ= ĠfindViewById < TextView >( R . id . composed Value ) ĊĊĠĠĠĠĠĠĠ Ġtag View . add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( char Sequence : ĠCharSequence , Ġi : ĠInt , Ġi 1 : ĠInt , Ġi 2 : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( char Sequence : ĠCharSequence , Ġi : ĠInt , Ġi 1 : ĠInt , Ġi 2 : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( editable : ĠEdit able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtagged Content Preview . text Ġ= Ġtag View . content Text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// NOTE : Ġthis Ġis Ġnot Ġa Ġgreat Ġgeneral Ġsolution Ġto Ġthe Ġproblem Ġof Ġsetting / rest oring Ġtoken ized ĊĠĠĠĠĠĠĠ Ġ// free form Ġtext . ĠI 'm Ġstill Ġlooking Ġfor Ġa Ġgood Ġsolution Ġthat Ġwould Ġalso Ġallow Ġpast ing Ġraw ĊĠĠĠĠĠĠĠ Ġ// text Ġinto Ġthe Ġview Ġand Ġhaving Ġtokens Ġget Ġprocessed Ġin Ġit ĊĠĠĠĠĠĠĠ Ġtag View . setText (" A Ġsample Ġ") ĊĠĠĠĠĠĠĠ Ġtag View . add Object Sync ( Tag . sample Tags ()[ 0 ]) ĊĠĠĠĠĠĠĠ Ġtag View . append (" tweet Ġwith Ġ") ĊĠĠĠĠĠĠĠ Ġtag View . add Object Sync ( Tag . sample Tags ()[ 5 ]) ĊĠĠĠĠĠĠĠ Ġtag View . add Object Sync ( Tag . sample Tags ()[ 1 0 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Token Confirmation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder (" Current Ġtokens :\ n ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( token Ġin Ġcompletion View . objects ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( token . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("\ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ( findViewById < View >( R . id . tokens ) Ġas ĠTextView ). text Ġ= Ġsb ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Token Added ( token : ĠPerson ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( findViewById < View >( R . id . last Event ) Ġas ĠTextView ). text Ġ= Ġ" Added : Ġ$ token " ĊĠĠĠĠĠĠĠ Ġupdate Token Confirmation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Token Removed ( token : ĠPerson ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( findViewById < View >( R . id . last Event ) Ġas ĠTextView ). text Ġ= Ġ" Removed : Ġ$ token " ĊĠĠĠĠĠĠĠ Ġupdate Token Confirmation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Token Ignored ( token : ĠPerson ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( findViewById < View >( R . id . last Event ) Ġas ĠTextView ). text Ġ= Ġ" Ignored : Ġ$ token " ĊĠĠĠĠĠĠĠ Ġupdate Token Confirmation () ĊĠĠĠ Ġ} Ċ } Ċ