/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠM oh amed ĠAl aa Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ċ Ġ* Ġsoftware Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġm oh amed al aa . ma utils . material _ design . binding _ adapter Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . Search View Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Menu Res Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . databinding . Binding Adapter Ċ import Ġandroidx . databinding . Inverse Binding Adapter Ċ import Ġandroidx . databinding . Inverse Binding Listener Ċ import Ġandroidx . databinding . Observable Field Ċ import Ġm oh amed al aa . ma utils . core _ android . data _ binding . binding _ adapter . BA EditText Ċ import Ġm oh amed al aa . ma utils . core _ android . extensions .* Ċ import Ġm oh amed al aa . ma utils . core _ kotlin . extensions . toString OrNull Ċ import Ġm oh amed al aa . ma utils . material _ design .* Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ /** Ċ Ġ* Ġ## ĠList Ġof ĠOther Ġbinding Adapters Ġin Ġextension Ġfunctions Ġisa . Ċ Ġ* Ċ Ġ* Ġ 1 . ĠCurrently Ġnone Ġisa . Ċ Ġ*/ Ċ object ĠB A Toolbar Ġ{ ĊĊĠĠĠ Ġ/** Ġ@ param Ġuse View Post Ġif Ġtrue Ġthen ĠI Ġwill Ġuse Ġ[ post With Receiver ] Ġbefore Ġ[ set Icons Tint ] Ġisa . Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Binding Adapter ( ĊĠĠĠĠĠĠĠ Ġ" ma utils : toolbar _ set Icons Tint ", ĊĠĠĠĠĠĠĠ Ġ" ma utils : toolbar _ set Icons Tint _ change Title TextColor ", ĊĠĠĠĠĠĠĠ Ġ" ma utils : toolbar _ set Icons Tint _ use View Post ", ĊĠĠĠĠĠĠĠ Ġrequire All Ġ= Ġfalse ĊĠĠĠ Ġ) ĊĠĠĠ Ġfun Ġset Icons Tint ( toolbar : ĠToolbar , Ġ@ Color Int Ġcolor : ĠInt , Ġchange Title TextColor : ĠBoolean ? Ġ= Ġnull , Ġuse View Post : ĠBoolean ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( use View Post Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . post With Receiver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . set Icons Tint ( color , Ġchange Title TextColor Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . set Icons Tint ( color , Ġchange Title TextColor Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Binding Adapter (" toolbar _ menu Res ", ĊĠĠĠĠĠĠĠ Ġ" toolbar _ on MenuItem ClickListener ", ĊĠĠĠĠĠĠĠ Ġ" toolbar _ on Navigation Icon ClickListener ", ĊĠĠĠĠĠĠĠ Ġrequire All Ġ= Ġfalse ) ĊĠĠĠ Ġfun Ġsetup Menu And Icons Click s ( ĊĠĠĠĠĠĠĠ Ġtoolbar : ĠToolbar , ĊĠĠĠĠĠĠĠ Ġ@ Menu Res Ġmenu Res : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġon MenuItem ClickListener : ĠToolbar . On MenuItem ClickListener ?, ĊĠĠĠĠĠĠĠ Ġon Navigation Icon ClickListener : ĠView . OnClickListener ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Res ?. apply Ġ{ Ġtoolbar . menu . clear (); Ġ Ġtoolbar . inflate Menu ( this ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġon MenuItem ClickListener ?. apply Ġ{ Ġtoolbar . setOn MenuItem ClickListener ( this ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġon Navigation Icon ClickListener ?. apply Ġ{ Ġtoolbar . set Navigation OnClickListener ( this ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Binding Adapter (" ma utils : toolbar _ set Nav Icon Content Description And Tooltip Text ") ĊĠĠĠ Ġfun Ġset Nav Icon Content Description And Tooltip Text ( toolbar : ĠToolbar , Ġcontent Description : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtoolbar . find Nav Icon View OrNull ()?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . navigation Content Description Ġ= Ġcontent Description ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Tooltip Text Compat ( content Description ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ### ĠUsage ĊĠĠĠĠ Ġ* Ġ- ĠUsed Ġto Ġsetup Ġ[ Toolbar . get Menu ] Ġwith Ġ[ Menu . setup Action View For Search View ] Ġisa . ĊĠĠĠĠ Ġ* Ġ- ĠNote Ġyou Ġcan Ġuse Ġtwo - way Ġdata Ġbinding Ġapproach Ġin Ġaddition Ġto Ġ[ ma Search View On Query Text Listener Builder Block ] ĊĠĠĠĠ Ġ* Ġif Ġyou Ġwant , ĠBut Ġcommonly Ġit 's Ġeither Ġthe Ġ[ ma Search View On Query Text Listener Builder Block ] Ġlistener ĊĠĠĠĠ Ġ* ĠOR Ġthe Ġtwo - way Ġdata Ġbinding Ġapproach Ġbut Ġboth Ġare Ġprovided Ġfor Ġfull Ġcustomization Ġisa , ĊĠĠĠĠ Ġ* Ġ** Also ĠNote ** Ġtwo - way Ġdata Ġbinding Ġis Ġfor Ġ[ Search View . text ] Ġonly Ġisa . ĊĠĠĠĠ Ġ* Ġ- ĠOther Ġparams Ġin Ġthis Ġfun Ġcorresponds Ġto Ġall Ġother Ġin Ġ[ Menu . setup Action View For Search View ] ĊĠĠĠĠ Ġ* Ġto Ġsupport Ġfull Ġxml Ġcustomization Ġisa . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ### ĠCA UTION ĊĠĠĠĠ Ġ* Ġ- Ġwhen Ġusing Ġtwo - way Ġuse Ġit Ġwith Ġbelow Ġcode Ġbecause Ġdynamic Ġchange Ġwill Ġtrigger Ġobserver ĊĠĠĠĠ Ġ* Ġto Ġbe Ġinvoked Ġtwice Ġisa . ĊĠĠĠĠ Ġ* ĠviewModel . mutable LiveData Search Query . observe Old And New ( this ) Ġ{ Ġold , Ġnew Ġ-> ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ// ĠRead ĠCharSequence Ġdoc Ġas Ġit Ġsays Ġequals Ġhas Ġunknown Ġresult Ġisa . ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġif Ġ( old . toString OrNull () Ġ== Ġnew . toString OrNull ()) Ġreturn @ observe Old And New ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġlog Error (" changed Ġtext Ġisa Ġis Ġ-> Ġ$ new ") ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Binding Adapter ( ĊĠĠĠĠĠĠĠ Ġ" toolbar _ setup Action View For Search View _ search View Text ", ĊĠĠĠĠĠĠĠ Ġ" toolbar _ setup Action View For Search View _ search View Text Attr Changed ", ĊĊĠĠĠĠĠĠĠ Ġ" toolbar _ setup Action View For Search View _ ma Search View On Query Text Listener Builder Block ", ĊĊĠĠĠĠĠĠĠ Ġ" toolbar _ setup Action View For Search View _ image Views Tint Color ", ĊĠĠĠĠĠĠĠ Ġ" toolbar _ setup Action View For Search View _ search View TextColor ", ĊĠĠĠĠĠĠĠ Ġ" toolbar _ setup Action View For Search View _ search View Hint TextColor ", ĊĠĠĠĠĠĠĠ Ġ" toolbar _ setup Action View For Search View _ search View Hint Text ", ĊĊĠĠĠĠĠĠĠ Ġ" toolbar _ setup Action View For Search View _ onClose Listener ", ĊĊĠĠĠĠĠĠĠ Ġrequire All Ġ= Ġfalse ĊĠĠĠ Ġ) ĊĠĠĠ Ġfun Ġsetup Action View For Search View ( ĊĠĠĠĠĠĠĠ Ġtoolbar : ĠToolbar , ĊĊĠĠĠĠĠĠĠ Ġsearch View Text : ĠCharSequence ?, ĊĠĠĠĠĠĠĠ Ġinverse Binding Listener : ĠIn verse Binding Listener ?, ĊĊĠĠĠĠĠĠĠ Ġma Search View On Query Text Listener Builder Block : Ġ( MA Search View On Query Text Listener Builder . () Ġ-> ĠUnit )? , ĊĊĠĠĠĠĠĠĠ Ġ@ Color Int Ġimage Views Tint Color : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġ@ Color Int Ġsearch View TextColor : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġ@ Color Int Ġsearch View Hint TextColor : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġsearch View Hint Text : ĠCharSequence ?, ĊĊĠĠĠĠĠĠĠ ĠonClose Listener : Ġ(() Ġ-> ĠBoolean )? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsometimes Ġif Ġ` post With Receiver ` Ġnot Ġused Ġlike Ġbelow Ġcode Ġand Ġchanges Ġto Ġmenu Ġof Ġtoolbar ĊĠĠĠĠĠĠĠ Ġ// Ġwas Ġdone Ġas Ġwell Ġby Ġbinding Ġadapter Ġor Ġdone Ġafter Ġthis Ġinvocation Ġthen Ġall Ġcolors Ġare ĊĠĠĠĠĠĠĠ Ġ// Ġcleared Ġand Ġsometimes Ġfunctionality Ġas Ġwell , Ġso Ġbelow Ġcode Ġis Ġbetter Ġand Ġdoesn 't Ġshow ĊĠĠĠĠĠĠĠ Ġ// Ġany Ġui Ġblink ing Ġof Ġcolor Ġchanges Ġfor Ġexample Ġisa . ĊĠĠĠĠĠĠĠ Ġtoolbar . post With Receiver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġma Search View On Query Text Listener Builder Block ?. as Listener () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . setup Action View For Search View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View Text Ġ= Ġsearch View Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Query Text Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Query Text Change Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinverse Binding Listener ?. onChange () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Query Text Change ( it ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Query Text Submit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Query Text Submit ( it ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Views Tint Color Ġ= Ġimage Views Tint Color Ġ?: ĠColor . WHITE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View TextColor Ġ= Ġsearch View TextColor Ġ?: ĠColor . WHITE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View Hint TextColor Ġ= Ġsearch View Hint TextColor Ġ?: ĠColor . WHITE . add Color Alpha ( 0 . 7 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View Hint Text Ġ= Ġsearch View Hint Text , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClose Listener Ġ= ĠonClose Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Inverse Binding Adapter ( attribute Ġ= Ġ" toolbar _ setup Action View For Search View _ search View Text ", Ġevent Ġ= Ġ" toolbar _ setup Action View For Search View _ search View Text Attr Changed ") ĊĠĠĠ Ġfun Ġget Toolbar MenuItem Search View Text ( toolbar : ĠToolbar ): ĠCharSequence ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsearch View Ġ= Ġtoolbar . menu . first Nested Action View Is Instance OrNull < Search View >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsearch View . text ĊĠĠĠ Ġ} Ċ Ċ }