package Ġcom . dic od ing . pic od ip lo ma . m yn ote apps . ui . insert Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . dic od ing . pic od ip lo ma . m yn ote apps . R Ċ import Ġcom . dic od ing . pic od ip lo ma . m yn ote apps . databinding . Activity Note Add Update Binding Ċ import Ġcom . dic od ing . pic od ip lo ma . m yn ote apps . db . Note Ċ import Ġcom . dic od ing . pic od ip lo ma . m yn ote apps . helper . Date Helper Ċ import Ġcom . dic od ing . pic od ip lo ma . m yn ote apps . helper . ViewModel Factory Ċ Ċ class ĠNote Add Update Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġis Edit Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġnote : ĠNote ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġposition Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnote Add Update ViewModel : ĠNote Add Update ViewModel ĊĊĠĠĠ Ġprivate Ġvar Ġ_ activity Note Add Update Binding : ĠActivity Note Add Update Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ activity Note Add Update Binding ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ NOTE Ġ= Ġ" extra _ note " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ POSITION Ġ= Ġ" extra _ position " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ ADD Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESULT _ ADD Ġ= Ġ 1 0 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ UPDATE Ġ= Ġ 2 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESULT _ UPDATE Ġ= Ġ 2 0 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESULT _ DELETE Ġ= Ġ 3 0 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAL ERT _ DIALOG _ CLOSE Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAL ERT _ DIALOG _ DELETE Ġ= Ġ 2 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ_ activity Note Add Update Binding Ġ= ĠActivity Note Add Update Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding ?. root ) ĊĊĠĠĠĠĠĠĠ Ġnote Add Update ViewModel Ġ= Ġobtain ViewModel ( this ) ĊĠĠĠĠĠĠĠ Ġnote Ġ= Ġintent . get Parcelable Extra ( EXTRA _ NOTE ) ĊĠĠĠĠĠĠĠ Ġif Ġ( note Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġintent . getInt Extra ( EXTRA _ POSITION , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Edit Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnote Ġ= ĠNote () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġaction Bar Title : ĠString ĊĠĠĠĠĠĠĠ Ġval Ġbtn Title : ĠString ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Edit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Bar Title Ġ= ĠgetString ( R . string . change ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Title Ġ= ĠgetString ( R . string . update ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( note Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. edit Title ?. setText ( note ?. title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. edit Description ?. setText ( note ?. description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Bar Title Ġ= ĠgetString ( R . string . add ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Title Ġ= ĠgetString ( R . string . save ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. title Ġ= Ġaction Bar Title ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĊĠĠĠĠĠĠĠ Ġbinding ?. btn Submit ?. text Ġ= Ġbtn Title ĊĊĠĠĠĠĠĠĠ Ġbinding ?. btn Submit ?. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġbinding ?. edit Title ?. text . toString (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdesc Ġ= Ġbinding ?. edit Description ?. text . toString (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( title . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. edit Title ?. error Ġ= ĠgetString ( R . string . empty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( desc . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. edit Description ?. error Ġ= ĠgetString ( R . string . empty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . title Ġ= Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . description Ġ= Ġdesc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( EXTRA _ NOTE , Ġnote ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( EXTRA _ POSITION , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Edit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Add Update ViewModel . update ( note Ġas ĠNote ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( RESULT _ UPDATE , Ġintent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. date Ġ= ĠDate Helper . getCurrent Date () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Add Update ViewModel . insert ( note Ġas ĠNote ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( RESULT _ ADD , Ġintent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Edit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ form , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ delete Ġ-> Ġshow AlertDialog ( ALERT _ DIALOG _ DELETE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġshow AlertDialog ( ALERT _ DIALOG _ CLOSE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow AlertDialog ( ALERT _ DIALOG _ CLOSE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġ_ activity Note Add Update Binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow AlertDialog ( type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Dialog Close Ġ= Ġtype Ġ== ĠAL ERT _ DIALOG _ CLOSE ĊĠĠĠĠĠĠĠ Ġval Ġdialog Title : ĠString ĊĠĠĠĠĠĠĠ Ġval Ġdialog Message : ĠString ĊĠĠĠĠĠĠĠ Ġif Ġ( is Dialog Close ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Title Ġ= ĠgetString ( R . string . cancel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Message Ġ= ĠgetString ( R . string . cancel ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Message Ġ= ĠgetString ( R . string . message _ delete ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Title Ġ= ĠgetString ( R . string . delete ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġalert Dialog Builder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠ Ġwith ( alert Dialog Builder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( dialog Title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( dialog Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( getString ( R . string . yes )) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Dialog Close ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Add Update ViewModel . delete ( note Ġas ĠNote ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ POSITION , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( RESULT _ DELETE , Ġintent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button ( getString ( R . string . no )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog , Ġ_ Ġ-> Ġdialog . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġalert Dialog Ġ= Ġalert Dialog Builder . create () ĊĠĠĠĠĠĠĠ Ġalert Dialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobtain ViewModel ( activity : ĠAppCompatActivity ): ĠNote Add Update ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠViewModel Factory . getInstance ( activity . application ) ĊĠĠĠĠĠĠĠ Ġreturn ĠViewModel Provider ( activity , Ġfactory ). get ( Note Add Update ViewModel :: class . java ) ĊĠĠĠ Ġ} Ċ }