package Ġcom . fab ian . sch eng en vis ac al cul ator . ui . screens . calendar Ċ Ċ import Ġandroidx . compose . foundation . layout . Padding Values Ċ import Ġandroidx . compose . foundation . layout . fill Max Height Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . lazy . Lazy Column Ċ import Ġandroidx . compose . material . Surface Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Providers Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . fab ian . sch eng en vis ac al cul ator . ui . model . Week Data Ċ import Ġcom . fab ian . sch eng en vis ac al cul ator . ui . providers . Ambient Start DayOfWeek Ċ import Ġcom . fab ian . sch eng en vis ac al cul ator . ui . theme . Sch eng en Calculator Theme Ċ import Ġcom . fab ian . sch eng en vis ac al cul ator . util .* Ċ import Ġjava . time . DayOfWeek Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . Year Month Ċ import Ġjava . time . temporal . Temporal Adjust ers . next Or Same Ċ import Ġjava . time . temporal . Temporal Adjust ers . previous Or Same Ċ Ċ val ĠCELL _ SIZE _ DP Ġ= Ġ 4 8 . dp Ċ Ċ @ Composable Ċ fun ĠCalendar ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġcalendar DateRange : ĠLocalDate Range , ĊĠĠĠ Ġselected Date Ranges : ĠList < LocalDate Range >, Ċ ) Ġ{ ĊĊĠĠĠ Ġval Ġweeks Data Ġ= Ġcalculate Week s Data ( ĊĠĠĠĠĠĠĠ Ġcalendar DateRange Ġ= Ġcalendar DateRange , ĊĠĠĠĠĠĠĠ Ġstart DayOfWeek Ġ= ĠAmb ient Start DayOfWeek . current ĊĠĠĠ Ġ) ĊĊĠĠĠ ĠSurface ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Height () ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLazy Column ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Padding Ġ= ĠPadding Values ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġ 8 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġ 8 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 1 2 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġ 1 2 . dp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Height (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems Indexed ( items Ġ= Ġweeks Data ) Ġ{ Ġindex , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Week Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweek Data Ġ= Ġitem , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Date Ranges Ġ= Ġselected Date Ranges ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ // ĠTODO : Ġ 1 2 / 4 / 2 0 ĠThis Ġshould Ġbe Ġcalculated Ġon Ġa Ġbackground Ġthread Ġand Ġbe Ġpart Ġof Ġa ĠViewModel Ċ private Ġfun Ġcalculate Week s Data ( ĊĠĠĠ Ġcalendar DateRange : ĠLocalDate Range , ĊĠĠĠ Ġstart DayOfWeek : ĠDay OfWeek , Ċ ): ĠList < Week Data > Ġ{ ĊĠĠĠ Ġval Ġend DayOfWeek Ġ= Ġstart DayOfWeek . minus ( 1 ) ĊĊĠĠĠ Ġval Ġweeks Data Ġ= Ġmutable ListOf < Week Data >() ĊĠĠĠ Ġvar ĠstartDate OfWeek Ġ= Ġcalendar DateRange . start ĊĊĠĠĠ Ġwhile Ġ( startDate OfWeek . is Before OrEqual ( calendar DateRange . end Inclusive )) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdate At End OfWeek Ġ= ĠstartDate OfWeek . with ( next Or Same ( end DayOfWeek )) ĊĠĠĠĠĠĠĠ Ġval Ġdate At EndOf Month Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠYear Month . of ( startDate OfWeek . year , ĠstartDate OfWeek . month ). at EndOf Month () ĊĠĠĠĠĠĠĠ Ġval Ġdate At EndOf DateRange Ġ= Ġcalendar DateRange . end Inclusive ĊĊĠĠĠĠĠĠĠ Ġ// ĠFind Ġend Ġdate Ġof Ġthis Ġweek ĊĠĠĠĠĠĠĠ Ġ// ĠE ar liest Ġof : Ġ( day Ġat Ġend Ġof Ġweek Ġ|| Ġday Ġat Ġend Ġof Ġmonth Ġ|| Ġday Ġat Ġend Ġof Ġdate Ġrange ) ĊĠĠĠĠĠĠĠ Ġval ĠendDate OfWeek Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( date At End OfWeek , Ġdate At EndOf Month , Ġdate At EndOf DateRange ). ear liest () ĊĊĠĠĠĠĠĠĠ Ġval Ġday At Start OfWeek Ġ= ĠstartDate OfWeek . with ( previous Or Same ( start DayOfWeek )) ĊĠĠĠĠĠĠĠ Ġval Ġday At End OfWeek Ġ= ĠendDate OfWeek . with ( next Or Same ( end DayOfWeek )) ĊĊĠĠĠĠĠĠĠ Ġweeks Data . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeek Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Date OfWeek Ġ= ĠstartDate OfWeek , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Date OfWeek Ġ= ĠendDate OfWeek , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis First Week OfMonth Ġ= ĠstartDate OfWeek . day OfMonth Ġ== Ġ 1 Ġ|| ĠstartDate OfWeek . isEqual ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar DateRange . start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Days To Skip Ġ= Ġday At Start OfWeek . period In Days ( startDate OfWeek ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Days To Skip Ġ= ĠendDate OfWeek . period In Days ( day At End OfWeek ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġstart Ġon Ġnext Ġweek ĊĠĠĠĠĠĠĠ ĠstartDate OfWeek Ġ= ĠendDate OfWeek . plus Days ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġweeks Data Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠCalendar Preview ( ĊĠĠĠ Ġdark Theme : ĠBoolean , Ċ ) Ġ{ ĊĠĠĠ ĠSch eng en Calculator Theme ( dark Theme Ġ= Ġdark Theme ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPro viders ( Ambient Start DayOfWeek Ġprovides ĠDay OfWeek . MON DAY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar DateRange Ġ= Ġrange Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Inclusive Ġ= ĠLocalDate . of ( 2 0 2 0 , Ġ 1 , Ġ 1 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Inclusive Ġ= ĠLocalDate . of ( 2 0 2 0 , Ġ 3 , Ġ 2 1 )), ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Date Ranges Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrange Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Inclusive Ġ= ĠLocalDate . of ( 2 0 2 0 , Ġ 1 , Ġ 1 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Inclusive Ġ= ĠLocalDate . of ( 2 0 2 0 , Ġ 1 , Ġ 1 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrange Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Inclusive Ġ= ĠLocalDate . of ( 2 0 2 0 , Ġ 2 , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Inclusive Ġ= ĠLocalDate . of ( 2 0 2 0 , Ġ 2 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrange Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Inclusive Ġ= ĠLocalDate . of ( 2 0 2 0 , Ġ 2 , Ġ 2 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Inclusive Ġ= ĠLocalDate . of ( 2 0 2 0 , Ġ 3 , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview (" Calendar Preview Ġ- ĠDark ", Ġshow Background Ġ= Ġtrue ) Ċ @ Composable Ċ private Ġfun ĠCalendar Preview Dark () Ġ{ ĊĠĠĠ ĠCalendar Preview ( dark Theme Ġ= Ġtrue ) Ċ } Ċ Ċ @ Preview (" Calendar Preview Ġ- ĠLight ", Ġshow Background Ġ= Ġtrue ) Ċ @ Composable Ċ private Ġfun ĠCalendar Preview Light () Ġ{ ĊĠĠĠ ĠCalendar Preview ( dark Theme Ġ= Ġfalse ) Ċ }