package Ġnet . raf ael to led o . code . ui Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ Ċ abstract Ġclass ĠBase ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ loading Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġloading : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ loading ĊĊĠĠĠ Ġprivate Ġval Ġ_ error Ġ= ĠMutable LiveData < Throwable >() ĊĠĠĠ Ġval Ġerror : ĠLive Data < Throwable > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ error ĊĊĠĠĠ Ġprotected Ġfun Ġlaunch Data Load ( block : Ġsuspend ĠCor outine Scope . () Ġ-> ĠUnit ): ĠJob Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorHandler ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠerrorHandler Ġ= Ġ{ Ġe : ĠThrowable Ġ-> ĊĠĠĠĠĠĠĠ ĠLog . e (" ViewModel ", Ġ" Failed Ġto Ġperform Ġaction ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ_ loading . post Value ( false ) ĊĠĠĠĠĠĠĠ Ġ_ error . post Value ( e ) ĊĠĠĠ Ġ} Ċ }