/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠI ce Rock ĠMAG ĠInc . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġdev . icer ock . mo ko . widgets . screen Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . os . Parcelable Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġdev . icer ock . mo ko . mv vm . create ViewModel Factory Ċ import Ġdev . icer ock . mo ko . mv vm . dispatcher . Events Dispatcher Ċ import Ġdev . icer ock . mo ko . mv vm . view model . ViewModel Ċ import Ġjava . util . concurrent . Executor Ċ Ċ actual Ġabstract Ġclass ĠScreen < Arg Ġ: ĠArgs > Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġactual Ġinline Ġfun Ġ< re ified ĠVM Ġ: ĠViewModel , ĠKey Ġ: ĠAny > Ġget ViewModel ( ĊĠĠĠĠĠĠĠ Ġkey : ĠKey , ĊĠĠĠĠĠĠĠ Ġcross inline ĠviewModel Factory : Ġ() Ġ-> ĠVM ĊĠĠĠ Ġ): ĠVM Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠViewModel Provider ( this , Ġcreate ViewModel Factory Ġ{ ĠviewModel Factory () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( key . toString (), ĠVM :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġ< T Ġ: ĠAny > Ġcreate Events Dispatcher (): ĠEvents Dispatcher < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmain Looper Ġ= ĠL ooper . get Main Looper () ĊĠĠĠĠĠĠĠ Ġval Ġmain Handler Ġ= ĠHandler ( main Looper ) ĊĠĠĠĠĠĠĠ Ġval Ġmain Executor Ġ= ĠExecutor Ġ{ Ġmain Handler . post ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠEvents Dispatcher ( main Executor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġroute Handlers Ġ= Ġmutable Map Of < Int , Ġ( Parcelable ?) Ġ-> ĠUnit >() ĊĊĠĠĠ Ġvar Ġrequest Code : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġvar ĠresultCode : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġscreen Id : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠsavedInstanceState ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code Ġ= Ġget Int Nullable ( REQUEST _ CODE _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠresultCode Ġ= Ġget Int Nullable ( RESULT _ CODE _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscreen Id Ġ= Ġget Int Nullable ( SCREEN _ ID _ KEY ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĊĠĠĠĠĠĠĠ Ġrequest Code ?. let Ġ{ Ġout State . put Int ( REQUEST _ CODE _ KEY , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ ĠresultCode ?. let Ġ{ Ġout State . put Int ( RESULT _ CODE _ KEY , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġscreen Id ?. let Ġ{ Ġout State . put Int ( SCREEN _ ID _ KEY , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ CODE _ KEY Ġ= Ġ" screen : request Code " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESULT _ CODE _ KEY Ġ= Ġ" screen : result Code " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSCREEN _ ID _ KEY Ġ= Ġ" screen : id " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠBundle . getInt Nullable ( key : ĠString ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( containsKey ( key )) Ġget Int ( key ) ĊĠĠĠĠĠĠĠ Ġelse Ġnull ĊĠĠĠ Ġ} Ċ } Ċ