package Ġro . dob re sc u and rei . mv vm . editor Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . rx kotlin . subscribe By Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġro . dob re sc u and rei . mv vm . Base ViewModel Ċ import Ġro . dob re sc u and rei . mv vm . R Ċ import Ġro . dob re sc u and rei . mv vm . event bus . Foreground EventBus Ċ import Ġro . dob re sc u and rei . mv vm . utils . Non Nullable LiveData Ċ import Ġro . dob re sc u and rei . mv vm . utils . notify Ċ Ċ abstract Ġclass ĠBase Editor ViewModel < MODEL Ġ: ĠAny > Ġ: ĠBase ViewModel Ċ { ĊĠĠĠ Ġ@ Published Api ĊĠĠĠ Ġinternal Ġval Ġmodel LiveData Ġ: ĠNon Nullable LiveData < MODEL > ĊĊĠĠĠ Ġconstructor ( model Ġ: ĠMODEL ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . model LiveData = Non Nullable LiveData ( initial Value Ġ= Ġmodel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Published Api ĊĠĠĠ Ġinternal Ġvar Ġshould Notify Model LiveData On Property Change Ġ: ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġ@ Published Api ĊĠĠĠ Ġinternal Ġvar Ġadd Mode Ġ: ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġvar ĠisValid Ġ: ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġopen Ġfun Ġ Ġadd Mode () Ġ= Ġadd Mode ĊĠĠĠ Ġopen Ġfun Ġedit Mode () Ġ= Ġ! add Mode ĊĊĠĠĠ Ġabstract Ġfun Ġadd Ġ( model Ġ: ĠMODEL ) Ġ: ĠComp letable ĊĠĠĠ Ġabstract Ġfun Ġedit ( model Ġ: ĠMODEL ) Ġ: ĠComp letable ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĊĠĠĠĠĠĠĠ ĠonCreate ( model LiveData . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun ĠonCreate ( model Ġ: ĠMODEL ) Ġ{} ĊĊĠĠĠ Ġfun Ġnotify Change ( consumer Ġ: Ġ( MODEL ) Ġ-> Ġ( Unit )) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġconsumer ( model LiveData . value ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( should Notify Model LiveData On Property Change ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel LiveData . notify () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġfun Ġon Save Button Clicked () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isValid ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( add Mode ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( model LiveData . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġedit ( model LiveData . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( onError Ġ= Ġ{ Ġexception Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠonComplete Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( add Mode ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Added ( model LiveData . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġon Edited ( model LiveData . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( R . string . you _ have _ errors _ please _ correct ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġon Added ( model Ġ: ĠMODEL ) Ġ{} ĊĠĠĠ Ġopen Ġfun Ġon Edited ( model Ġ: ĠMODEL ) Ġ{} Ċ } Ċ