package Ġgr . pch as apis . mov ied b . mv vm . viewModel . base Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . net . Unknown Host Exception Ċ import Ġkotlin . coroutines . Coroutine Context Ċ Ċ open Ġclass ĠBase ViewModel Ġ: ĠViewModel (), ĠCor outine Scope Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Job Ġ= ĠSuper visor Job () ĊĠĠĠ Ġprotected Ġval Ġbg Dispatcher : ĠCor outine Dispatcher Ġ= ĠDispatch ers . IO ĊĠĠĠ Ġprotected Ġval Ġui Scope Ġ= ĠCor outine Scope ( Dispatch ers . Main Ġ+ ĠviewModel Job ) ĊĠĠĠ Ġprotected Ġvar Ġloading LiveData : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġprotected Ġvar Ġempty LiveData : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġvar Ġno Internet LiveData : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġvar Ġgeneric Error LiveData : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġis Ġthe Ġjob Ġfor Ġall Ġcor outines Ġstarted Ġby Ġthis ĠViewModel . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠC ancell ing Ġthis Ġjob Ġwill Ġcancel Ġall Ġcor outines Ġstarted Ġby Ġthis ĠViewModel . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġwould Ġensure Ġthat Ġour Ġcor outines Ġdo Ġnot Ġget Ġcanceled Ġeven ĊĠĠĠĠ Ġ* Ġwhen Ġthe Ġscreen Ġrot ates Ġand Ġour Ġactivity Ġis Ġre created ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠDispatch ers . Main Ġ+ ĠviewModel Job ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCancel Ġall Ġcor outines Ġwhen Ġthe ĠViewModel Ġis Ġcleared ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ ĠviewModel Job . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Empty View (): ĠLive Data < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġempty LiveData ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Loading View (): ĠLive Data < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġloading LiveData ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Internet Error (): ĠLive Data < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġno Internet LiveData ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Generic Error (): ĠLive Data < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgeneric Error LiveData ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonError Throwable ( throwable : ĠThrowable ?, Ġis Show Empty View : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġloading LiveData . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( throwable Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeneric Error LiveData . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Network Error ( throwable )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno Internet LiveData . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeneric Error LiveData . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Show Empty View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty LiveData . value Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Network Error ( throwable : ĠThrowable ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( throwable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUnknown Host Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ }