package Ġcom . th ak urn it in 2 6 8 4 . my tasks Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . database . Content Observer Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Handler Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ credits Ġfor Ġcode Ġbase Ġ: ĠTim ĠB uc hel ka Ġ, www . learn programming . academy Ċ Ġ*/ Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" My Tasks ViewModel " Ċ Ċ class ĠMy Tasks ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcontent Observer Ġ= Ġobject Ġ: ĠContent Observer ( Handler ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChange ( self Change : ĠBoolean , Ġuri : ĠUri ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Task () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġdatabase Cursor Ġ= ĠMutable LiveData < Cursor >() ĊĠĠĠ Ġval Ġcursor : ĠLive Data < Cursor > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdatabase Cursor ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Task Timer ViewModel : Ġcreated ") ĊĠĠĠĠĠĠĠ Ġget Application < Application >(). content Resolver . register Content Observer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTasks Table . CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Observer ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġload Task () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Task () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprojection Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTasks Table . Columns . ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTasks Table . Columns . TASK _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTasks Table . Columns . TASK _ DESCRIPTION , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTasks Table . Columns . TASK _ TIME ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġget Application < Application >(). content Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTasks Table . CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprojection , Ġnull , Ġnull , Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase Cursor . post Value ( cursor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Task ( task : ĠTask ): ĠTask Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠContent Values () ĊĠĠĠĠĠĠĠ Ġif Ġ( task . name . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( Tasks Table . Columns . TASK _ NAME , Ġtask . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( Tasks Table . Columns . TASK _ DESCRIPTION , Ġtask . description ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( Tasks Table . Columns . TASK _ TIME , Ġtask . time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . id Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġget Application < Application >(). content Resolver ?. insert ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTasks Table . CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . id Ġ= ĠTasks Table . getId ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Application < Application >(). content Resolver ?. update ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTasks Table . build Uri From Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġvalues , Ġnull , Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG ," Task Ġsaved Ġ: Ġ${ task . name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtask ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Task ( taskId : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Application < Application >(). content Resolver ?. delete ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTasks Table . build Uri From Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtaskId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġnull , Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Application < Application >(). content Resolver . unregister Content Observer ( content Observer ) ĊĠĠĠ Ġ} Ċ }