package Ġcom . base . library . mv vm Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . base . library . event . Event State Ċ import Ġcom . base . library . event . Single Live Event Ċ import Ġcom . base . library . util . Rx Http Utils Ċ import Ġio . reactivex . rx java 3 . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . rx java 3 . core . Observable Transformer Ċ import Ġio . reactivex . rx java 3 . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . rx java 3 . dis pos ables . Disposable Ċ import Ġio . reactivex . rx java 3 . schedul ers . Schedulers Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* Ġ ä½ľçĶ¨ ï¼ļ åŁºç¡Ģ çļĦ ĠViewModel Ġ ç±» ï¼Į å°ģè£ħ äºĨ ç½ĳç»ľ è¯·æ±Ĥ Ġè¿ĶåĽŀ Ġ åıĸæ¶Ī çŃī å¤ĦçĲĨ Ċ Ġ*/ Ċ open Ġclass ĠB ViewModel Ġ: ĠViewModel (), ĠOn Handle Callback Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĵ įä½ľ çĬ¶æĢģ éĢļçŁ¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġui Change LiveData Ġby Ġlazy Ġ{ ĠSingle Live Event < Event State >() Ġ} ĊĊĠĠĠ Ġ// ĠĠĠ Ġprivate Ġval Ġui Change LiveData Ġby Ġlazy Ġ{ ĠMutable LiveData < Event State >() Ġ} ĊĠĠĠ Ġfun Ġget UI Change LiveData () Ġ= Ġui Change LiveData ĊĊĠĠĠ Ġprivate Ġvar Ġm Dis pos ables : ĠComposite Disposable ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġloading Event ( method : ĠString , Ġmsg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget UI Change LiveData (). value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent State . getState Entity ( method , Ġmsg , ĠEvent State . DIALOG LOADING ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmessage Event ( method : ĠString , Ġmsg : ĠString , Ġfinish : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget UI Change LiveData (). value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent State . getState Entity ( method , Ġmsg , ĠEvent State . DIALOG MESSAGE , Ġfinish ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdismiss Event ( method : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget UI Change LiveData (). value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent State . getState Entity ( method , Ġstate Ġ= ĠEvent State . DIALOG DIS MIS S ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfinish Event () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠstartActivity Event () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġother Event ( content : ĠString ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åıĺ æį¢ ĠIO çº¿ç¨ĭ Ġ-> ĠMain çº¿ç¨ĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġ< T > Ġtransformer Thread (): ĠObservable Transformer < T , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable Transformer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . subscribe On ( Schedulers . io ()). observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åıĺ æį¢ ĠIO çº¿ç¨ĭ Ġ-> ĠMain çº¿ç¨ĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġ< T > Ġtransformer Event ( method : ĠString Ġ= Ġ"") : ĠObservable Transformer < T , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable Transformer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . do On Subscribe Ġ{ Ġloading Event ( method ) Ġ}. do Finally Ġ{ Ġdismiss Event ( method ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åıĺ æį¢ ĠIO çº¿ç¨ĭ Ġ-> ĠMain çº¿ç¨ĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġ< T > Ġtransformer ( method : ĠString Ġ= Ġ"") : ĠObservable Transformer < T , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable Transformer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . compose ( transformer Thread ()). compose ( transformer Event ( method )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠéľĢè¦ģ åĬłè½½ æ¡Ĩ åĴĮ åıĸæ¶Ī åĬłè½½ æ¡Ĩ çļĦ åı¯ä»¥ä½¿çĶ¨ è¿Ļä¸ª æĸ¹æ³ķ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠviewModel Scope ( method : ĠString Ġ= Ġ"", Ġblock : Ġsuspend ĠCor outine Scope . () Ġ-> ĠUnit ) Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . Main ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġloading Event ( method ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġblock () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Event ( method ) Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel Scope ( block , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġmessage Event ( method , ĠRx Http Utils . get Throwable Message ( it )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġloading Event ( method ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdismiss Event ( method ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠviewModel Scope NoError ( method : ĠString Ġ= Ġ"", Ġblock : Ġsuspend ĠCor outine Scope . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope ( block , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġloading Event ( method ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdismiss Event ( method ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠviewModel Scope ( ĊĠĠĠĠĠĠĠ Ġblock : Ġsuspend ĠCor outine Scope . () Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ ĠonError : Ġ(( Throwable ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠonStart : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġon Finally : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonStart ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError ?. invoke ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Finally ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå°Ĩ ĠDis posable Ġæ·»åĬł è¿Ľ å®¹åĻ¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġadd Disposable ( dis posable : ĠDis posable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Dis pos ables Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Dis pos ables Ġ= ĠComposite Disposable () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Dis pos ables ?. add ( dis posable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä¸Ń æĸŃ æīĢæľīçļĦ ĠDis posable , ä¸Ń æĸŃ ä¹ĭåĲİ Ġm Dis pos ables Ġå°Ĩ ä¸įåı¯ çĶ¨ , æĺ¯ ä¸Ģæ¬¡ æĢ§ çļĦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Dis pos ables ?. dispose () ĊĠĠĠĠĠĠĠ Ġm Dis pos ables Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ é¡µéĿ¢ éĶĢ æ¯ ģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ Ġdispose () Ġ// Ġä¸Ń æĸŃ ĠRx Java Ġ ç®¡ éģĵ ĊĠĠĠ Ġ} Ċ Ċ }