package Ġdev . sun ny day . core . mv vm . observable Ċ Ċ import Ġandroidx . databinding . Observable Ċ import Ġdev . sun ny day . core . util . Late Ċ import Ġdev . sun ny day . core . util . Weak Ċ import Ġkotlin . properties . ReadOnly Property Ċ import Ġkotlin . properties . ReadWrite Property Ċ import Ġkotlin . reflect . K Mutable Property 0 Ċ import Ġkotlin . reflect . K Property Ċ import Ġkotlin . reflect . K Property 0 Ċ Ċ fun Ġ< O : ĠNot ifiable Observable , ĠT > ĠO . bind able Get Delegate ( ĊĠĠĠ Ġproperty : Ġ( O ) Ġ-> ĠK Property 0 < T > Ċ ): ĠReadOnly Property < Not ifiable Observable , ĠT > Ġ= ĊĠĠĠ ĠReadOnly Bind able Property Delegate ( this , Ġproperty ( this )) Ċ Ċ fun Ġ< O : ĠNot ifiable Observable , ĠT > ĠO . bind able Delegate ( ĊĠĠĠ Ġproperty : Ġ( O ) Ġ-> ĠK Mutable Property 0 < T > Ċ ): ĠRead Write Property < Not ifiable Observable , ĠT > Ġ= ĊĠĠĠ ĠRead Write Bind able Property Delegate ( this , Ġproperty ( this )) Ċ Ċ private Ġopen Ġclass ĠReadOnly Bind able Property Delegate < T >( ĊĠĠĠ Ġprivate Ġval Ġoriginal Property Owner : ĠNot ifiable Observable , ĊĠĠĠ Ġprivate Ġval Ġoriginal Property : ĠK Property 0 < T > Ċ ): ĠReadOnly Property < Not ifiable Observable , ĠT > Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġis Initialized Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠNot ifiable Observable , Ġproperty : ĠK Property < *> ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize ( this Ref , Ġproperty ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġoriginal Property . get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize ( this Ref : ĠNot ifiable Observable , Ġproperty : ĠK Property <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcallback : ĠL ate < Observable . On PropertyChanged Callback > Ġ= ĠL ate () ĊĠĠĠĠĠĠĠ Ġval Ġweak This Ref Ġ= ĠWeak ( this Ref ) ĊĊĠĠĠĠĠĠĠ Ġoriginal Property Owner ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On PropertyChanged Callback ( original Property ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent This Ref Ġ= Ġweak This Ref . value ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current This Ref Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Property Owner . remove On PropertyChanged Callback ( callback . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent This Ref . notify PropertyChanged ( Bind ables . get Bind able Property Id ( property )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also ( callback :: value :: set ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ private Ġclass ĠRead Write Bind able Property Delegate < T >( ĊĠĠĠ Ġoriginal Property Owner : ĠNot ifiable Observable , ĊĠĠĠ Ġprivate Ġval Ġoriginal Property : ĠK Mutable Property 0 < T > Ċ ): ĠReadOnly Bind able Property Delegate < T >( original Property Owner , Ġoriginal Property ), ĊĠĠĠ ĠRead Write Property < Not ifiable Observable , ĠT > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠNot ifiable Observable , Ġproperty : ĠK Property <* >, Ġvalue : ĠT ) Ġ= ĊĠĠĠĠĠĠĠ Ġoriginal Property . set ( value ) Ċ Ċ }