package Ġcom . zh uz ich u . mv vm . base Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . trello . rx lifecycle 3 . Lifecycle Provider Ċ import Ġcom . zh uz ich u . mv vm . bus . event . Single Live Event Ċ import Ġcom . zh uz ich u . mv vm . http . exception . Response Throwable Ċ import Ġcom . zh uz ich u . mv vm . utils . toast Ċ import Ġcom . zh uz ich u . mv vm . view . layout . Multi State View Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . cancel Ċ import Ġme . yo keyword . fragment ation . ISupport Fragment Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠAndroid ĠStudio . Ċ Ġ* ĠBlog : Ġz hu z ich u . com Ċ Ġ* ĠUser : Ġz hu z ich u Ċ Ġ* ĠDate : Ġ 2 0 1 9 - 0 5 - 2 7 Ċ Ġ* ĠTime : Ġ 1 5 : 1 6 Ċ Ġ*/ Ċ open Ġclass ĠBase ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ), ĠI Base ViewModel Ġ{ ĊĠĠĠ Ġval Ġ_ context : ĠContext Ġ= Ġapplication . application Context ĊĠĠĠ Ġprivate Ġval Ġ_ uc : ĠUI Change LiveData Ġ= ĠUI Change LiveData () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ lifecycle : ĠLifecycle Provider < *> ĊĠĠĠ Ġlateinit Ġvar Ġ_ activity : ĠFragment Activity ĊĠĠĠ Ġlateinit Ġvar Ġ_ fragment : ĠFragment ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æ³¨ åħ¥ Rx Lifecycle çĶŁåĳ½ åĳ¨æľŁ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlifecycle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinject Lifecycle Provider ( lifecycle : ĠLifecycle Provider <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis ._ lifecycle Ġ= Ġlifecycle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinject Fragment ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ fragment Ġ= Ġfragment ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Lifecycle Provider (): ĠLifecycle Provider < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ lifecycle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget UC (): ĠUI Change LiveData Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ uc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġback () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ uc . get On Back Pressed Event (). call () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Loading Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ uc . get Show Loading Dialog Event (). call () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Loading Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ uc . get Hide Loading Dialog Event (). call () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Content () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ uc . get Multi State Event (). post Value ( Multi State View . VIEW _ STATE _ CONTENT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ uc . get Multi State Event (). post Value ( Multi State View . VIEW _ STATE _ ERROR ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Empty () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ uc . get Multi State Event (). post Value ( Multi State View . VIEW _ STATE _ EMPTY ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ uc . get Multi State Event (). post Value ( Multi State View . VIEW _ STATE _ LOADING ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Soft Key Board () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ uc . get Hide Soft Key Board Event (). call () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Throwable ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( throwable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse Throwable Ġ-> Ġtoast ( throwable . msg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrowable . printStackTrace () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpost Delayed ( r : Ġ() Ġ-> ĠUnit , Ġdelay Millis : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ fragment . view ?. post Delayed ( r , Ġdelay Millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Fragment ( ĊĠĠĠĠĠĠĠ Ġfragment : ĠFragment , ĊĠĠĠĠĠĠĠ Ġbundle : ĠBundle ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ@ ISupport Fragment . Launch Mode Ġlaunch Mode : ĠInt ? Ġ= ĠIS upport Fragment . STANDARD ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠHashMap < String , ĠAny >() ĊĠĠĠĠĠĠĠ Ġif Ġ( bundle Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . arguments Ġ= Ġbundle ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġparams [ Parameter Field . FRAGMENT ] Ġ= Ġfragment ĊĠĠĠĠĠĠĠ Ġparams [ Parameter Field . FRAGMENT _ LA UNCH MODE ] Ġ= Ġlaunch Mode . toString () ĊĠĠĠĠĠĠĠ Ġ_ uc . getStart Fragment Event (). post Value ( params ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠstartActivity ( ĊĠĠĠĠĠĠĠ Ġcl z : ĠClass <* >, ĊĠĠĠĠĠĠĠ Ġbundle : ĠBundle ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġis Pop : ĠBoolean ? Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġoptions : ĠBundle ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠHashMap < String , ĠAny >() ĊĠĠĠĠĠĠĠ Ġparams [ Parameter Field . CLASS ] Ġ= Ġcl z ĊĠĠĠĠĠĠĠ Ġbundle ?. let Ġ{ Ġparams [ Parameter Field . B UNDLE ] Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġoptions ?. let Ġ{ Ġparams [ Parameter Field . OPTIONS ] Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġis Pop ?. let Ġ{ Ġparams [ Parameter Field . POP ] Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġrequest Code ?. let Ġ{ Ġparams [ Parameter Field . REQUEST _ CODE ] Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ_ uc . getStart Activity Event (). post Value ( params ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠUI Change LiveData Ġ: ĠSingle Live Event < Any >() Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠstartActivity Event : ĠSingle Live Event < Map < String , ĠAny >> Ġ= ĠSingle Live Event () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstart Fragment Event : ĠSingle Live Event < Map < String , ĠAny >> Ġ= ĠSingle Live Event () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfinish Event : ĠSingle Live Event < Void > Ġ= ĠSingle Live Event () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Back Pressed Event : ĠSingle Live Event < Void > Ġ= ĠSingle Live Event () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmulti State Event : ĠSingle Live Event < Int > Ġ= ĠSingle Live Event () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Show Loading Dialog : ĠSingle Live Event < Void > Ġ= ĠSingle Live Event () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Hide Loading Dialog : ĠSingle Live Event < Void > Ġ= ĠSingle Live Event () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġhide Soft Key Board Event : ĠSingle Live Event < Void > Ġ= ĠSingle Live Event () ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Hide Loading Dialog Event (): ĠSingle Live Event < Void > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġon Hide Loading Dialog ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Show Loading Dialog Event (): ĠSingle Live Event < Void > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġon Show Loading Dialog ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Multi State Event (): ĠSingle Live Event < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmulti State Event ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Start Activity Event (): ĠSingle Live Event < Map < String , ĠAny >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠstartActivity Event ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Start Fragment Event (): ĠSingle Live Event < Map < String , ĠAny >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstart Fragment Event ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Finish Event (): ĠSingle Live Event < Void > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfinish Event ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget On Back Pressed Event (): ĠSingle Live Event < Void > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġon Back Pressed Event ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Hide Soft Key Board Event (): ĠSingle Live Event < Void > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhide Soft Key Board Event ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġobserve ( owner : ĠLifecycle Owner , Ġobserver : ĠObserver < in ĠAny >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . observe ( owner , Ġobserver ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ ĠviewModel Scope . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠParameter Field Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFR AG MENT _ LA UNCH MODE Ġ= Ġ" FRAGMENT _ LA UNCH MODE " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFR AG MENT Ġ= Ġ" FRAGMENT " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCLASS Ġ= Ġ" CLASS " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠB UNDLE Ġ= Ġ" B UNDLE " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPOP Ġ= Ġ" POP " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOPTIONS Ġ= Ġ" OPTIONS " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ CODE Ġ= Ġ" REQUEST _ CODE " ĊĠĠĠ Ġ} Ċ Ċ }