package Ġcom . i hs an project . client . repository Instances Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . room . Dao Ċ import Ġandroidx . room . Insert Ċ import Ġandroidx . room . Query Ċ import Ġcom . i hs an project . client . Api Factory Ċ import Ġcom . i hs an project . client . domain . models . Settings Model Ċ import Ġcom . i hs an project . client . domain . repositories . Settings Repository Ċ import Ġcom . i hs an project . client . factories . Database Factory Ċ import Ġkotlinx . coroutines .* Ċ import Ġretrofit 2 . Response Ċ import Ġretrofit 2 . http . GET Ċ import Ġretrofit 2 . http . Path Ċ Ċ class ĠSettings Repository Instance ( private Ġval Ġactivity : ĠAppCompatActivity ) Ġ: ĠSettings Repository Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsettings Dao : ĠSettings Dao ? ĊĠĠĠ Ġprivate Ġval Ġsettings Api Ġ: ĠSettings Api Ġ= ĠApi Factory . ret rofit . create ( Settings Api :: class . java ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdb Ġ= ĠDatabase Factory . get Database ( activity . application ) ĊĠĠĠĠĠĠĠ Ġsettings Dao Ġ= Ġdb ?. settings Dao () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġsettings From Db Async Ġ: ĠDeferred < Settings Model ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfuture Ġ= ĠComp letable Deferred < Settings Model ?> () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDispatch Ġto Ġmain Ġthread : Ġhttps :// stackoverflow . com / a / 5 4 0 9 0 4 9 9 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Dao ?. settings ?. observe ( activity , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfuture . complete ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfuture ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstore To Db ( settings Ġ: ĠSettings Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings Dao ?. insert ( settings ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsettings From Server ( current Version : ĠInt ) Ġ: ĠSettings Model ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠApi Factory . call ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall Ġ= Ġ{ Ġsettings Api . get Settings Async ( current Version ). await () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Server Ġnot Ġrespon ding ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġactivity . application . application Context ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresponse ; ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠSettings Api Ġ{ ĊĊĠĠĠ Ġ@ GET (" settings /{ version }") ĊĠĠĠ Ġfun Ġget Settings Async (@ Path (" version ") Ġversion : ĠInt ) Ġ: ĠDeferred < Response < Settings Model >> Ċ } Ċ Ċ @ Dao Ċ interface ĠSettings Dao Ġ{ ĊĊĠĠĠ Ġ@ get : Query (" SELECT Ġ* Ġfrom Ġsettings ĠORDER ĠBY Ġversion ĠDESC ") ĊĠĠĠ Ġval Ġsettings : ĠLive Data < Settings Model ?> ĊĊĠĠĠ Ġ@ Insert ĊĠĠĠ Ġfun Ġinsert ( user : ĠSettings Model ) Ċ }