package Ġcom . ang cy o . view model Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . ViewModel Store Owner Ċ import Ġkotlin . properties . ReadOnly Property Ċ import Ġkotlin . reflect . K Property Ċ Ċ /** Ċ Ġ* Ċ Ġ* ĠEmail : ang cy o @ 1 2 6 . com Ċ Ġ* Ġ@ author Ġang cy o Ċ Ġ* Ġ@ date Ġ 2 0 2 0 / 0 1 / 3 1 Ċ Ġ*/ Ċ Ċ /** å¼º åĪ¶ ä½¿çĶ¨ [ activity ] çļĦ [ ViewModel Store ] */ Ċ class ĠV MA Property < VM Ġ: ĠViewModel >( val Ġvm Cls : ĠClass < VM >) Ġ: ĠReadOnly Property < Fragment , ĠVM > Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠFragment , Ġproperty : ĠK Property < *> ): ĠVM Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ref . of a (). get ( vm Cls ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠVM Property < VM Ġ: ĠViewModel >( val Ġvm Cls : ĠClass < VM >) Ġ: ĠReadOnly Property < ViewModel Store Owner , ĠVM > Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠViewModel Store Owner , Ġproperty : ĠK Property < *> ): ĠVM Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ref . of (). get ( vm Cls ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ ä¼ĺåħĪ ä½¿çĶ¨ [ application ] çļĦ [ ViewModel Store ] Ċ Ġ* Ġ åħ¶ æ¬¡ ä½¿çĶ¨ [ activity ] Ċ Ġ* Ġ åĨį æ¬¡ [ Fragment ] Ċ Ġ* Ġ æľĢåĲİ [ ViewModel Store Owner ] Ċ Ġ* Ġ*/ Ċ class ĠVM Core Property < VM Ġ: ĠViewModel >( val Ġvm Cls : ĠClass < VM >) Ġ: ĊĠĠĠ ĠReadOnly Property < ViewModel Store Owner , ĠVM > Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠViewModel Store Owner , Ġproperty : ĠK Property < *> ): ĠVM Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠviewModel Provider : ĠViewModel Provider ĊĠĠĠĠĠĠĠ Ġwhen Ġ( this Ref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠActivity Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapplication Ġ= Ġthis Ref . application ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Provider Ġ= Ġif Ġ( application Ġis ĠViewModel Store Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ref . of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFragment Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġthis Ref . require Activity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapplication Ġ= Ġactivity . application ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Provider Ġ= Ġif Ġ( application Ġis ĠViewModel Store Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Provider Ġ= Ġthis Ref . of () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠviewModel Provider . get ( vm Cls ) ĊĠĠĠ Ġ} Ċ }