package Ġcom . y uch en . how yo . plan . cover Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . y uch en . how yo . How Yo Application Ċ import Ġcom . y uch en . how yo . R Ċ import Ġcom . y uch en . how yo . data .* Ċ import Ġcom . y uch en . how yo . data . source . How Yo Repository Ċ import Ġcom . y uch en . how yo . ext . to Hour Ċ import Ġcom . y uch en . how yo . ext . to Minute Ċ import Ġcom . y uch en . how yo . network . Load Api Status Ċ import Ġcom . y uch en . how yo . plan . Check ItemType Ċ import Ġcom . y uch en . how yo . signin . User Manager Ċ import Ġcom . y uch en . how yo . util . Util . getString Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġkotlin . math . absolute Value Ċ import Ġkotlinx . coroutines .* Ċ Ċ class ĠPlan Cover ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġhow Yo Repository : ĠHow Yo Repository , ĊĠĠĠ Ġprivate Ġval Ġargument Plan : ĠPlan ? Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġ_ currentUser Ġ= ĠMutable LiveData < User >() ĊĊĠĠĠ Ġval ĠcurrentUser : ĠLive Data < User > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ currentUser ĊĊĠĠĠ Ġprivate Ġval Ġ_ isNew Plan Ġ= ĠMutable LiveData < Boolean >() ĊĊĠĠĠ Ġval Ġis New Plan : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ isNew Plan ĊĊĠĠĠ Ġval Ġplan Ġ= ĠMutable LiveData < Plan >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġwhen Ġ( argument Plan ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoday Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtomorrow Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtomorrow . add ( Calendar . DAY _ OF _ YEAR , Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlan ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcover FileName Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate Ġ= Ġtoday . time In Millis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendDate Ġ= Ġtomorrow . time In Millis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġargument Plan ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ plan Id Ġ= ĠMutable LiveData < String >() ĊĊĠĠĠ Ġval Ġplan Id : ĠLive Data < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ plan Id ĊĊĠĠĠ Ġprivate Ġval Ġ_ plan Photo Ġ= ĠMutable LiveData < Photo Data >() ĊĊĠĠĠ Ġval Ġplan Photo Data : ĠLive Data < Photo Data > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ plan Photo ĊĊĠĠĠ Ġval ĠstartDate From User Ġ= ĠMutable LiveData < Long >() ĊĊĠĠĠ Ġprivate Ġval Ġprevious StartDate Ġ= ĠMutable LiveData < Long >() ĊĊĠĠĠ Ġval ĠendDate From User Ġ= ĠMutable LiveData < Long >() ĊĊĠĠĠ Ġ// ĠDays Ġlist Ġfor Ġupdating Ġdays Ġand Ġs chedules Ġwhen Ġplan Ġis Ġupdated ĊĠĠĠ Ġprivate Ġval Ġ_ days Ġ= ĠMutable LiveData < List < Day >>() ĊĊĠĠĠ Ġval Ġdays : ĠLive Data < List < Day >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ days ĊĊĠĠĠ Ġ// ĠS chedules Ġlist Ġfor Ġupdating Ġwhen Ġplan Ġis Ġupdated ĊĠĠĠ Ġprivate Ġval Ġ_ schedules Ġ= ĠMutable LiveData < List < Schedule >>() ĊĊĠĠĠ Ġval Ġs chedules : ĠLive Data < List < Schedule >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ schedules ĊĊĠĠĠ Ġ// ĠHandle Ġthe Ġsubmit Ġplan ĊĠĠĠ Ġprivate Ġval Ġ_ is Save Plan Ġ= ĠMutable LiveData < Boolean ?> () ĊĊĠĠĠ Ġval Ġis Save Plan : ĠLive Data < Boolean ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ is Save Plan ĊĊĠĠĠ Ġ// ĠHandle Ġthe Ġplan Ġcover Ġis Ġready Ġor Ġnot ĊĠĠĠ Ġprivate Ġval Ġ_ is Cover Photo Ready Ġ= ĠMutable LiveData < Boolean ?> () ĊĊĠĠĠ Ġval Ġis Cover Photo Ready : ĠLive Data < Boolean ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ is Cover Photo Ready ĊĊĠĠĠ Ġprivate Ġval Ġ_ is Plan Updated Ġ= ĠMutable LiveData < Boolean >() ĊĊĠĠĠ Ġval Ġis Plan Updated : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ is Plan Updated ĊĊĠĠĠ Ġ// ĠHandle Ġthe Ġdays Ġdata Ġis Ġready Ġor Ġnot ĊĠĠĠ Ġprivate Ġval Ġ_ is Days Ready Ġ= ĠMutable LiveData < Boolean >() ĊĊĠĠĠ Ġprivate Ġval Ġis Days Ready : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ is Days Ready ĊĊĠĠĠ Ġ// ĠHandle Ġthe Ġmain Ġdata Ġof Ġthe Ġcheck Ġand Ġshopping Ġlist Ġare Ġready Ġor Ġnot ĊĠĠĠ Ġprivate Ġval Ġ_ is Chk List Ready Ġ= ĠMutable LiveData < Boolean >() ĊĊĠĠĠ Ġprivate Ġval Ġis Chk List Ready : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ is Chk List Ready ĊĊĠĠĠ Ġ// ĠHandle Ġthe Ġmain Ġdata Ġof Ġthe Ġcheck Ġand Ġshopping Ġlist Ġare Ġready Ġor Ġnot ĊĠĠĠ Ġprivate Ġval Ġ_ is All Data Ready Ġ= ĠMutable LiveData < Boolean >() ĊĊĠĠĠ Ġval Ġis All Data Ready : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ is All Data Ready ĊĊĠĠĠ Ġ// ĠHandle Ġleave Ġplan Ġcover ĊĠĠĠ Ġprivate Ġval Ġ_ leave Ġ= ĠMutable LiveData < Boolean ?> () ĊĊĠĠĠ Ġval Ġleave : ĠLive Data < Boolean ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ leave ĊĊĠĠĠ Ġ// ĠHandle Ġopen Ġdate Ġrange Ġpicker ĊĠĠĠ Ġprivate Ġval Ġ_ select Date Ġ= ĠMutable LiveData < Boolean ?> () ĊĊĠĠĠ Ġval Ġselect Date : ĠLive Data < Boolean ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ select Date ĊĊĠĠĠ Ġ// ĠHandle Ġadd Ġthe Ġcover Ġphoto Ġby Ġcamera ĊĠĠĠ Ġprivate Ġval Ġ_ take Photo Ġ= ĠMutable LiveData < Boolean ?> () ĊĊĠĠĠ Ġval Ġtake Photo : ĠLive Data < Boolean ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ take Photo ĊĊĠĠĠ Ġ// ĠHandle Ġadd Ġthe Ġcover Ġphoto Ġby Ġselecting ĊĠĠĠ Ġprivate Ġval Ġ_ select Photo Ġ= ĠMutable LiveData < Boolean ?> () ĊĊĠĠĠ Ġval Ġselect Photo : ĠLive Data < Boolean ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ select Photo ĊĊĠĠĠ Ġ// Ġstatus : ĠThe Ġinternal ĠMutable LiveData Ġthat Ġstores Ġthe Ġstatus Ġof Ġthe Ġmost Ġrecent Ġrequest ĊĠĠĠ Ġprivate Ġval Ġ_ status Ġ= ĠMutable LiveData < Load Api Status >() ĊĊĠĠĠ Ġval Ġstatus : ĠLive Data < Load Api Status > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ status ĊĊĠĠĠ Ġ// ĠHandle Ġthe Ġerror Ġfor Ġsubmit Ġplan ĊĠĠĠ Ġprivate Ġval Ġ_ invalid Plan Ġ= ĠMutable LiveData < Int >() ĊĊĠĠĠ Ġval Ġinvalid Plan : ĠLive Data < Int > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ invalid Plan ĊĊĠĠĠ Ġprivate Ġvar ĠviewModel Job Ġ= ĠJob () ĊĊĠĠĠ Ġ// Ġthe ĠCor outine Ġruns Ġusing Ġthe ĠMain Ġ( UI ) Ġdispatcher ĊĠĠĠ Ġprivate Ġval Ġcoroutine Scope Ġ= ĠCor outine Scope ( viewModel Job Ġ+ ĠDispatch ers . Main ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ ĠviewModel Job . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Init Data () ĊĊĠĠĠĠĠĠĠ Ġplan . value ?. id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Days Result () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Schedules Result () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfetch Live CurrentUser Result () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Live CurrentUser Result () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= ĠUser Manager . userId ĊĊĠĠĠĠĠĠĠ Ġ_ currentUser Ġ= Ġhow Yo Repository . get Live User ( userId Ġ?: Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Init Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġset Ġthe Ġdefault Ġvalue Ġfor Ġduration Ġof Ġthe Ġplan ĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĊĠĠĠĠĠĠĠ ĠstartDate From User . value Ġ= Ġplan . value ?. startDate Ġ?: Ġcalendar . time In Millis ĊĠĠĠĠĠĠĠ Ġprevious StartDate . value Ġ= ĠstartDate From User . value ?. to Long () ĊĊĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . DAY _ OF _ YEAR , Ġ 1 ) ĊĊĠĠĠĠĠĠĠ ĠendDate From User . value Ġ= Ġplan . value ?. endDate Ġ?: Ġcalendar . time In Millis ĊĊĠĠĠĠĠĠĠ Ġ_ plan Photo . value Ġ= ĠPhoto Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse ( getString ( R . string . default _ cover )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplan . value ?. cover Photo Url , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplan . value ?. cover FileName ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ_ isNew Plan . value Ġ= Ġwhen Ġ( argument Plan ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprepare Submit Plan () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplan . value ?. title . isNull OrEmpty () Ġ-> Ġ_ invalid Plan . value Ġ= ĠINVALID _ FORMAT _ TITLE _ EMPTY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsave Plan () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Plan () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ is Save Plan . value Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Saved Plan () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ is Save Plan . value Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Plan Cover () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcover Photo Result Ġ= Ġmutable ListOf < Boolean >() ĊĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠLoad Api Status . LOADING ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( plan . value ?. id . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġcover Photo Result . add ( upload Cover Photo ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( plan Photo Data . value ?. is Deleted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplan Photo Data . value ?. fileName ?. isNotEmpty () Ġ== Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcover Photo Result . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Photo ( plan Photo Data . value ?. fileName Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcover Photo Result . add ( upload Cover Photo ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! cover Photo Result . contains ( false ) Ġ-> Ġ_ is Cover Photo Ready . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġupload Cover Photo (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġplan Photo Data . value ?. uri ĊĠĠĠĠĠĠĠ Ġval Ġformatter Ġ= ĠSimpleDateFormat (" yyyy _ mm _ dd _ HH _ mm _ ss ", ĠLocale . getDefault ()) ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ"${ User Manager . currentUser Email }_${ formatter . format ( Date ()) }" ĊĠĠĠĠĠĠĠ Ġval Ġupload Result : ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġplan . value ?. cover FileName Ġ= ĠfileName ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġuri ?. let Ġ{ Ġhow Yo Repository . upload Photo ( it , ĠfileName ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplan . value ?. cover Photo Url Ġ= Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupload Result Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġupload Result Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġupload Result ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġdelete Photo ( fileName : ĠString ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġhow Yo Repository . delete Photo ( fileName )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Plan () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplan Ġ= Ġplan . value ĊĊĠĠĠĠĠĠĠ Ġplan ?. author Id Ġ= ĠcurrentUser . value ?. id ĊĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġplan ?. let Ġ{ Ġhow Yo Repository . create Plan ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ plan Id . value Ġ= Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Fail Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Error Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Cover Photo Ready . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Plan () Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġplan . value ?. let Ġ{ Ġhow Yo Repository . update Plan ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Plan Updated . value Ġ= Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġupdate Schedule ( schedule : ĠSchedule ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( val Ġresult Ġ= Ġhow Yo Repository . update Schedule ( schedule )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Related Collection () Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Days Ready . post Value ( create Days ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Chk List Ready . post Value ( create Default Check List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Days Ready . value Ġ== Ġtrue Ġ&& Ġis Chk List Ready . value Ġ== Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is All Data Ready . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠLoad Api Status . DONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Related Collection () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġday List Ġ= Ġdays . value ?. toList () ĊĠĠĠĠĠĠĠ Ġval Ġschedule List Ġ= Ġs chedules . value ?. toList () ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Day Count Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( startDate From User . value ?. let Ġ{ ĠstartDate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendDate From User . value ?. minus ( startDate )?. div (( 6 0 Ġ* Ġ 6 0 Ġ* Ġ 2 4 Ġ* Ġ 1 0 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ?. toInt ()?. plus ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdifference In Day Count Ġ= Ġnew Day Count ?. minus ( day List ?. size Ġ?: Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġschedule Results Ġ= Ġmutable ListOf < Boolean >() ĊĠĠĠĠĠĠĠ Ġval Ġday Results Ġ= Ġmutable ListOf < Boolean >() ĊĊĠĠĠĠĠĠĠ Ġif Ġ( difference In Day Count Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplan . value ?. startDate Ġ!= Ġprevious StartDate . value Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġday List ?. sorted By Ġ{ Ġit . position Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdays ?. forEach Ġ{ Ġday Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule List ?. filter Ġ{ Ġit . day Id Ġ== Ġday . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . forEach Ġ{ Ġschedule Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Schedule Ġ= ĠSchedule ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . plan Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . day Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . schedule Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . photoUrl List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . photo FileName List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . latitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . longitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . startTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . endTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . budget , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . ref Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . notification , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . address , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . remark ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . time In Millis Ġ= Ġplan . value ?. startDate ?. plus ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 0 0 0 Ġ* Ġ 6 0 Ġ* Ġ 6 0 Ġ* Ġ 2 4 Ġ* Ġday . position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: Ġ 0 L ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . startTime Ġ!= Ġ 0 L Ġ&& Ġschedule . startTime Ġ!= Ġnull Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhour Ġ= Ġschedule . startTime ?. to Hour () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminute Ġ= Ġschedule . startTime ?. to Minute () Ġ?: Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . set ( Calendar . HOUR _ OF _ DAY , Ġhour ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . set ( Calendar . MINUTE , Ġminute ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Schedule . startTime Ġ= Ġdate . time In Millis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . endTime Ġ!= Ġ 0 L Ġ&& Ġschedule . startTime Ġ!= Ġnull Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhour Ġ= Ġschedule . endTime ?. to Hour () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminute Ġ= Ġschedule . endTime ?. to Minute () Ġ?: Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . set ( Calendar . HOUR _ OF _ DAY , Ġhour ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . set ( Calendar . MINUTE , Ġminute ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Schedule . endTime Ġ= Ġdate . time In Millis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule Results . add ( update Schedule ( new Schedule )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdifference In Day Count Ġ> Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Position Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday List ?. max By OrNull Ġ{ Ġit . position Ġ} ?. position ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( position Ġin Ġ 1 .. difference In Day Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplan . value ?. id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Position ?. let Ġ{ Ġlast Position Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhow Yo Repository . create Day ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Position . plus ( position ), Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠResult . Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Results . add ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Results . add ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdifference In Day Count Ġ< Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġday List ?. sorted By Descending Ġ{ Ġit . position Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( position Ġin Ġ 0 Ġuntil Ġdifference In Day Count . absolute Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdays ?. get ( position )?. let Ġ{ Ġday Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Day ( day ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ Ġdelete Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Results . add ( delete Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdays ?. get ( position )?. let Ġ{ Ġday Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule List ?. filter Ġ{ Ġit . day Id Ġ== Ġday . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . forEach Ġ{ Ġschedule Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule Results . add ( delete Schedule ( schedule )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! day Results . contains ( false ) Ġ&& Ġ! schedule Results . contains ( false ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is All Data Ready . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠLoad Api Status . DONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcreate Days (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplan Id Ġ= Ġplan Id . value ĊĠĠĠĠĠĠĠ Ġval Ġdays Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( startDate From User . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendDate From User . value ?. minus ( it )?. div (( 6 0 Ġ* Ġ 6 0 Ġ* Ġ 2 4 Ġ* Ġ 1 0 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ?. toInt () Ġ?: Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġday Results Ġ= Ġmutable ListOf < Boolean >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( position Ġin Ġ 0 .. days ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġplan Id ?. let Ġ{ Ġhow Yo Repository . create Day ( position , Ġit ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠResult . Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Results . add ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Results . add ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ! day Results . contains ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġdelete Day ( day : ĠDay ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġhow Yo Repository . delete Day ( day )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġdelete Schedule ( schedule : ĠSchedule ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġhow Yo Repository . delete Schedule ( schedule )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcreate Default Check List (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplan Id Ġ= Ġplan Id . value ĊĠĠĠĠĠĠĠ Ġval Ġsub TypeList Ġ= ĠHow Yo Application . instance . resources . getString Array ( R . array . check _ list ) ĊĠĠĠĠĠĠĠ Ġval Ġcheck List Results Ġ= Ġmutable ListOf < Boolean >() ĊĠĠĠĠĠĠĠ Ġval Ġitem List Ġ= Ġmutable ListOf < Check Shopping List >() ĊĊĠĠĠĠĠĠĠ Ġsub TypeList . forEach Ġ{ Ġsub Type Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( sub Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . necessary ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCheck ItemType . NE C ESS ARY . list . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Item Ġ= ĠCheck Shopping List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplan Id Ġ= Ġplan Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Type Ġ= ĠgetString ( R . string . check ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Type Ġ= Ġsub Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem List . add ( new Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . clo the ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCheck ItemType . CL OT HE . list . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Item Ġ= ĠCheck Shopping List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplan Id Ġ= Ġplan Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Type Ġ= ĠgetString ( R . string . check ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Type Ġ= Ġsub Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem List . add ( new Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . w ash ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCheck ItemType . W ASH . list . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Item Ġ= ĠCheck Shopping List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplan Id Ġ= Ġplan Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Type Ġ= ĠgetString ( R . string . check ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Type Ġ= Ġsub Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem List . add ( new Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . electron ic ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCheck ItemType . E LECT RON IC . list . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Item Ġ= ĠCheck Shopping List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplan Id Ġ= Ġplan Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Type Ġ= ĠgetString ( R . string . check ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Type Ġ= Ġsub Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem List . add ( new Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . health ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCheck ItemType . HE ALTH . list . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Item Ġ= ĠCheck Shopping List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplan Id Ġ= Ġplan Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Type Ġ= ĠgetString ( R . string . check ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Type Ġ= Ġsub Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem List . add ( new Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . other ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCheck ItemType . OTHER . list . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Item Ġ= ĠCheck Shopping List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplan Id Ġ= Ġplan Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Type Ġ= ĠgetString ( R . string . check ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Type Ġ= Ġsub Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem List . add ( new Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck List Results . add ( create Default Check List With Batch ( item List )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ! check List Results . contains ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcreate Default Check List With Batch ( list : ĠList < Check Shopping List >): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġhow Yo Repository . create Check Shop List With Batch ( list )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Days Result () Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġhow Yo Repository . get Days ( plan . value ?. id Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ days . value Ġ= Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Schedules Result () Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġhow Yo Repository . getS chedules ( plan . value ?. id Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ schedules . value Ġ= Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġleave () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ leave . value Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnothing () Ġ{} ĊĊĠĠĠ Ġfun Ġon Leave Completed () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ leave . value Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġselect Date () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ select Date . value Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Selected Date () Ġ{ ĊĠĠĠĠĠĠĠ Ġplan . value ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate Ġ= ĠstartDate From User . value ĊĠĠĠĠĠĠĠĠĠĠĠ ĠendDate Ġ= ĠendDate From User . value ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ select Date . value Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtake Photo () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ take Photo . value Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon T ook Photo () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ take Photo . value Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġselect Photo () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ select Photo . value Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Selected Photo () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ select Photo . value Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Cover Bitmap ( photo Uri : ĠUri ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Plan Photo Ġ= ĠPhoto Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Uri , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplan Photo Data . value ?. fileName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ_ plan Photo . value Ġ= Ġnew Plan Photo ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Cover Photo () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Plan Photo Ġ= ĠPhoto Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse ( getString ( R . string . default _ cover )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplan Photo Data . value ?. fileName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ_ plan Photo . value Ġ= Ġnew Plan Photo ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINVALID _ FORMAT _ TITLE _ EMPTY Ġ= Ġ 0 x 1 1 ĊĠĠĠ Ġ} Ċ } Ċ