/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 Ġdal ode v Ċ Ġ*/ Ċ package Ġes . lit tled avity . commons . ui . widgets Ċ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Linear Interpolator Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . core . animation . do On End Ċ import Ġandroidx . core . view . isVisible Ċ import Ġes . lit tled avity . commons . ui . extensions . end Margin Ċ import Ġes . lit tled avity . commons . ui . extensions . getColor Ċ import Ġes . lit tled avity . commons . ui . extensions . get Dimension Ċ import Ġes . lit tled avity . commons . ui . extensions . get Dimension Pixel Size Ċ import Ġes . lit tled avity . commons . ui . extensions . hide Keyboard Ċ import Ġes . lit tled avity . commons . ui . extensions . layout Inflater Ċ import Ġes . lit tled avity . commons . ui . extensions . onClick Ċ import Ġes . lit tled avity . commons . ui . extensions . on TextChanged Ċ import Ġes . lit tled avity . commons . ui . extensions . set Scale Ċ import Ġes . lit tled avity . commons . ui . extensions . show Keyboard Ċ import Ġes . lit tled avity . commons . ui . extensions . start Margin Ċ import Ġes . lit tled avity . commons . ui . widgets . databinding . View Search Toolbar Binding Ċ Ċ class ĠSearch Toolbar Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbinding Ġ= ĠView Search Toolbar Binding . inflate ( context . layout Inflater , Ġthis ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclear Btn Value Animator : ĠValue Animator ĊĊĠĠĠ Ġprivate Ġvar Ġis Clear Button Visible : ĠBoolean ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . clear Btn Container . isVisible Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbinding . clear Btn Container . isVisible ĊĊĠĠĠ Ġprivate Ġvar Ġis Search Query Empty Ġ= Ġtrue ĊĊĠĠĠ Ġvar Ġinput Type : ĠInt ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . query Input Et . input Type Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbinding . query Input Et . input Type ĊĊĠĠĠ Ġvar Ġhint Text : ĠCharSequence ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . query Input Et . hint Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbinding . query Input Et . hint ĊĊĠĠĠ Ġvar Ġsearch Query : ĠCharSequence ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . query Input Et . setText ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbinding . query Input Et . text ĊĊĠĠĠ Ġvar Ġon Query Changed : Ġ(( String ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon Search Action Requested : Ġ(( String ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġon Back Button Clicked : Ġ(( View ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . back Btn Container . onClick Ġ{ Ġfield ?. invoke ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġon Clear Button Clicked : Ġ(( View ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Query Input () ĊĠĠĠĠĠĠĠ Ġinit Clear Button () ĊĠĠĠĠĠĠĠ Ġinit Defaults () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Query Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Search Query Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Clear Button ( false ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Clear Button ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Query Input Margins () ĊĠĠĠĠĠĠĠ Ġinit Query Input Text Watcher () ĊĠĠĠĠĠĠĠ Ġinit Query Input ActionListener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Query Input Margins () Ġ= Ġwith ( binding . query Input Et ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbutton Container Size Ġ= Ġget Dimension Pixel Size ( R . dim en . toolbar _ button _ container _ size ) ĊĠĠĠĠĠĠĠ Ġval Ġhorizontal Margin Ġ= Ġget Dimension Pixel Size ( R . dim en . search _ toolbar _ query _ input _ horizontal _ margin ) ĊĠĠĠĠĠĠĠ Ġval Ġtotal Horizontal Margin Ġ= Ġbutton Container Size Ġ+ Ġhorizontal Margin ĊĊĠĠĠĠĠĠĠ Ġstart Margin Ġ= Ġtotal Horizontal Margin ĊĠĠĠĠĠĠĠ Ġend Margin Ġ= Ġtotal Horizontal Margin ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Query Input Text Watcher () Ġ= Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġquery Input Et . on TextChanged Ġ{ Ġquery Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Search Query Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Search Query Empty Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Clear Button ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Search Query Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Search Query Empty Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Clear Button ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Query Changed ?. invoke ( query ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Query Input ActionListener () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . query Input Et . setOn Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ SEARCH Ġ&& Ġsearch Query . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Search Action Requested ?. invoke ( search Query . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Clear Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . clear Btn Container . onClick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Clear Button Clicked ?. invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Query Text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Keyboard () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclear Btn Value Animator Ġ= Ġinit Clear Button Value Animator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Clear Button Value Animator () Ġ= ĠValue Animator . of Float (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . clear Btn Container . set Scale ( it . animated Value Ġas ĠFloat ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠLinear Interpolator () ĊĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 1 0 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Defaults () Ġ{ ĊĠĠĠĠĠĠĠ Ġelevation Ġ= Ġget Dimension ( R . dim en . toolbar _ elevation ) ĊĠĠĠĠĠĠĠ Ġset BackgroundColor ( getColor ( R . color . toolbar _ background _ color )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Query Text () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . query Input Et . setText ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Clear Button ( animate : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( animate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Btn Value Animator . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Btn Value Animator . removeAll Listeners () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . clear Btn Container . set Scale ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Clear Button Visible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Clear Button Animation ( 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Clear Button Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Clear Button ( animate : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( animate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Btn Value Animator . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Btn Value Animator . removeAll Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Btn Value Animator . do On End Ġ{ Ġis Clear Button Visible Ġ= Ġfalse Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . clear Btn Container . set Scale ( 1 f ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Clear Button Animation ( 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Clear Button Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Clear Button Animation ( var arg Ġvalues : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclear Btn Value Animator . set Float Values (* values ) ĊĠĠĠĠĠĠĠ Ġclear Btn Value Animator . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Keyboard ( with Delay : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . query Input Et . show Keyboard ( with Delay ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . query Input Et . hide Keyboard () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĊĠĠĠĠĠĠĠ Ġclear Btn Value Animator . cancel () ĊĠĠĠ Ġ} Ċ } Ċ