package Ġru . nbsp . push ka . presentation . subscription . params . control . text Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ import Ġcom . jak ew h art on . r xb ind ing . widget . text Changes Ċ import Ġru . nbsp . push ka . R Ċ import Ġru . nbsp . push ka . presentation . subscription . params . control . Control Ċ import Ġru . nbsp . push ka . presentation . subscription . params . control . autocomplete . Auto Complete Control Ċ import Ġru . nbsp . push ka . util . bind View Ċ import Ġrx . android . schedul ers . Android Schedulers Ċ import Ġrx . subscriptions . Composite Subscription Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠDim or in ny Ġon Ġ 2 5 . 0 4 . 1 6 . Ċ Ġ*/ Ċ class ĠText Control ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull ) ĊĠĠĠ Ġ: ĠLinearLayout ( context , Ġattrs ), ĠControl Ġ{ ĊĊĠĠĠ Ġval Ġsubscription : ĠComposite Subscription Ġ= ĠComposite Subscription () ĊĠĠĠ Ġvar Ġlistener : ĠControl . On ChangeListener ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġtitle : ĠTextView Ġby Ġbind View ( R . id . number _ input _ title ) ĊĠĠĠ Ġval Ġerror : ĠTextView Ġby Ġbind View ( R . id . number _ input _ error ) ĊĠĠĠ Ġval Ġtext Input : ĠEditText Ġby Ġbind View ( R . id . text _ input ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= Ġcontext . getSystem Service ( Context . LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . layout . control _ text , Ġthis , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġinit Views () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscription . add ( textInput . text Changes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. de bounce ( Auto Complete Control . INPUT _ DE BOUN CE , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . isEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġlistener ?. onChange ( it ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset NoError () Ġ{ ĊĠĠĠĠĠĠĠ Ġerror . visibility Ġ= ĠG ONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetError () Ġ{ ĊĠĠĠĠĠĠĠ Ġerror . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠ Ġerror . text Ġ= Ġcontext . getString ( R . string . subscribe _ control _ error ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetTitle ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtitle . text Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! textInput . text . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Input . text . toString () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetValue ( value : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Input . setText ( value , ĠTextView . Buffer Type . EDIT ABLE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset On ChangeListener ( on ChangeListener : ĠControl . On ChangeListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlistener Ġ= ĠonChange Listener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠĠĠĠĠ Ġsubscription . unsubscribe () ĊĠĠĠ Ġ} Ċ }