package Ġbr . com . fi ap . room database . task Ċ Ċ import Ġandroid . os . System Clock Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġbr . com . fi ap . room database . database . Task Dao Ċ import Ġbr . com . fi ap . room database . service . Task Service Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠTask ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġservice : ĠTask Service , ĊĠĠĠ Ġprivate Ġval Ġtask Dao : ĠTask Dao Ċ ): ĠViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġtasks LiveData Ġ= ĠMutable LiveData < List < Task >>() ĊĠĠĠ Ġval Ġnew Task LiveData Ġ= ĠMutable LiveData < Task >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfetch Tasks () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Tasks () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// bus car Ġdo Ġbanco Ġlocal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcached Data Ġ= Ġtask Dao . get Tasks () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtasks LiveData . post Value ( cached Data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// bus car Ġdados Ġda ĠAPI ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . sleep ( 2 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠList < Task > Ġ= Ġservice . get Tasks () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult 2 Ġ= Ġmutable ListOf < Task >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult 2 . addAll ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult 2 . add ( Task ( description Ġ= Ġ" NO VA ĠTASK ĠTEST E ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtasks LiveData . post Value ( result 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// at ual izar Ġo Ġcache ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Dao . delete All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Dao . insert Task (* result . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnew Task ( task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . new Task ( task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Task LiveData . post Value ( task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }