package Ġam r ab ed . android . release . evaluation . main . assessment Ċ Ċ import Ġam r ab ed . android . release . evaluation . R Ċ import Ġam r ab ed . android . release . evaluation . core . Task Ċ import Ġam r ab ed . android . release . evaluation . main . edit . Active Days Picker Ċ import Ġam r ab ed . android . release . evaluation . main . edit . Reminder Time Picker Ċ import Ġam r ab ed . android . release . evaluation . main . edit . Title Editor Ċ import Ġam r ab ed . android . release . evaluation . models . Record ViewModel Ċ import Ġam r ab ed . android . release . evaluation . models . Task ViewModel Ċ import Ġam r ab ed . android . release . evaluation . tools . graphs . Pie Ċ import Ġam r ab ed . android . release . evaluation . utilities . notification . Task Reminder Ċ import Ġam r ab ed . android . release . evaluation . utilities . time . Date Manager Ċ import Ġam r ab ed . android . release . evaluation . utilities . time . Period Ċ import Ġandroid . app . Time Picker Dialog Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . Time Picker Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġkotlinx . android . synt hetic . main . pie . view .* Ċ import Ġkotlinx . android . synt hetic . main . task _ details .* Ċ import Ġorg . joda . time . DateTime Ċ import Ġorg . joda . time . Local Time Ċ Ċ class ĠTask Details Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġrecord ViewModel Ġby Ġactivity ViewModels < Record ViewModel >() ĊĠĠĠ Ġprivate Ġval Ġtask ViewModel Ġby Ġactivity ViewModels < Task ViewModel >() ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtask : ĠTask ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġparent : ĠViewGroup ?, Ġstate : ĠBundle ?): ĠView Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater . inflate ( R . layout . task _ details , Ġparent , Ġfalse ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask ViewModel . selected Task . observe ( view Lifecycle Owner , ĠTask Observer ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġactivity ?. title Ġ= Ġtask . getTitle ( require Context ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠĠĠĠĠ Ġmenu . clear () ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . task , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item . itemId Ġ== ĠR . id . task Editor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTitle Editor (). show ( child FragmentManager , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠTask Observer Ġ: ĠObserver < Task >, ĠTime Picker Dialog . On Time Set Listener , ĠActive Days Picker . Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( it : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactive Days . text Ġ= Ġget Active Days Text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreminder . text Ġ= Ġget Reminder Text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreminder Switch . isChecked Ġ= Ġtask . reminder Ġ!= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġactive Days . setOnClickListener Ġ{ ĠActive Days Picker ( this ). show ( child FragmentManager , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreminder . setOnClickListener Ġ{ ĠRem inder Time Picker ( this ). show ( child FragmentManager , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreminder Switch . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reminder Switch . isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRem inder Time Picker ( this ). show ( child FragmentManager , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . reminder Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTask Reminder . cancel ( require Context (), Ġtask ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreminder . text Ġ= Ġget Reminder Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask ViewModel . update ( task ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord ViewModel . get Day Count ()?. observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġcount Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Count Ġ= Ġcount Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweekly . adapter Ġ= ĠP ie Adapter ( task , ĠPeriod . WEEK , Ġday Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmonthly . adapter Ġ= ĠP ie Adapter ( task , ĠPeriod . MONTH , Ġday Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear ly ?. adapter Ġ= ĠP ie Adapter ( task , ĠPeriod . YEAR , Ġday Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Time Set ( view : ĠTime Picker ?, Ġhour : ĠInt , Ġminute : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTask Reminder . schedule ( require Context (), Ġtask . next Reminder ( Local Time ( hour , Ġminute ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask ViewModel . update ( task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreminder . text Ġ= Ġget Reminder Text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . reminder Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreminder Switch . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠgetString ( R . string . next Reminder Set ). replace (" #### ", ĠDate Manager . get DateTime Text ( require Context (), ĠDateTime . parse ( task . reminder )), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( require View (). root View , Ġmessage , ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Active Days Set () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactive Days . text Ġ= Ġget Active Days Text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask ViewModel . update ( task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Active Days Text () Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . is Hidden () Ġ-> ĠgetString ( R . string . in Active ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . active Days . all Ġ{ Ġit Ġ} Ġ-> ĠgetString ( R . string . every Day ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġresources . getString Array ( R . array . days ). filter Indexed Ġ{ Ġi , Ġ_ Ġ-> Ġtask . getActive Days ( require Context ())[ i ] Ġ}. toString (). remove Sur rounding ("[ ", Ġ"] ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Reminder Text () Ġ= Ġif Ġ( task . reminder Ġ!= Ġnull ) ĠDateTime . parse ( task . reminder ). to Local Time (). toString (" hh : mm Ġa ") Ġelse ĠgetString ( R . string . reminder Not Set ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠP ie Adapter ( val Ġtask : ĠTask ?, Ġprivate Ġval Ġperiod : ĠInt , Ġprivate Ġval Ġday Count : ĠInt ) Ġ: ĠRecyclerView . Adapter < Pie Holder >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ) Ġ= ĠP ie Holder ( LayoutInflater . from ( context ). inflate ( R . layout . pie , Ġparent , Ġfalse )) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġ 1 Ġ+ Ġday Count Ġ/ ĠDAY S [ period ] ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠP ie Holder , Ġposition : ĠInt ) Ġ= Ġholder . bind ( position , Ġperiod ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠP ie Holder ( view : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( position : ĠInt , Ġperiod : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . label . text Ġ= Ġget Label ( position , Ġperiod ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterval Ġ= ĠDate Manager . get Interval ( require Context (), Ġposition , Ġperiod ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Count Ġ= ĠDate Manager . get Day Count ( interval . start , Ġperiod ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord ViewModel . task History By DateRange ( task . id , Ġinterval ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP ie ( require Context (), Ġit , Ġperiod , Ġposition , Ġday Count ). show ( item View . pie ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Label ( position : ĠInt , Ġperiod : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġresources . getString Array ( R . array . current Period )[ period ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġresources . getString Array ( R . array . previous Period )[ period ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠDate Manager . get Interval Start ( require Context (), Ġposition , Ġperiod ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval ĠDAY S Ġ= Ġint ArrayOf ( 7 , Ġ 3 0 , Ġ 3 6 5 )