package Ġcom . cor rot . fire notes . view model Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Saved State Handle Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . cor rot . fire notes . Firebase Repository Ċ import Ġcom . cor rot . fire notes . model . Note Ċ import Ġcom . cor rot . fire notes . utils . Constants Ċ import Ġcom . cor rot . fire notes . utils . Constants . Companion . FLAG _ NOTE _ KEY Ċ import Ġcom . cor rot . fire notes . utils . Constants . Companion . NOTE _ KEY Ċ import Ġcom . cor rot . fire notes . utils . Constants . Companion . ORIGIN AL _ NOTE _ KEY Ċ import Ġcom . cor rot . fire notes . utils . notify Observer Ċ import Ġjava . util .* Ċ Ċ class ĠNote ViewModel ( private Ġval Ġhandle : ĠSaved State Handle ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠTAG : ĠString Ġ= ĠNote ViewModel :: class . java . simple Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfirebase Repository Ġ= ĠFirebase Repository () ĊĊĠĠĠ Ġprivate Ġval Ġ_ note : ĠMutable LiveData < Note > Ġ= Ġhandle . get LiveData < Note >( NOTE _ KEY , ĠNote ("")) ĊĠĠĠ Ġval Ġnote : ĠLive Data < Note > Ġ= Ġ_ note ĊĊĠĠĠ Ġprivate Ġvar Ġoriginal Note : ĠNote ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġhandle . get ( ORIGIN AL _ NOTE _ KEY ) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ= Ġhandle . set ( ORIGIN AL _ NOTE _ KEY , Ġvalue ) ĊĊĠĠĠ Ġvar Ġflag : ĠInt ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġhandle . get < Int >( FLAG _ NOTE _ KEY ) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ= Ġhandle . set ( FLAG _ NOTE _ KEY , Ġvalue ) ĊĊĊĠĠĠ Ġprivate Ġfun Ġset Note Id ( id : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! id . isNull OrEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ note . value ?. let Ġ{ Ġit . id Ġ= Ġid Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Note Title ( title : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ note . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . title Ġ= Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ note . notify Observer () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Note Body ( body : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ note . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . body Ġ= Ġbody ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ note . notify Observer () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Note Color ( color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ note . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ note . notify Observer () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Note Last Changed ( last Changed : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ note . value ?. let Ġ{ Ġit . last Changed Ġ= Ġlast Changed Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Note ( n : ĠNote ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Note Id ( n . id ) ĊĠĠĠĠĠĠĠ Ġset Note Title ( n . title ) ĊĠĠĠĠĠĠĠ Ġset Note Body ( n . body ) ĊĠĠĠĠĠĠĠ Ġset Note Color ( n . color ) ĊĠĠĠĠĠĠĠ Ġset Note Last Changed ( n . last Changed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// -------------------------------------------------------------------------------- -------------- ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġreturns Ġtrue Ġif Ġnote Ġadded Ġwithout Ġerror , Ġelse Ġfalse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġadd Note To Database (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġset Note Last Changed ( Calendar . getInstance (). time In Millis ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( validate Input ()) Ġ{ Ġ// Ġif Ġtrue , Ġnote Ġis Ġnot Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Repository . add Note To Database ( note . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Can 't Ġadd Ġempty Ġnote ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġthat Ġvalidates Ġuser Ġinput . ĠChecks Ġif Ġnote 's Ġtitle Ġor Ġbody Ġis Ġnot Ġempty . ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġtrue Ġif Ġtitle Ġor Ġbody Ġis Ġnot Ġnull , Ġelse Ġreturns Ġfalse . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġvalidate Input (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( note . value Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnote . value !!. title . isNotEmpty () Ġ|| Ġnote . value !!. body . isNotEmpty () ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġthat Ġchecks Ġfor Ġchanges ĊĠĠĠĠ Ġ* Ġ@ return ĠIf Ġchanges Ġwere Ġmade Ġreturns Ġtrue , Ġelse Ġreturns Ġfalse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck For Changes (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( original Note Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġmake Ġcomparator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Note !!. title Ġ!= Ġnote . value ?. title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġoriginal Note !!. body Ġ!= Ġnote . value ?. body ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġoriginal Note !!. color Ġ!= Ġnote . value ?. color ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġthat Ġretrieves ĠNote Ġfrom ĠBundle Ġand Ġupdate ĠViewModel ĊĠĠĠĠ Ġ* Ġ@ param Ġb ĠBundle ? ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġretrieve Data From Bundle ( b : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġb ?. let Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( data . getInt ( FLAG _ NOTE _ KEY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . FLAG _ ADD _ NOTE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Opened ĠNote Activity Ġwith Ġ' add Ġnote ' Ġflag ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . FLAG _ EDIT _ NOTE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Opened ĠNote Activity Ġwith Ġ' edit Ġnote ' Ġflag ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Note From Bundle ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Opened ĠNote Activity Ġwith Ġno Ġflag ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġthat Ġretrieves ĠNote Ġfrom Ġbundle ĊĠĠĠĠ Ġ* Ġ@ return ĠIf ĠNote Ġis Ġnot Ġnull Ġreturns ĠNote , Ġelse Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Note From Bundle ( b : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġb . get Parcelable < Note >( NOTE _ KEY )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Note Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Note ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġthat Ġis Ġcalled Ġwhen Ġuser Ġclicks Ġfloating Ġaction Ġbutton . ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġtrue Ġif Ġnote Ġwas Ġadded / edited Ġor Ġthere Ġis Ġno Ġchanges . ĠIf Ġerror Ġreturns Ġfalse . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Fab Clicked (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( flag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . FLAG _ ADD _ NOTE Ġ-> Ġadd Note To Database () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . FLAG _ EDIT _ NOTE Ġ-> Ġif Ġ( check For Changes ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChanges Ġwere Ġmade , Ġtry Ġto Ġadd ĠNote Ġto Ġdatabase Ġand Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Note To Database () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġchanges Ġwere Ġmade , Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Wrong Ġflag !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġthat Ġis Ġcalled Ġwhen Ġuser Ġpress Ġback Ġbutton Ġor Ġback Ġindicator Ġfrom Ġtoolbar . ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġdata Ġis Ġnot Ġvalid Ġor Ġthere Ġwas Ġno Ġchanges , Ġelse Ġreturns Ġfalse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Back Clicked (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( flag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . FLAG _ ADD _ NOTE Ġ-> Ġ! validate Input () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . FLAG _ EDIT _ NOTE Ġ-> Ġ! check For Changes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Wrong Ġflag ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ