package Ġcom . a 1 0 m ia om iao . m iao and ri od Ċ Ċ import Ġandroid . arch . lifecycle . Lifecycle Owner Ċ import Ġandroid . arch . lifecycle . LiveData Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġandroid . arch . lifecycle . ViewModel Ċ import Ġorg . jetbrains . ank o . do Async Ċ import Ġorg . jetbrains . ank o . ui Thread Ċ Ċ class ĠM iao ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġhook List Ġ= Ġarray ListOf < Hook >() ĊĊĠĠĠ Ġfun Ġ< T > Ġuse Observable ( getter : ĠValue Getter < T >): ĠOb serv abler Dispatch < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlive Data Ġ= ĠMutable LiveData < T >() ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġgetter . getValue () ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġhook List . add ( Hook ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgetter Ġas ĠValue Getter < Any >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġas ĠAny , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data Ġas ĠMutable LiveData < Any > ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġreturn ĠOb serv abler Dispatch ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġas ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġobserver Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data . observe ( this , Ġandroid . arch . lifecycle . Observer Ġ{ ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewValue ?. let Ġ{ Ġobserver . on Changed ( it Ġas ĠT ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetData ( fn : Ġ() Ġ-> ĠUnit ) Ġ= Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠ Ġfn () ĊĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforce Update () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġforce Update () Ġ{ ĊĠĠĠĠĠĠĠ Ġhook List . forEach Indexed Ġ{ Ġindex , Ġhook Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewValue Ġ= Ġhook . value Getter . getValue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hook . value Ġ!= ĠnewValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæķ°æį® æĶ¹ åĬ¨ ï¼Į æĽ´æĸ° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhook . value Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhook . live Data . value Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠValue Getter < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠgetValue (): ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠObserver < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonChanged ( t : ĠT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠHook ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Getter : ĠValue Getter < Any >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġvalue : ĠAny , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlive Data : ĠMutable LiveData < Any > ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġdata Ġclass ĠOb serv abler Dispatch < T >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue : ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobserv abler : ĠLifecycle Owner .( observer : ĠObserver < T >) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ċ Ċ }