package Ġcom . br ady . github job demo . ui Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . arch . lifecycle . Android ViewModel Ċ import Ġandroid . databinding . Observable Ċ import Ġandroid . databinding . Property Change Registry Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Parcelable Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ Ċ abstract Ġclass ĠBase ViewModel < State Ġ: ĠParcel able >( ĊĠĠĠĠĠĠĠ Ġapp : ĠApplication , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstate Key : ĠString , ĊĠĠĠĠĠĠĠ Ġprotected Ġvar Ġstate : ĠState , ĊĠĠĠĠĠĠĠ Ġprotected Ġval Ġdis pos ables : ĠComposite Disposable Ġ= ĠComposite Disposable ()) ĊĠĠĠ Ġ: ĠAndroid ViewModel ( app ), ĠObservable Ġ{ ĊĊĠĠĠ Ġprivate Ġvar ĠviewModel Initialized : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġsave State ( bundle : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbundle . put Parcelable ( state Key , Ġstate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrestore State ( bundle : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bundle Ġ!= Ġnull Ġ&& Ġbundle . containsKey ( state Key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġbundle . get Parcelable ( state Key ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! viewModel Initialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Initialized Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup ViewModel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġsetup ViewModel () ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis pos ables . dispose () ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠStart Ġof Ġdatab ind ing Ġbehavior Ġp ill aged Ġfrom ĠBase Observable Ġ*/ ĊĊĠĠĠ Ġ@ Transient Ġprivate Ġvar Ġdatab ind ing Callbacks : ĠProperty Change Registry ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġadd On PropertyChanged Callback ( callback : ĠObservable . On PropertyChanged Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( databinding Callbacks Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatab ind ing Callbacks Ġ= ĠProperty Change Registry () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdatab ind ing Callbacks !!. add ( callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove On PropertyChanged Callback ( callback : ĠObservable . On PropertyChanged Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( databinding Callbacks Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdatab ind ing Callbacks !!. remove ( callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnotify Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( databinding Callbacks Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdatab ind ing Callbacks !!. notify Callbacks ( this , Ġ 0 , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnotify PropertyChanged ( fieldId : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( databinding Callbacks Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdatab ind ing Callbacks !!. notify Callbacks ( this , ĠfieldId , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠEnd Ġof Ġdatab ind ing Ġbehavior Ġp ill aged Ġfrom ĠBase Observable Ġ*/ Ċ }