package Ġcom . y uch en . how yo . copy plan Ċ Ċ 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 . 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 Ġkotlinx . coroutines .* Ċ Ċ class ĠCopy Plan ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġhow Yo Repository : ĠHow Yo Repository , ĊĠĠĠ Ġprivate Ġval Ġargument Plan : ĠPlan ? Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġ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 : ĠLive Data < Photo Data > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ plan Photo ĊĊĠĠĠ Ġval ĠstartDate From User Ġ= ĠMutable LiveData < Long >() ĊĊĠĠĠ Ġval ĠendDate From User Ġ= ĠMutable LiveData < Long >() ĊĊĠĠĠ Ġ// ĠDays Ġlist Ġfor Ġcopying Ġreference ĊĠĠĠ Ġprivate Ġval Ġ_ days Ġ= ĠMutable LiveData < List < Day >>() ĊĊĠĠĠ Ġval Ġdays : ĠLive Data < List < Day >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ days ĊĊĠĠĠ Ġ// ĠS chedules Ġlist Ġfor Ġcopying ĊĠĠĠ Ġ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 Ġdata Ġ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 ĊĊĠĠĠ Ġ// Ġ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 Ġrelated Ġdata Ġis Ġready Ġor Ġnot ĊĠĠĠ Ġprivate Ġval Ġ_ is Related Data Ready Ġ= ĠMutable LiveData < Boolean >() ĊĊĠĠĠ Ġval Ġis Related Data Ready : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ is Related Data Ready ĊĊĠĠĠ Ġ// ĠHandle Ġleave Ġplan Ġcover ĊĠĠĠ Ġprivate Ġval Ġ_ leave Ġ= ĠMutable LiveData < Boolean ?> () ĊĊĠĠĠ Ġval Ġleave : ĠLive Data < Boolean ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ leave ĊĊĠĠĠ Ġ// Ġ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 From Days Result () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Schedules Result () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ĊĊĠĠĠĠĠĠĠ Ġ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 )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 () Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠLoad Api Status . LOADING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Cover Photo Ready . value Ġ= Ġupload Cover Img () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġupload Cover Img (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġplan Photo . 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 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Plan () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplan Ġ= Ġplan . value ĊĠĠĠĠĠĠĠ Ġval Ġnew Plan Ġ= Ġplan ?. copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Id Ġ= ĠUser Manager . userId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion List Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlike List Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplan Collect edList Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivacy Ġ= ĠgetString ( R . string . plan _ private ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreated Time Ġ= ĠCalendar . getInstance (). time In Millis ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġnew 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 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcreate Days (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplan Id Ġ= Ġplan Id . value ĊĠĠĠĠĠĠĠ Ġval Ġdays Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( startDate From User . value ?. let Ġ{ ĠstartDate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendDate From User . value ?. minus ( startDate )?. div (( 6 0 Ġ* Ġ 6 0 Ġ* Ġ 2 4 Ġ* Ġ 1 0 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ?. toInt () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġday Results Ġ= Ġmutable ListOf < Boolean >() ĊĠĠĠĠĠĠĠ Ġval Ġschedule Results Ġ= Ġmutable ListOf < Boolean >() ĊĠĠĠĠĠĠĠ Ġval Ġdays Data Ġ= Ġmutable ListOf < Pair < Day , ĠInt >>() ĊĊĠĠĠĠĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdays Data . add ( Pair ( result . data , Ġposition )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Results . add ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġschedule Results . add ( copy Schedules ( days Data )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! day Results . contains ( false ) Ġ&& Ġ! schedule Results . contains ( false ) Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ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 Related Data Ready . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 Ġsuspend Ġfun Ġcopy Schedules ( list : ĠList < Pair < Day , ĠInt >> ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs chedules Result Ġ= Ġmutable ListOf < Boolean >() ĊĠĠĠĠĠĠĠ Ġval Ġschedule List Ġ= Ġmutable ListOf < Schedule >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ(( day , Ġposition ) Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs chedules . value ?. filter Ġ{ Ġit . day Id Ġ== Ġdays . value ?. get ( position )?. id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . forEach Ġ{ Ġschedule Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Schedule Ġ= Ġschedule . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplan Id Ġ= Ġplan Id . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Id Ġ= Ġday . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Url List Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto FileName List Ġ= ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule List . add ( new Schedule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġs chedules Result . add ( create Schedule With Batch ( schedule List )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ! schedules Result . contains ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcreate Schedule With Batch ( list : ĠList < Schedule >): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġhow Yo Repository . create Schedule With Batch ( list )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch From 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 Ġ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 . value ?. fileName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ_ plan Photo . value Ġ= Ġnew Plan Photo ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Cover Img () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Plan Photo Ġ= ĠPhoto Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse ( getString ( R . string . default _ cover )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ_ plan Photo . value Ġ= Ġnew Plan Photo ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINVALID _ FORMAT _ TITLE _ EMPTY Ġ= Ġ 0 x 1 1 ĊĠĠĠ Ġ} Ċ } Ċ