/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġw ca ok aze Ċ Ġ* Ċ Ġ* Ġ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 Ġvue Ċ Ċ import Ġandroid . view .* Ċ import Ġandroidx . annotation .* Ċ import Ġcom . w ca ok aze . vue . android .* Ċ Ċ import Ġkotlin . reflect .* Ċ Ċ /** Ċ Ġ* Ġprovides Ġ[ V Binder ] s . Ċ Ġ* Ċ Ġ* Ġ``` kotlin Ċ Ġ* Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV Binder Ċ Ġ* Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ~~~ Ċ Ġ* Ġusername View . v Bind . text Ġ{ Ġuser ()?. name Ġ} Ċ Ġ* Ġ// ĠĠĠĠĠĠĠĠĠĠ Ġ^ ~~~~ Ċ Ġ* Ġ// ĠĠĠĠĠĠĠĠĠĠ ĠV Bind Provider Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ class ĠV Bind Provider < out ĠV Ġ: ĠView >( val Ġsub stance : ĠV ) Ġ{ ĊĠĠ Ġprivate Ġvar Ġbind ers Ġ= Ġempty Array < Pair < Any , ĠV Binder <* >> >() ĊĊĠĠ Ġ@ Ui Thread ĊĠĠ Ġinline Ġfun Ġ< T > Ġcreate V Binder ( ĊĠĠĠĠĠĠĠĠ Ġprop : ĠK Callable < V Binder < T >>, ĊĠĠĠĠĠĠĠĠ Ġcross inline Ġbinder Action : Ġ( view : ĠV , Ġvalue : ĠT ) Ġ-> ĠUnit ĊĠĠ Ġ): ĠV Binder < T > Ġ{ ĊĠĠĠĠĠ Ġreturn Ġcreate V Binder ( prop ) Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠ Ġbinder Action ( sub stance , Ġvalue . get OrThrow ()) ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} ĊĊĠĠ Ġ@ Ui Thread ĊĠĠ Ġfun Ġ< T > Ġcreate V Binder ( ĊĠĠĠĠĠĠĠĠ Ġprop : ĠK Callable < V Binder < T >>, ĊĠĠĠĠĠĠĠĠ Ġbinder Action : Ġ( value : ĠResult < T >) Ġ-> ĠUnit ĊĠĠ Ġ): ĠV Binder < T > Ġ{ ĊĠĠĠĠĠ Ġfor Ġ(( p , Ġb ) Ġin Ġbind ers ) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġif Ġ( p Ġ== Ġprop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġb Ġas ĠV Binder < T > ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġb Ġ= ĠView Binder ( sub stance , Ġbinder Action ) ĊĠĠĠĠĠ Ġbind ers Ġ+= Ġprop Ġto Ġb ĊĠĠĠĠĠ Ġreturn Ġb ĊĠĠ Ġ} Ċ } Ċ Ċ @ get : Ui Thread Ċ val Ġ< V Ġ: ĠView > ĠV . v Bind : ĠV Bind Provider < V > Ġget () Ġ{ ĊĠĠ Ġval Ġcached Provider Ġ= Ġget Tag ( R . id . view _ tag _ v _ bind _ provider ) ĊĊĠĠ Ġif Ġ( cached Provider Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠ Ġreturn Ġcached Provider Ġas ĠV Bind Provider < V > ĊĠĠ Ġ} ĊĊĠĠ Ġval Ġnew Provider Ġ= ĠV Bind Provider ( this ) ĊĠĠ Ġset Tag ( R . id . view _ tag _ v _ bind _ provider , Ġnew Provider ) ĊĠĠ Ġreturn Ġnew Provider Ċ } Ċ