package Ġcom . example . android . polit ical prepared ness . election Ċ Ċ import Ġandroidx . lifecycle .* Ċ import Ġcom . example . android . polit ical prepared ness . database . E lection Database Ċ import Ġcom . example . android . polit ical prepared ness . network . C iv ics Api Ċ import Ġcom . example . android . polit ical prepared ness . network . models . Division Ċ import Ġcom . example . android . polit ical prepared ness . network . models . E lection Ċ import Ġcom . example . android . polit ical prepared ness . network . models . V oter Info Response Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context ĊĊ Ċ class ĠV oter Info ViewModel ( private Ġval Ġdatabase : ĠE lection Database , Ġprivate Ġval Ġelection : ĠE lection ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġ// TODO ĠCOMP LETED : ĠAdd Ġlive Ġdata Ġto Ġhold Ġvot er Ġinfo ĊĠĠĠ Ġval Ġvot er Info Ġ= ĠMutable LiveData < V oter Info Response >() ĊĊĠĠĠ Ġprivate Ġval Ġ_ url Ġ= ĠMutable LiveData < String ?> () ĊĠĠĠ Ġval Ġurl : ĠLive Data < String ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ url ĊĊĠĠĠ Ġfun Ġset Url ( url : ĠString ? ){ ĊĠĠĠĠĠĠĠ Ġ_ url . value Ġ= Ġurl ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// TODO : ĠAdd Ġvar Ġand Ġmethods Ġto Ġpopulate Ġvot er Ġinfo ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHelper Ġmethod Ġto Ġproduce Ġaddress Ġto Ġpass Ġto Ġretrofit Ġfor Ġvot er Ġinfo ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Division Ad r ( division : ĠDiv ision ): ĠString { ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( division . state ĠĠ Ġ!= Ġ"") Ġresult . append ( division . state ) ĊĠĠĠĠĠĠĠ Ġif Ġ( division . country Ġ!= Ġ""){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . toString () ! ="") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append (", Ġ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append ( division . country ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġfetch V ot ers Info () Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠC iv ics Api . ret rofit Service . get V oter Info ( get Division Ad r ( election . division ), Ġelection . id ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvot er Info . post Value ( response . body ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit { ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch V ot ers Info () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// TODO : ĠAdd Ġvar Ġand Ġmethods Ġto Ġsupport Ġloading ĠURLs ĊĊĠĠĠ Ġ// TODO : ĠAdd Ġvar Ġand Ġmethods Ġto Ġsave Ġand Ġremove Ġelection s Ġto Ġlocal Ġdatabase ĊĠĠĠ Ġ// TODO : Ġcont 'd Ġ-- ĠPopulate Ġinitial Ġstate Ġof Ġsave Ġbutton Ġto Ġreflect Ġproper Ġaction Ġbased Ġon Ġelection Ġsaved Ġstatus ĊĠĠĠ Ġprivate Ġval Ġ_ is E lection Follow ed : ĠLive Data < Int > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdatabase . election Dao . is E lection Follow ed ( election . id ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTransformation Ġmap Ġto Ġproduce Ġboolean Ġresult Ġabout Ġif Ġwe Ġfollow Ġthe Ġelection Ġor Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis E lection Follow ed Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransform ations . map (_ is E lection Follow ed ) Ġ{ Ġfollow Value Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfollow Value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfollow Value Ġ== Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFollow Ġ/ ĠUn follow Ġthe Ġselected Ġelection ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Follow Button Click (){ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is E lection Follow ed . value Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . election Dao . un follow E lection ( election ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . election Dao . follow E lection ( election ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHint : ĠThe Ġsaved Ġstate Ġcan Ġbe Ġaccomp lished Ġin Ġmultiple Ġways . ĠIt Ġis Ġdirectly Ġrelated Ġto Ġhow Ġelection s Ġare Ġsaved / removed Ġfrom Ġthe Ġdatabase . ĊĠĠĠĠ Ġ*/ Ċ Ċ }