package Ġcom . example . android . polit ical prepared ness . election Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . net . Network Capabilities Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . example . android . polit ical prepared ness . database . E lection Dao Ċ import Ġcom . example . android . polit ical prepared ness . database . E lection Database . Companion . getInstance Ċ import Ġcom . example . android . polit ical prepared ness . network . models . E lection Ċ import Ġcom . example . android . polit ical prepared ness . util . AsyncOperation State Ċ import Ġkotlinx . coroutines . launch Ċ Ċ // TODO : ĠConstruct ĠViewModel Ġand Ġprovide Ġelection Ġdatasource Ċ class ĠE lection s ViewModel ( application : ĠApplication , Ġcontext : ĠContext ): ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdatabase Ġ= ĠgetInstance ( application ) ĊĠĠĠ Ġprivate Ġval Ġelection Repository Ġby Ġlazy Ġ{ ĠE lection s Repository ( database ) Ġ} ĊĠĠĠ Ġprivate Ġval ĠdataSource : ĠE lection Dao Ġ= Ġdatabase . election Dao ĊĊĠĠĠ Ġ// TODO : ĠCreate Ġlive Ġdata Ġval Ġfor Ġupcoming Ġelection s ĊĠĠĠ Ġval Ġupcoming E lection s : ĠLive Data < List < E lection >> Ġ= Ġelection Repository . election List ĊĊĠĠĠ Ġ// TODO : ĠCreate Ġlive Ġdata Ġval Ġfor Ġsaved Ġelection s ĊĠĠĠ Ġprivate Ġval Ġ_ saved E lection s Ġ= ĠMutable LiveData < List < E lection >>() ĊĠĠĠ Ġval Ġsaved E lection s : ĠLive Data < List < E lection >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ saved E lection s ĊĊĠĠĠ Ġprivate Ġval Ġ_ state Ġ= ĠMutable LiveData < AsyncOperation State >() ĊĠĠĠ Ġval Ġstate : ĠLive Data < AsyncOperation State > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ state ĊĊĠĠĠ Ġ// TODO : ĠCreate Ġval Ġand Ġfunctions Ġto Ġpopulate Ġlive Ġdata Ġfor Ġupcoming Ġelection s Ġfrom Ġthe ĠAPI Ġand Ġsaved Ġelection s Ġfrom Ġlocal Ġdatabase ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Online ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ state . post Value ( AsyncOperation State . LOADING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelection Repository . refresh E lection s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ state . post Value ( AsyncOperation State . SUCCESS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ state . post Value ( AsyncOperation State . FAILURE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" Network Ġcall Ġfailure ", ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Main ViewModel ", Ġ" Network Ġcall Ġfailure ", Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" No ĠInternet ĠConnection ĠDet ected ", ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Saved E lection s () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelection s Ġ= ĠdataSource . get E lection List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ saved E lection s . post Value ( election s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Main ViewModel ", Ġ" Unable Ġto Ġfetch Ġupdated Ġlist ", Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Online ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnectivity Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getSystem Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠ Ġval Ġcapabilities Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnectivity Manager . get Network Capabilities ( connectivity Manager . active Network ) ĊĠĠĠĠĠĠĠ Ġif Ġ( capabilities Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapabilities . has Transport ( Network Capabilities . TRANSPORT _ CELL ULAR ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Internet ", Ġ" Network Capabilities . TRANSPORT _ CELL ULAR ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapabilities . has Transport ( Network Capabilities . TRANSPORT _ WIFI ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Internet ", Ġ" Network Capabilities . TRANSPORT _ WIFI ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapabilities . has Transport ( Network Capabilities . TRANSPORT _ ETHER NET ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Internet ", Ġ" Network Capabilities . TRANSPORT _ ETHER NET ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// TODO : ĠCreate Ġfunctions Ġto Ġnavigate Ġto Ġsaved Ġor Ġupcoming Ġelection Ġvot er Ġinfo Ċ }