package Ġbr . com . dio . tod olist . ui ĊĊ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . activity . view Models Ċ import Ġbr . com . dio . tod olist . App ĊĊ Ċ import Ġbr . com . dio . tod olist . databinding . Activity Main Binding ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbinding Ġby Ġlazy Ġ{ ĠActivity Main Binding . inflate ( layout Inflater ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġmain ViewModel : ĠMain ViewModel Ġby Ġview Models Ġ{ ĊĠĠĠĠĠĠĠ ĠMain ViewModel Factory (( application Ġas ĠApp ). repository ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġadapter Ġby Ġlazy Ġ{ ĠTask ListAdapter () Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġbinding . rv Tasks . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġinsert Listeners () ĊĠĠĠĠĠĠĠ ĠgetAll Tasks () ĊĠĠĠĠĠĠĠ Ġupdate Tasks () ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetAll Tasks () Ġ{ ĊĠĠĠĠĠĠĠ Ġmain ViewModel . all Tasks . observe ( this , Ġ{ Ġtasks Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . include Empty . empty State . visibility Ġ= Ġif Ġ( tasks . isEmpty ()) ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( tasks ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Tasks () Ġ{ ĊĠĠĠĠĠĠĠ Ġmain ViewModel . all Tasks . observe ( this , Ġ{ Ġtasks Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tasks . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . include Empty . empty State . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Title . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . include Empty . empty State . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Title . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( tasks ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinsert Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . fab . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( Intent ( this , ĠAdd Task Activity :: class . java ), ĠCREATE _ NEW _ TASK ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadapter . listener Edit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠAdd Task Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Add Task Activity . TASK _ ID , Ġit . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠUPDATE _ TASK ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadapter . listener Delete Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . delete ( it ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠCREATE _ NEW _ TASK Ġ&& ĠresultCode Ġ== ĠActivity . RESULT _ OK ) ĠgetAll Tasks () ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠUPDATE _ TASK Ġ&& Ġrequest Code Ġ== ĠActivity . RESULT _ OK ) Ġupdate Tasks () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCREATE _ NEW _ TASK Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠUPDATE _ TASK Ġ= Ġ 1 0 0 1 ĊĠĠĠ Ġ} Ċ Ċ } ĊĊĊ