/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠPas cal ĠW el sch Ċ Ġ* Ġ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 Ġcom . pas cal w el sch . kon duit Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Locale List Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . pas cal w el sch . kon duit . binding . CheckBox Binding Adapter Ċ import Ġcom . pas cal w el sch . kon duit . binding . ProgressBar Binding Adapter Ċ import Ġcom . pas cal w el sch . kon duit . binding . Seek Bar Binding Adapter Ċ import Ġcom . pas cal w el sch . kon duit . binding . Switch Binding Adapter Ċ import Ġcom . pas cal w el sch . kon duit . binding . TextView Binding Adapter Ċ import Ġcom . pas cal w el sch . kon duit . binding . View Binding Adapter Ċ import Ġcom . pas cal w el sch . kon duit . widget . Widget Ċ import Ġcom . pas cal w el sch . kon duit . widget . findBy Key Ċ import Ġjava . util . Collections . emptyList Ċ import Ġjava . util . Locale Ċ Ċ private Ġval ĠTAG Ġ= ĠAndroid View Renderer :: class . java . simple Name Ċ private Ġconst Ġval ĠDEBUG Ġ= Ġfalse Ċ Ċ open Ġclass ĠAndroid View Renderer Ġ: ĠKon duit View Ġ{ ĊĊĠĠĠ Ġvar Ġactivity : ĠActivity ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġlast Rendered Widgets : ĠList < Widget > Ġ= Ġempty List () ĊĊĠĠĠ Ġprivate Ġval Ġview Bindings : ĠHashMap < Any , ĠMutable List < View Binding <* >>> Ġ= Ġhash Map Of () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġall Ġregistered Ġadapters . Ġfeel Ġfree Ġto Ġadd Ġand Ġremove Ġadapters ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġadapters Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Binding Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTextView Binding Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCheckBox Binding Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSwitch Binding Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProgress Bar Binding Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSeek Bar Binding Adapter ()) ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġrender ( widgets : ĠList < Widget >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( widgets Ġ== Ġlast Rendered Widgets ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrender Ġnot Ġrequired , Ġvirtual Ġview Ġhasn 't Ġchanged ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) ĠLog . v ( TAG , Ġ" render (): Ġskip Ġrender Ġ- Ġwidget Ġdid Ġnot Ġchange ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwidgets . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( it . key Ġ!= Ġnull ) Ġ{ Ġ" widget Ġ$ it Ġhas Ġno Ġkey " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Ui Ġ= Ġwidgets ĊĠĠĠĠĠĠĠ Ġval Ġold Ui Ġ= Ġlast Rendered Widgets ĊĊĠĠĠĠĠĠĠ Ġ// remo vals ĊĠĠĠĠĠĠĠ Ġval Ġremoved Ġ= Ġold Ui ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . key Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġnew Ui . findBy Key ( it . key ) Ġ== Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// add itions ĊĠĠĠĠĠĠĠ Ġval Ġadded Ġ= Ġnew Ui . filter Ġ{ Ġit . key Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġold Ui . findBy Key ( it . key ) Ġ== Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// changes ĊĠĠĠĠĠĠĠ Ġval Ġchanged Ġ= Ġnew Ui . filter Ġ{ Ġit . key Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! added . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġold Ui . findBy Key ( it . key ) Ġ!= Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġsave Ġfor Ġnext Ġrender ĊĠĠĠĠĠĠĠ Ġlast Rendered Widgets Ġ= Ġwidgets ĊĊĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremoved . forEach Ġ{ Ġwidget Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) ĠLog . v ( TAG , Ġ" removed Ġ$ widget ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidget . bindings ForEach Ġ{ Ġit . on Removed ( widget ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadded . forEach Ġ{ Ġwidget Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) ĠLog . v ( TAG , Ġ" added Ġ$ widget ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidget . bindings ForEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Added ( widget ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Changed ( widget ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanged . forEach Ġ{ Ġwidget Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) ĠLog . v ( TAG , Ġ" changed Ġ$ widget ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidget . bindings ForEach Ġ{ Ġit . on Changed ( widget ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget BuildContext (): ĠBuild Context Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġrequire NotNull ( activity ) ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠBuild Context Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġview ById ( key : ĠAny ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġis ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassume Ġit 's Ġa ĠR . id .* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġkey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġis ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassume Ġit 's Ġthe Ġname Ġof ĠR . id .< name > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Id Ġ= Ġactivity . resources . getIdentifier ( key , Ġ" id ", Ġactivity . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res Id Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġres Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġplease Ġprovide Ġyour Ġown Ġmapping ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" no Ġview Ġfound Ġfor Ġkey Ġ$ key ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetString ( id : ĠAny , Ġvar arg Ġformat Args : ĠAny ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġis ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( format Args . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . getString ( id , Ġ* format Args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . getString ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġplease Ġprovide Ġyour Ġown Ġmapping ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" no Ġstring Ġfound Ġfor Ġid Ġ$ id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Locale (): ĠList < Locale > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġactivity . resources . configuration . locales . to Collection (). toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( activity . resources . configuration . locale ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbindings For ( key : ĠAny ): ĠMutable List < View Binding <* >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġif Ġ( key Ġis ĠView ) Ġkey . id Ġelse Ġkey ĊĊĠĠĠĠĠĠĠ Ġval Ġbindings Ġ= Ġview Bindings [ id ] ĊĠĠĠĠĠĠĠ Ġif Ġ( bindings Ġ!= Ġnull ) Ġreturn Ġbindings ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Bindings Ġ= Ġmutable ListOf < View Binding <* >>() ĊĠĠĠĠĠĠĠ Ġview Bindings [ id ] Ġ= Ġnew Bindings ĊĠĠĠĠĠĠĠ Ġreturn Ġnew Bindings ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġaut ob ind All Views ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . flat Children . filter Ġ{ Ġit . id Ġ> Ġ 0 Ġ}. forEach Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaut ob ind ( v ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġaut ob ind ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbindings Ġ= Ġbindings For ( view ) ĊĊĠĠĠĠĠĠĠ ĠLog . v (" Bind ", Ġ" aut ob ind ing Ġ$ view ") ĊĠĠĠĠĠĠĠ Ġif Ġ( bindings . count () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" Bind ", Ġ" Ġ- Ġ${ view . java Class . simple Name } Ġalready Ġhas Ġ${ bindings . count ()} Ġbindings ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" Bind ", Ġ" Ġ- Ġbindings : Ġ${ bindings . join ToString ("\ n ") }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġadd Ġmatching Ġauto Ġbindings ĊĠĠĠĠĠĠĠ Ġthis . adapters . forEach Ġ{ Ġadapter Ġ-> Ġadapter . create Binding ( view , Ġ{ Ġbindings . add ( it ) Ġ}) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠWidget > ĠT . bindings ForEach ( block : Ġ( View Binding < T >) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbindings Ġ= Ġview Bindings [ key ] ĊĠĠĠĠĠĠĠ Ġif Ġ( bindings Ġ== Ġnull Ġ|| Ġbindings . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" widget Ġ${ this } Ġcannot Ġbe Ġbound . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġbinding Ġexists Ġfor Ġkey Ġ${ res Id Name ( key !! )} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbindings . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( it Ġas ĠView Binding < T >) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġres Id Name ( key : ĠAny ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// Ġprett ify Ġandroid Ġresource Ġids ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġis ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ< Ġ 0 ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġactivity ?. resources Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhex Id Ġ= ĠInteger . to HexString ( key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpkg name Ġ= Ġwhen Ġ( key Ġand Ġ 0 xff 0 0 0 0 0 0 . toInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 f 0 0 0 0 0 0 Ġ-> Ġ" app " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 1 0 0 0 0 0 0 Ġ-> Ġ" android " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġr . getResource PackageName ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry name Ġ= Ġr . getResource Entry Name ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtypename Ġ= Ġr . getResource TypeName ( key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ pkg name :$ typename /$ entry name Ġ(# $ hex Id )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠResources . NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnot Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ key Ġ(# $ hex Id )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġkey . toString () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠFactory Ġto Ġcreate Ġa Ġ[ View Binding ] Ċ Ġ*/ Ċ interface ĠView Binding Adapter Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcall Ġ[ bind With ] Ġwith Ġa Ġnew Ġ[ View Binding ] Ġfor Ġ[ Widget ] Ġwhich Ġcan Ġbe Ġhandled , Ġdo Ġnothing Ġfor Ġnon Ġmatching Ġones . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate Binding ( view : ĠView , Ġbind With : Ġ( View Binding <* >) Ġ-> ĠUnit ) Ċ } Ċ Ċ /** Ċ Ġ* ĠWill Ġbe Ġcalled Ġto ĠonChanged Ġa Ġwidget Ġto Ġan Ġarbitrary Ġandroid Ġview . ĠThis Ġis Ġthe Ġonly Ġconnection Ġbetween Ġthe Ġtwo Ġworld s Ċ Ġ*/ Ċ interface ĠView Binding < in ĠW Ġ: ĠWidget > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġ[ Widget ] Ġfirst Ġappears . ĠThis Ġis Ġwhere Ġdynamic Ġviews Ġhave Ġto Ġbe Ġinitialized Ġand Ġadded Ġto ĊĠĠĠĠ Ġ* Ġthe Ġwindow . ĠGood Ġbindings Ġalso Ġsave Ġthe Ġcurrent Ġview Ġstate Ġand Ġrestore Ġit Ġonce Ġthe Ġ[ Widget ] Ġwill Ġbe Ġremoved . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ[ on Changed ] Ġwill Ġbe Ġcalled Ġdirectly Ġafterwards , Ġno Ġneed Ġto Ġbind Ġeverything Ġhere ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Added ( widget : ĠW ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġ[ Widget ] Ġchanges , Ġapply Ġthe Ġnew Ġvalues Ġto Ġthe Ġbound ĠView ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠonChanged ( widget : ĠW ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġ[ Widget ] Ġwas Ġremoved , Ġalso Ġremove Ġthe ĠView Ġor Ġrestore Ġthe Ġpreviously Ġsaved Ġvalues ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Removed ( widget : ĠW ) Ċ } Ċ Ċ private Ġinline Ġval ĠView . flat Children : ĠList < View > ĊĠĠĠ Ġget () Ġ= Ġif Ġ( this Ġ! is ĠViewGroup ) Ġ{ ĊĠĠĠĠĠĠĠ Ġempty List < View >() ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġchild Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġget Child At ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĠlistOf ( it ) Ġ+ Ġit . flat Children Ġ} ĊĠĠĠ Ġ} Ċ Ċ @ Target Api ( Build . VERSION _ CODES . N ) Ċ private Ġfun ĠLocale List . to Collection (): ĠCollection < Locale > Ġ{ ĊĠĠĠ Ġval Ġlist Ġ= Ġthis ĊĠĠĠ Ġreturn Ġobject Ġ: ĠCollection < Locale > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġsize : ĠInt Ġ= Ġlist . size () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcontains ( element : ĠLocale ): ĠBoolean Ġ= Ġlist . indexOf ( element ) Ġ!= Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcontains All ( elements : ĠCollection < Locale >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelements . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list . indexOf ( it ) Ġ== Ġ- 1 ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ= Ġlist . size () Ġ== Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < Locale > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠIterator < Locale > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ= Ġlist . size () Ġ< Ġ( i Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext (): ĠLocale Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! hasNext ()) Ġthrow ĠNoSuch ElementException () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist . get ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }