package Ġcom . food tech lab . ft l android u ikit . text field Ċ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Input Filter Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view .* Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . widget .* Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġandroidx . core . content . with Styled Attributes Ċ import Ġandroidx . core . graphics . drawable . Drawable Compat Ċ import Ġandroidx . core . view .* Ċ import Ġcom . food tech lab . ft l android u ikit . R Ċ import Ġcom . food tech lab . ft l android u ikit . util .* Ċ Ċ class ĠF TL Autocomplete EditText Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠRelative Layout ( context , Ġattrs , Ġdef Style ), ĠTheme Manager . Theme Changed Listener Ġ{ ĊĠĠĠ Ġvar Ġis Error Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Controls () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġtext Gravity : ĠInt Ġ= ĠGr avity . START ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Input . gravity Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġinput Type : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġet Input . input Type ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Input . input Type Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġ ime Options : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġet Input . ime Options ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Input . ime Options Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġmin Chars Count : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Input . threshold Ġ= Ġfield ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġmax DropDown Height For Fold ing : ĠInt Ġ= Ġcontext . dp To Px Int ( MAX _ DROP _ DOWN _ HEIGHT ) ĊĊĠĠĠ Ġvar Ġhint : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġtext : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġet Input . text ?. toString () Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Input . setText ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġeditor ActionListener : ĠTextView . On Editor ActionListener ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Input . setOn Editor ActionListener ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġet Input : ĠAuto Complete TextView ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġvar Ġscale Ġ= ĠSC ALE _ MAX ĊĊĠĠĠ Ġprivate Ġval Ġis Hint On Top : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġet Input . has Focus () Ġ|| Ġ! et Input . text . isNull OrEmpty () ĊĊĠĠĠ Ġprivate Ġval Ġcontrols Color : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠContext Compat . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Enabled Ġ-> ĠTheme Manager . theme . ft l EditText Default Theme . error Control Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! et Input . has Focus () Ġ&& Ġ! et Input . text . isNull OrEmpty () Ġ-> ĠTheme Manager . theme . ft l EditText Default Theme . default Control Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Hint On Top Ġ-> ĠTheme Manager . theme . ft l EditText Default Theme . active Control Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠTheme Manager . theme . ft l EditText Default Theme . default Control Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġvar ĠmaxLength : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( et Input . filters [ 0 ] Ġas ? ĠInput Filter . Length Filter )?. max Ġ?: Ġ- 1 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Input . filters Ġ= Ġif Ġ( value Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Input Filter . Length Filter ( value )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf Null s ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġmax Lines : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġet Input . max Lines ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Input . max Lines Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġinitial Hint Text Size Ġby Ġlazy Ġ{ Ġcontext . sp To Px ( INITIAL _ HINT _ TEXT _ SIZE ) Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġinitial Height Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline Height Ġ= Ġet Input . height Ġ/ Ġet Input . line Count ĊĠĠĠĠĠĠĠ Ġheight Ġ- Ġline Height Ġ* Ġ( et Input . line Count Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġhint Paint Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcontrols Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġinitial Hint Text Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isIn Edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype face Ġ= ĠResources Compat . getFont ( context , ĠR . font . robot o _ regular ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġfilters : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ?. let Ġ{ Ġset Filter Digits ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġtext Watcher : ĠText Watcher ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġfocus ChangeListener : ĠOn Focus ChangeListener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġclick Listener : ĠOn ClickListener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġv Underline : ĠView ĊĠĠĠ Ġprivate Ġval Ġiv Clear Text : ĠImageView ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinf late ( context , ĠR . layout . layout _ ft l _ autocomplete _ edit _ text , Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġv Underline Ġ= ĠfindViewById ( R . id . v _ underline ) ĊĠĠĠĠĠĠĠ Ġiv Clear Text Ġ= ĠfindViewById ( R . id . iv _ clear ) ĊĊĠĠĠĠĠĠĠ Ġet Input Ġ= ĠfindViewById ( R . id . et _ input ) ĊĠĠĠĠĠĠĠ Ġet Input . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Focus ChangeListener Ġ{ Ġv , Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Focus ) Ġopen Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Controls () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocus ChangeListener ?. on Focus Change ( v , Ġhas Focus ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd TextChanged Listener ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . food tech lab . ft l android u ikit . text field . helper . Text Watcher () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv Clear Text . isVisible Ġ= Ġs ?. isNotEmpty () Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Margins () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrop Down Vertical Offset Ġ= Ġcontext . dp To Px ( 4 f ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Listener ?. onClick ( this @ FT L Autocomplete EditText ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġminimum Height Ġ= Ġcontext . dp To Px ( MIN _ HEIGHT ). toInt () ĊĊĠĠĠĠĠĠĠ Ġbackground Ġ= ĠContext Compat . get Drawable ( context , ĠR . drawable . shape _ ft l _ edit _ text _ default ) ĊĠĠĠĠĠĠĠ Ġon Theme Changed ( Theme Manager . theme ) ĊĊĠĠĠĠĠĠĠ Ġsuper . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Input . open Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Input . request Focus () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick Listener ?. onClick ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġiv Clear Text . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Input . text . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext . with Styled Attributes ( attrs , ĠR . style able . FT L Autocomplete EditText ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhint Ġ= ĠgetString ( R . style able . FT L Autocomplete EditText _ hint ) Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxLength Ġ= Ġget Int ( R . style able . FT L Autocomplete EditText _ maxLength , Ġ- 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġget Int ( R . style able . FT L Autocomplete EditText _ max Line Count , ĠInt . MAX _ VALUE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠgetString ( R . style able . FT L Autocomplete EditText _ text ) Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Type Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Int ( R . style able . FT L Autocomplete EditText _ input Type , ĠEditor Info . TYPE _ CLASS _ TEXT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ ime Options Ġ= Ġget Int ( R . style able . FT L Autocomplete EditText _ ime Options , ĠEditor Info . IME _ NULL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilters Ġ= ĠgetString ( R . style able . FT L Autocomplete EditText _ filters ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To Window () ĊĠĠĠĠĠĠĠ ĠTheme Manager . addListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Hint () ĊĊĠĠĠĠĠĠĠ Ġet Input . y Ġ= Ġif Ġ( hint . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( initial Height Ġ/ Ġ 2 Ġ- Ġet Input . height Ġ/ Ġ 2 ). toFloat () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( initial Height Ġ/ Ġ 2 ). toFloat () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġv Underline . y Ġ= Ġ( height Ġ- Ġv Underline . height ). toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠĠĠĠĠ ĠTheme Manager . remove Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset OnClickListener ( l : ĠOn ClickListener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġclick Listener Ġ= Ġl ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset On Focus ChangeListener ( l : ĠOn Focus ChangeListener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġfocus ChangeListener Ġ= Ġl ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Theme Changed ( theme : ĠTheme Manager . Theme ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( et Input ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset TextColor ( Context Compat . getColor ( context , Ġtheme . ft l Complete EditText Theme . textColor )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Hint TextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtheme . ft l Complete EditText Theme . hint Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset DropDown Background Resource ( theme . ft l Complete EditText Theme . dropDown Background Drawable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠDrawable Compat . set Tint ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiv Clear Text . drawable , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( context , Ġtheme . ft l Complete EditText Theme . clear Icon Tint Color ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbackground . change Color ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtheme . ft l Complete EditText Theme . bgColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd TextChanged Listener ( watcher : ĠText Watcher ) Ġ{ ĊĠĠĠĠĠĠĠ Ġet Input . add TextChanged Listener ( watcher ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove TextChanged Listener ( watcher : ĠText Watcher ) Ġ{ ĊĠĠĠĠĠĠĠ Ġet Input . remove TextChanged Listener ( watcher ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġset Hints Adapter ( adapter : ĠT ) Ġwhere ĠT Ġ: ĠList Adapter ?, ĠT Ġ: ĠFilter able ? Ġ{ ĊĠĠĠĠĠĠĠ Ġet Input . setAdapter ( adapter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Hints () Ġ{ ĊĠĠĠĠĠĠĠ Ġet Input . show DropDown () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Hints () Ġ{ ĊĠĠĠĠĠĠĠ Ġet Input . dismiss DropDown () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisable Selection Action Panel () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( et Input ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Long Clickable Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Text Is Selectable ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Selection Action Mode Callback Ġ= Ġobject Ġ: ĠAction Mode . Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Action Mode ( mode : ĠAction Mode ?, Ġmenu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Prepare Action Mode ( mode : ĠAction Mode ?, Ġmenu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Action Item Clicked ( mode : ĠAction Mode ?, Ġitem : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Destroy Action Mode ( mode : ĠAction Mode ?) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐľ ÐµÑĤ Ð¾Ð´ ĠÐ¸Ð· Ð¼ÐµÐ½ Ñı ÐµÑĤ ĠÐ²Ñĭ Ñģ Ð¾ÑĤ Ñĥ Ġpopup ĠÐ´Ð¾ ĠÐ·Ð½Ð°Ñĩ ÐµÐ½Ð¸Ñı Ġmax DropDown Height For Fold ing ĠÐ² ĠÑģÐ» ÑĥÑĩ Ð° Ðµ ĠÐµÑģÐ»Ð¸ ĠÑĢÐ°Ð· Ð¼ ÐµÑĢ ĊĠĠĠĠ Ġ* ĠÑĦ Ð¸Ð»ÑĮ ÑĤ ÑĢÐ¾Ð² Ð°Ð½ Ð½Ð¾Ð³Ð¾ ĠÑģÐ¿Ð¸Ñģ ÐºÐ° ĠÐ¼ ÐµÐ½ÑĮ ÑĪÐµ ĠÑĩ ÐµÐ¼ ĠÐ·Ð½Ð°ÑĩÐµÐ½Ð¸Ðµ Ġmax ItemCount For Fold ing , ĠÐ² ĠÐ¿ÑĢ Ð¾ÑĤ Ð¸Ð² Ð½Ð¾Ð¼ ĠÑģÐ» ÑĥÑĩ Ð° Ðµ ĠÐ²Ñĭ Ñģ Ð¾ÑĤ Ð° ĊĠĠĠĠ Ġ* Ġpopup ĠÐ±ÑĥÐ´ÐµÑĤ ĠWR AP _ CONTENT , ĠÑĩÑĤÐ¾ ĠÐ½Ðµ ĠÐ²Ñģ ÐµÐ³ Ð´Ð° ĠÑĥ Ð´Ð° Ñĩ Ð½Ð¾Ðµ ĠÑĢ ÐµÑĪ ÐµÐ½Ð¸Ðµ ĠÐ½Ð° Ġandroid Ġ 5 . 0 ĊĠĠĠĠ Ġ* Ġ@ param Ġhints List ĠÐ¡ Ð¿Ð¸Ñģ Ð¾Ðº ĠÐ¿Ð¾Ð´ Ñģ ÐºÐ°Ð· Ð¾Ðº Ġ( Ð½Ðµ ÑĦ Ð¸Ð»ÑĮ ÑĤ ÑĢÐ¾Ð² Ð°Ð½ Ð½ÑĭÐ¹ ) ĊĠĠĠĠ Ġ* Ġ@ param Ġchar Sequence ĠÐĴ Ð²ÐµÐ´ ÐµÐ½ Ð¾Ðµ ĠÐ·Ð½Ð°ÑĩÐµÐ½Ð¸Ðµ ĠÐ² ĠÐ¿Ð¾Ð» Ðµ ĠÐ² Ð² Ð¾Ð´Ð° ĊĠĠĠĠ Ġ* Ġ@ param Ġmax ItemCount For Fold ing ĠÐľ Ð°Ðº Ñģ Ð¸Ð¼ Ð°Ð»ÑĮ Ð½Ð¾Ðµ ĠÐºÐ¾Ð» Ð¸Ñĩ ÐµÑģÑĤÐ²Ð¾ ĠÑįÐ»ÐµÐ¼ÐµÐ½ÑĤ Ð¾Ð² ĠÐ´Ð»Ñı ĠÑĢ ÐµÐ³ Ñĥ Ð»Ð¸ ÑĢÐ¾Ð² Ð°Ð½Ð¸Ñı ĠÐ²Ñĭ Ñģ Ð¾ÑĤ Ñĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfold ing DropDown Dialog ( ĊĠĠĠĠĠĠĠ Ġhints List : ĠArrayList < String >, ĊĠĠĠĠĠĠĠ Ġchar Sequence : ĠCharSequence ?, ĊĠĠĠĠĠĠĠ Ġmax ItemCount For Fold ing : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠqueryString Ġ= Ġchar Sequence ?. toString ()?. lowercase () ĊĠĠĠĠĠĠĠ Ġval Ġfilter Results Ġ= Ġarray ListOf < String >() ĊĠĠĠĠĠĠĠ Ġfilter Results . addAll ( when Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠqueryString . isNull OrEmpty () Ġ-> Ġhints List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġhints List . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . lowercase (). contains ( queryString ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġet Input . dropDown Height Ġ= Ġif Ġ( filter Results . size Ġ< Ġmax ItemCount For Fold ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax DropDown Height For Fold ing ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠCanvas . draw Hint () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhint Height Ġ= Ġhint Paint . font Metrics . desc ent Ġ- Ġhint Paint . font Metrics . as cent ĊĠĠĠĠĠĠĠ Ġval Ġhint Y Ġ= Ġ( initial Height Ġ/ Ġ 2 Ġ+ Ġhint Height Ġ/ Ġ 2 Ġ- Ġhint Paint . font Metrics . bottom ) Ġ* Ġscale ĊĠĠĠĠĠĠĠ Ġhint Paint . text Size Ġ= Ġinitial Hint Text Size Ġ* Ġscale ĊĊĠĠĠĠĠĠĠ Ġhint Paint . color Ġ= Ġcontrols Color ĊĊĠĠĠĠĠĠĠ Ġdraw Text ( hint , Ġcontext . dp To Px ( M ARGIN _ HORIZONTAL ), Ġhint Y , Ġhint Paint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠView . update Margins () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl Params Ġ= Ġlayout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠ Ġval Ġmargin Horizontal Ġ= Ġcontext . dp To Px ( M ARGIN _ HORIZONTAL ). toInt () ĊĠĠĠĠĠĠĠ Ġl Params . update Margins ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Horizontal , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmarginTop , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Horizontal , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmarginBottom ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= Ġl Params ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Controls () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Hint () ĊĠĠĠĠĠĠĠ Ġupdate Underline () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Underline () Ġ{ ĊĠĠĠĠĠĠĠ Ġv Underline . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisIn visible Ġ= Ġ! is Hint On Top Ġ&& Ġ! isError Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset BackgroundColor ( controls Color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Hint () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( hint Paint . color Ġ!= Ġcontrols Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstart Val Ġ= Ġif Ġ(! is Hint On Top Ġ&& Ġ! isError Enabled ) ĠSC ALE _ MIN Ġelse ĠSC ALE _ MAX ĊĠĠĠĠĠĠĠ Ġval Ġend Val Ġ= Ġif Ġ(! is Hint On Top Ġ&& Ġ! isError Enabled ) ĠSC ALE _ MAX Ġelse ĠSC ALE _ MIN ĊĊĠĠĠĠĠĠĠ Ġif Ġ( scale Ġ!= Ġend Val ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠValue Animator . of Float ( start Val , Ġend Val ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= ĠAN IM ATION _ DURATION ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ Ġanimation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ= Ġanimation . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Filter Digits ( digits : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfilters Ġ= ĠarrayOf Null s < Input Filter >( 1 ) ĊĠĠĠĠĠĠĠ Ġfilters [ 0 ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInput Filter Ġ{ Ġsource , Ġstart , Ġend , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end Ġ> Ġstart ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġstart Ġuntil Ġend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! digits . contains ( source [ index ]. toString ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Input Filter Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġet Input . filters Ġ= Ġfilters ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAN IM ATION _ DURATION Ġ= Ġ 2 0 0 L ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSC ALE _ MAX Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSC ALE _ MIN Ġ= Ġ. 7 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠM ARGIN _ HORIZONTAL Ġ= Ġ 1 6 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠINITIAL _ HINT _ TEXT _ SIZE Ġ= Ġ 1 6 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMIN _ HEIGHT Ġ= Ġ 5 6 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ DROP _ DOWN _ HEIGHT Ġ= Ġ 8 8 f ĊĠĠĠ Ġ} Ċ }