package Ġcom . sp ir acle software . android sample . feature . profile Ċ Ċ import Ġco . zs mb . rain bow cake . base . One Shot Event Ċ import Ġco . zs mb . rain bow cake . base . Queued One Shot Event Ċ import Ġco . zs mb . rain bow cake . base . Rain bow Cake ViewModel Ċ import Ġcom . sp ir acle software . android sample . feature . profile . Profile Presenter . Update Profile Model Ċ import Ġcom . sp ir acle software . android sample . feature . profile . Profile ViewState .* Ċ import Ġjava . time . LocalDate Ċ Ċ class ĠProfile ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġpresenter : ĠProfile Presenter Ċ ) Ġ: ĠR ain bow Cake ViewModel < Profile ViewState >( ĊĠĠĠ ĠView ing ( presenter . get Profile Model ()) Ċ ) Ġ{ ĊĊĠĠĠ Ġobject ĠNotify Changes Saved Event Ġ: ĠQue ued One Shot Event ĊĊĠĠĠ Ġdata Ġclass ĠNotify Saving Changes Failed Event ( val Ġmessage : ĠString ) Ġ: ĠQue ued One Shot Event ĊĊĠĠĠ Ġobject ĠNotify No Changes Performed Event Ġ: ĠQue ued One Shot Event ĊĊĠĠĠ Ġobject ĠConfirm Discard Changes Event Ġ: ĠOne Shot Event ĊĊĠĠĠ Ġdata Ġclass ĠShow Date OfBirth Picker Event ( val Ġopen At : ĠLocalDate ) Ġ: ĠOne Shot Event ĊĊĠĠĠ Ġobject ĠExit Screen Event Ġ: ĠOne Shot Event ĊĊĠĠĠ Ġfun Ġstart Editing () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view State Ġ! is ĠView ing ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġview State Ġ= ĠEdit ing ( presenter . get Profile ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Changes () Ġ= Ġexecute Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view State Ġ! is ĠEdit ing ) Ġreturn @ execute ĊĠĠĠĠĠĠĠ Ġval Ġediting State Ġ= Ġ( view State Ġas ĠEdit ing ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( editing State . initial Profile Ġ== Ġediting State . modified Profile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State Ġ= ĠView ing ( presenter . get Profile Model ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Event ( Notify No Changes Performed Event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġpresenter . update Profile ( editing State . modified Profile )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUpdate Profile Model . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State Ġ= ĠView ing ( result . updated Profile Model ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Queued Event ( Notify Changes Saved Event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUpdate Profile Model . ValidationError Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State Ġ= Ġediting State . copy ( validation Errors Ġ= Ġresult . validation Errors ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUpdate Profile Model . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State Ġ= Ġediting State . copy ( validation Errors Ġ= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Queued Event ( Notify Saving Changes Failed Event ( result . errorMessage )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconfirm Discard Changes () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view State Ġ! is ĠEdit ing ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġview State Ġ= ĠView ing ( presenter . get Profile Model ()) ĊĠĠĠĠĠĠĠ Ġpost Event ( Notify No Changes Performed Event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Date OfBirth Picker () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view State Ġ! is ĠEdit ing ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġopen At Ġ= Ġ( view State Ġas ĠEdit ing ). modified Profile . date OfBirth ĊĠĠĠĠĠĠĠ Ġpost Event ( Show Date OfBirth Picker Event ( open At )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnavigate Back () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( view State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠView ing Ġ-> Ġpost Event ( Exit Screen Event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEdit ing Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġediting State Ġ= Ġ( view State Ġas ĠEdit ing ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( editing State . initial Profile Ġ== Ġediting State . modified Profile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State Ġ= ĠView ing ( presenter . get Profile Model ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Event ( Notify No Changes Performed Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Event ( Confirm Discard Changes Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset FullName ( fullName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( view State Ġas ? ĠEdit ing )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State Ġ= Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodified Profile Ġ= Ġmodified Profile . copy ( fullName Ġ= ĠfullName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Date OfBirth ( date OfBirth : ĠLocalDate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( view State Ġas ? ĠEdit ing )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State Ġ= Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodified Profile Ġ= Ġmodified Profile . copy ( date OfBirth Ġ= Ġdate OfBirth ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset PhoneNumber ( phoneNumber : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( view State Ġas ? ĠEdit ing )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State Ġ= Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodified Profile Ġ= Ġmodified Profile . copy ( phoneNumber Ġ= ĠphoneNumber ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Email ( email : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( view State Ġas ? ĠEdit ing )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State Ġ= Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodified Profile Ġ= Ġmodified Profile . copy ( email Ġ= Ġemail ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }