package Ġcom . ay ust ark . todo _ manager Ċ Ċ import Ġandroid . app . DatePicker Dialog Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġcom . ay ust ark . todo _ manager . db . Note Ċ import Ġcom . ay ust ark . todo _ manager . db . Note DAO Ċ import Ġcom . ay ust ark . todo _ manager . db . Note Database Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . time . LocalDate Ċ import Ġjava . util .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠNote RecyclerView Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdao : ĠNote DAO ĊĠĠĠ Ġprivate Ġvar Ġis Update Or Delete Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnote ToUpdate Or Delete : ĠNote ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtoday : ĠLocalDate ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcal Data : ĠLocalDate ĊĠĠĠ Ġprivate Ġval Ġchannel Id Ġ= Ġ" TODO " ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnotification Manager : ĠNotification Manager ĊĊĠĠĠ Ġ// ĠĠĠ Ġvar Ġnote List Ġ= Ġarray ListOf < Note >() ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠ ĠThen Ġwe Ġneed Ġa Ġreference Ġvariable Ġfor Ġa ĠNote ViewModel Ġinstance , Ġbur Ġbefore ĊĠĠĠĠĠĠĠĠĠĠ Ġgetting Ġthe ĠviewModel ĠInstance Ġusing Ġthe ĠFactory Ġclass Ġwe Ġneed Ġto Ġcreate Ġa ĊĠĠĠĠĠĠĠĠĠĠ ĠViewModel Factory Ġinstance Ġ, Ġto Ġcreate Ġa ĠNote ViewModel Factory Ġinstance Ġwe ĊĠĠĠĠĠĠĠĠĠĠ Ġneed Ġto Ġpass Ġa ĠDAO Ġinstance Ġas Ġan Ġargument . ĠLet 's Ġmake Ġa ĠDAO Ġinstance ĊĠĠĠĠĠĠĠĠĠĠ Ġfirst ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ// We Ġalready Ġcreated Ġa Ġroom Ġdatabase Ġclass Ġwhich Ġprovides Ġa Ġsingleton Ġdatabase Ġinstance ĊĠĠĠĠĠĠĠ Ġnotification Manager Ġ= Ġget System Service ( NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠNotification Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Due Ġtasks ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Manager . IMPORT ANCE _ DEFAULT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . create Notification Channel ( channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdao Ġ= ĠNote Database . getInstance ( application ). note DAO ĊĠĠĠĠĠĠĠ Ġval Ġcal Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġtoday Ġ= ĠLocalDate . parse ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ cal . get ( Calendar . YEAR )} -${ add Zero ( cal . get ( Calendar . MONTH ) Ġ+ Ġ 1 )} -${ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Zero ( cal . get ( Calendar . DAY _ OF _ MONTH )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcal Data Ġ= Ġtoday ĊĠĠĠĠĠĠĠ Ġnote Date . text Ġ= Ġcal Data . toString () ĊĠĠĠĠĠĠĠ Ġnote Date . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd pd Ġ= ĠDate Picker Dialog ( this @ MainActivity , Ġ{ Ġ_, Ġyear , Ġmonth , Ġday Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠLocalDate . parse ("$ year -${ add Zero ( month Ġ+ Ġ 1 )} -${ add Zero ( day )} ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Date ", Ġ"$ date Ġ$ today ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Date . text Ġ= Ġdate . toString () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" DATE ", Ġ" Ġ${ date . minus ( today )} Ġ$ today Ġ$ year Ġ${ month Ġ+ Ġ 1 } Ġ$ day ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġcal Data . year , Ġcal Data . month Value Ġ- Ġ 1 , Ġcal Data . day OfMonth ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd pd . create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd pd . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinit RecyclerView () ĊĠĠĠĠĠĠĠ Ġif Ġ( intent . getBoolean Extra (" not ified ", Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Item Clicked ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNote ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . getInt Extra (" id ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . getString Extra (" title ") !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . getString Extra (" desc ") !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . getString Extra (" date ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/* note Date . init ( 2 0 2 0 , Ġ 1 1 , Ġ 2 2 ) Ġ{ Ġview , Ġyear , Ġmonth , Ġday Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsdf Ġ= ĠSimpleDateFormat (" dd - MM - YYYY ", ĠLocale . getDefault ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformat Ġ= Ġsdf . format ( Calendar . getInstance (). set ( year , Ġmonth , Ġday )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= Ġsdf . parse ( format ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate 2 Ġ= ĠLocalDate . parse ("$ year -${ add Zero ( month Ġ+ Ġ 1 )} -${ add Zero ( day )} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoday Ġ= ĠLocalDate . parse (" 2 0 2 0 - 1 1 - 1 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" DATE ", Ġ" Ġ${ date 2 . minus ( today )} Ġ$ today Ġ$ year Ġ${ month Ġ+ Ġ 1 } Ġ$ day ") ĊĠĠĠĠĠĠĠ Ġ}*/ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġnote RecyclerView . layout Manager Ġ= ĠGrid LayoutManager ( this @ MainActivity , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ// To Ġminimize Ġcode Ġin consistency Ġwe Ġwill Ġonly Ġcreate Ġonly Ġone Ġadapter ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠNote RecyclerView Adapter ( this @ MainActivity ) Ġ{ Ġselected Item : ĠNote Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Item Clicked ( selected Item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnote RecyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġdisplay Notes List () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// Creating Ġa Ġfunction Ġto Ġobserve Ġthe Ġlist Ġof Ġdata Ġin Ġdatabase Ġtable ĊĠĠĠ Ġprivate Ġfun Ġdisplay Notes List () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnotes Ġ= Ġdao . getAll Notes () ĊĠĠĠĠĠĠĠ Ġnotes . observe ( this @ MainActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . set List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Due ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Due ( notes : ĠList < Note >) Ġ{ ĊĠĠĠĠĠĠĠ Ġnotification Manager . cancel All () ĊĠĠĠĠĠĠĠ ĠLog . e (" Notes ", Ġnotes . toString ()) ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( note Ġin Ġnotes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( LocalDate . parse ( note . date ). minus ( today )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġ"${ note . title } Ġis Ġdue ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( application Context , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" not ified ", Ġtrue ). putExtra (" id ", Ġnote . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra (" title ", Ġnote . title ). putExtra (" desc ", Ġnote . description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra (" date ", Ġnote . date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ ACTIVITY _ CLEAR _ TOP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Intent Ġ= ĠPending Intent . getActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġi , Ġintent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . FLAG _ UPDATE _ CURRENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . put Boolean (" not ified ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . put Int (" id ", Ġnote . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString (" title ", Ġnote . title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString (" desc ", Ġnote . description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString (" date ", Ġnote . date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Builder Ġ= ĠNotification Compat . Builder ( this , Ġchannel Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . mip map . ic _ launcher ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title (" TODO ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ("${ note . title } Ġis Ġdue ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set O ngo ing ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Priority ( Notification Manager . IMPORT ANCE _ HIGH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Intent ( pending Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Extras ( bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . notify ( i , Ġnotification Builder . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlist Item Clicked ( note : ĠNote ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Toast . makeText ( this ," Selected Ġname Ġis Ġ${ note . title }", Toast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ ĠLog . d (" Notification ", Ġnote . toString ()) ĊĠĠĠĠĠĠĠ Ġinit Update And Delete ( note ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Update And Delete ( note : ĠNote ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// display Ġthe Ġselected Ġtile Ġand Ġdescription Ġin Ġthe Ġtest Input Field ĊĠĠĠĠĠĠĠ Ġnote Title . setText ( note . title ) ĊĠĠĠĠĠĠĠ Ġnote Description . setText ( note . description ) ĊĠĠĠĠĠĠĠ Ġnote Date . text Ġ= Ġnote . date ĊĠĠĠĠĠĠĠ Ġcal Data Ġ= ĠLocalDate . parse ( note . date ) Ċ // ĠĠĠĠĠĠĠ Ġnote Date . init ( date . year , date . month Value , date . day OfMonth , null ) ĊĊĠĠĠĠĠĠĠ Ġ// update Ġthe Ġbool Ġand Ġgive Ġthe Ġnote Ġinstance ĊĠĠĠĠĠĠĠ Ġis Update Or Delete Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġnote ToUpdate Or Delete Ġ= Ġnote ĊĊĠĠĠĠĠĠĠ Ġ// Change Ġdisplay Ġvalue Ġof Ġbtn s ĊĠĠĠĠĠĠĠ Ġsave OrUpdate Btn . text Ġ= Ġ" Update " ĊĠĠĠĠĠĠĠ Ġclear All Btn . text Ġ= Ġ" Delete " ĊĠĠĠĠĠĠĠ Ġ// implement Ġmethods ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinsert ( note : ĠNote ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġnow Ġcall Ġthe Ġinsert Ġfunction Ġof Ġrepository Ġpassing Ġthe Ġnote Ġinstance ĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġshould Ġmake Ġthis Ġfunction Ġcall Ġfrom Ġa Ġbackground Ġthread ĊĠĠĠĠĠĠĠ Ġ// return Ġrow Ġid Ġfor Ġmore Ġconfirm ations ĊĠĠĠĠĠĠĠ Ġif Ġ( check Input ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Row Id Ġ= Ġdao . insert Note ( note ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Row Id Ġ> Ġ- 1 ) Ġ{ Ġ// return Ġ- 1 Ġon Ġfail ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// change Ġthe Ġmutable Ġlive Ġdata Ġwith Ġsuccess Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNot Ġnecessary Ġbut Ġfor Ġlearning Ġpurpose Ġimportant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Notes List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Note ĠInsert ed ĠSuccessfully ĠID no : Ġ$ new Row Id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Error ĠOb sc ured Ġin ĠInser ting Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Input (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( note Title . text . toString (). isNotEmpty () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnote Description . text . toString (). isNotEmpty () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Give ĠInput ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Toast ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġs , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave OrUpdate ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Adding Ġvalidations Ġon Ġthe Ġinput ted Ġtext ĊĠĠĠĠĠĠĠ Ġif Ġ( note Title . text Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Please Ġenter ĠNote ĠTitle ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( note Description Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Please Ġenter ĠNote ĠDescription ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// boolean Ġto Ġcheck Ġif Ġthis Ġin Ġupdate Ġand Ġdelete Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Update Or Delete ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Ġthe Ġnew Ġupdated Ġvalue Ġof Ġnotes Ġobject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote ToUpdate Or Delete . title Ġ= Ġnote Title . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote ToUpdate Or Delete . description Ġ= Ġnote Description . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( note ToUpdate Or Delete ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġnote Title . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġnote Description . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= Ġnote Date . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNote ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// after Ġsetting Ġthe Ġvalue Ġchanging Ġit Ġto Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Title . text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Description . text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal Data Ġ= Ġtoday ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Date . text Ġ= Ġcal Data . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear All Or Delete ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Update Or Delete ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete ( note ToUpdate Or Delete ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear All () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate ( note : ĠNote ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( check Input ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnumberOf Rows Updated Ġ= Ġdao . update Note ( note ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( numberOf Rows Updated Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// after Ġupdate Ġchanging Ġback Ġot Ġnormal Ġconditions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Notes List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Title . text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Description . text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal Data Ġ= Ġtoday ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Date . text Ġ= Ġcal Data . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Update Or Delete Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote ToUpdate Or Delete Ġ= Ġnote ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave OrUpdate Btn . text Ġ= Ġ" Save " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear All Btn . text Ġ= Ġ" Clear ĠAll " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// change Ġthe Ġmutable Ġlive Ġdata Ġwith Ġsuccess Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Ġ$ numberOf Rows Updated Ġrows Ġof ĠUpdated ĠSuccessfully ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Error ĠOcc urred Ġduring ĠUpdate ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete ( note : ĠNote ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġno Of Rows Deleted Ġ= Ġdao . delete Note ( note ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( no Of Rows Deleted Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// after Ġdelete Ġchanging Ġback Ġot Ġnormal Ġconditions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Notes List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Title . text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Description . text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal Data Ġ= Ġtoday ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Date . text Ġ= Ġcal Data . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Update Or Delete Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote ToUpdate Or Delete Ġ= Ġnote ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave OrUpdate Btn . text Ġ= Ġ" Save " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear All Btn . text Ġ= Ġ" Clear ĠAll " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// change Ġthe Ġmutable Ġlive Ġdata Ġwith Ġsuccess Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ("$ no Of Rows Deleted Ġrows ĠDeleted ĠSuccessfully ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Error ĠOcc urred Ġduring Ġdeleting ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear All () Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġno Of Rows Deleted Ġ= Ġdao . delete All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( no Of Rows Deleted Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// change Ġthe Ġmutable Ġlive Ġdata Ġwith Ġsuccess Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ("$ no Of Rows Deleted Ġrows ĠDeleted ĠSuccessfully ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Error ĠOcc urred Ġduring Ġdeleting ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġoperator Ġfun ĠLocalDate . minus ( today : ĠLocalDate ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( this . year Ġ< Ġtoday . year ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( this . year Ġ> Ġtoday . year ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( this . month Value Ġ< Ġtoday . month Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( this . month Value Ġ> Ġtoday . month Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġthis . day OfMonth Ġ- Ġtoday . day OfMonth Ġ<= Ġ 3 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Zero ( value : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( value Ġ<= Ġ 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 $ value " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ value " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }