/* Ċ Ġ* ĠDesign ed Ġand Ġdeveloped Ġby Ġ 2 0 2 1 Ġsky do ves Ġ( Ja ew o ong ĠE um ) Ċ Ġ* Ċ Ġ* Ġ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 . sky do ves . bind ables Ċ Ċ import Ġandroidx . databinding . Property Change Registry Ċ import Ġandroidx . lifecycle . Saved State Handle Ċ import Ġkotlin . reflect . K Property Ċ Ċ /** Ċ Ġ* Ġ@ author Ġsky do ves Ġ( Ja ew o ong ĠE um ) Ċ Ġ* Ċ Ġ* ĠA Ġproperty Ġfor Ġnotify ing Ġa Ġspecific Ġhas Ġchanged Ġthat Ġmatches Ġin Ġ[ Property Change Registry ]. Ċ Ġ* ĠThe Ġgetter Ġfor Ġthe Ġproperty Ġthat Ġchanges Ġshould Ġbe Ġmarked Ġwith Ġ[ android x . databinding . Bind able ]. Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue ĠA Ġdefault Ġvalue Ġshould Ġbe Ġinitialized . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġdeleg ation Ġproperty Ġ[ Binding Property Id With DefaultValue ]. Ċ Ġ*/ Ċ @ Binding Property Delegate Ċ fun Ġ< T > Ġbinding Property ( defaultValue : ĠT ) Ġ= ĊĠ ĠBinding Property Id With DefaultValue ( defaultValue ) Ċ Ċ /** Ċ Ġ* Ġ@ author Ġsky do ves Ġ( Ja ew o ong ĠE um ) Ċ Ġ* Ċ Ġ* ĠA Ġdelegate Ġclass Ġfor Ġholding Ġvalue Ġand Ġnotify ing Ġchanged Ġvalue Ġon Ġa Ġproperty . Ċ Ġ* Ċ Ġ* Ġ@ param Ġvalue ĠA Ġdefault Ġvalue Ġshould Ġbe Ġinitialized . Ċ Ġ*/ Ċ class ĠBinding Property Id With DefaultValue < T >( ĊĠ Ġprivate Ġvar Ġvalue : ĠT Ċ ) Ġ{ ĊĠ Ġoperator Ġfun ĠgetValue ( binding Observable : ĠBinding Observable , Ġproperty : ĠK Property < *> ): ĠT Ġ= Ġvalue ĊĊĠ Ġoperator Ġfun ĠsetValue ( binding Observable : ĠBinding Observable , Ġproperty : ĠK Property <* >, Ġvalue : ĠT ) Ġ{ ĊĠĠĠ Ġif Ġ( this . value Ġ!= Ġvalue ) Ġ{ ĊĠĠĠĠĠ Ġthis . value Ġ= Ġvalue ĊĠĠĠĠĠ Ġbinding Observable . notify PropertyChanged ( property . binding Id ()) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ author Ġsky do ves Ġ( Ja ew o ong ĠE um ) Ċ Ġ* Ċ Ġ* ĠA Ġ[ Saved State Handle ] Ġproperty Ġfor Ġnotify ing Ġa Ġspecific Ġhas Ġchanged Ġthat Ġmatches Ġin Ġ[ Property Change Registry ]. Ċ Ġ* ĠWe Ġcan Ġset Ġand Ġget Ġvalue Ġthat Ġmatches Ġwith Ġ[ key ] Ġfrom Ġthe Ġ[ Saved State Handle ]. Ċ Ġ* ĠAndroid Ġassociate Ġthe Ġgiven Ġvalue Ġwith Ġthe Ġkey . ĠThe Ġvalue Ġmust Ġhave Ġa Ġtype Ġthat Ġcould Ġbe Ġstored Ġin Ġ[ android . os . Build ]. Ċ Ġ* ĠThe Ġgetter Ġfor Ġthe Ġproperty Ġthat Ġchanges Ġshould Ġbe Ġmarked Ġwith Ġ[ android x . databinding . Bind able ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġkey ĠA Ġkey Ġfor Ġfinding Ġsaved Ġvalue . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġdeleg ation Ġproperty Ġ[ Saved State Handle Binding Property ]. Ċ Ġ*/ Ċ @ Binding Property Delegate Ċ fun Ġ< T > ĠSaved State Handle . as Binding Property ( key : ĠString ) Ġ= ĊĠ ĠSaved State Handle Binding Property < T >( this , Ġkey ) Ċ Ċ /** Ċ Ġ* Ġ@ author Ġsky do ves Ġ( Ja ew o ong ĠE um ) Ċ Ġ* Ċ Ġ* ĠA Ġdelegate Ġclass Ġfor Ġpers isting Ġkey - value Ġmap Ġand Ġnotify ing Ġchanged Ġvalue Ġon Ġa Ġproperty . Ċ Ġ* Ċ Ġ* Ġ@ param Ġsaved State Handle ĠA Ġhandle Ġto Ġsaved Ġstate Ġpassed Ġdown Ġto Ġ[ android x . lifecycle . ViewModel ]. Ċ Ġ* Ġ@ param Ġkey ĠA Ġkey Ġfor Ġfinding Ġsaved Ġvalue . Ċ Ġ*/ Ċ class ĠSaved State Handle Binding Property < T >( ĊĠ Ġprivate Ġval Ġsaved State Handle : ĠSaved State Handle , ĊĠ Ġprivate Ġvar Ġkey : ĠString Ċ ) Ġ{ ĊĠ Ġoperator Ġfun ĠgetValue ( binding Observable : ĠBinding Observable , Ġproperty : ĠK Property < *> ): ĠT ? Ġ= Ġsaved State Handle . get < T ? >( key ) ĊĊĠ Ġoperator Ġfun ĠsetValue ( binding Observable : ĠBinding Observable , Ġproperty : ĠK Property <* >, Ġvalue : ĠT ?) Ġ{ ĊĠĠĠ Ġsaved State Handle . set ( key , Ġvalue ) ĊĠĠĠ Ġbinding Observable . notify PropertyChanged ( property . binding Id ()) ĊĠ Ġ} Ċ } Ċ