package Ġcom . fab ian . sch eng en vis ac al cul ator . ui . screens . calendar Ċ Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Surface Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . remember Ċ 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 . LocalDate Range Ċ import Ġcom . fab ian . sch eng en vis ac al cul ator . util . Position Of Date Inside Range Ċ import Ġcom . fab ian . sch eng en vis ac al cul ator . util . position Of Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . Year Month Ċ Ċ @ Composable Ċ fun ĠCalendar Week Item ( ĊĠĠĠ Ġindex : ĠInt , ĊĠĠĠ Ġselected Date Ranges : ĠList < LocalDate Range >, ĊĠĠĠ Ġweek Data : ĠWeek Data , Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( week Data . is First Week OfMonth ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMonth Header ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġif Ġ( index Ġ== Ġ 0 ) Ġ 8 . dp Ġelse Ġ 2 4 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġ 8 . dp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Ġ= ĠYear Month . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweek Data . first Date OfWeek . year , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweek Data . first Date OfWeek . month ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠWeek Header () ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠCalendar Week ( selected Date Ranges Ġ= Ġselected Date Ranges , Ġweek Data Ġ= Ġweek Data ) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠCalendar Week ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġselected Date Ranges : ĠList < LocalDate Range >, ĊĠĠĠ Ġweek Data : ĠWeek Data , Ċ ) Ġ{ ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( vertical Ġ= Ġ 1 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. wrap Content Width ( Alignment . Center H orizontally ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRender Ġempty Ġcells Ġfor Ġstart Ġdays Ġto Ġskip ĊĠĠĠĠĠĠĠ Ġfor Ġ( day Ġin Ġ 0 Ġuntil Ġweek Data . start Days To Skip ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Empty Cell () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRender Ġdate Ġcells ĊĠĠĠĠĠĠĠ Ġfor Ġ( day Ġin Ġ 0 Ġuntil Ġweek Data . days In Week ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Year Ġ= Ġweek Data . first Date OfWeek . year ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Month Ġ= Ġweek Data . first Date OfWeek . month Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Day OfMonth Ġ= Ġweek Data . first Date OfWeek . day OfMonth Ġ+ Ġday ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmemo ize Ġthe Ġcurrent Ġdate Ġso Ġit Ġdoesn 't Ġget Ġallocated Ġon Ġeach Ġcomposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Date Ġ= Ġremember ( current Year , Ġcurrent Month , Ġcurrent Day OfMonth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDate . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Year , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Month , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Day OfMonth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell State Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( selected Date Ranges . position Of ( current Date )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPosition Of Date Inside Range . Out Ġ-> ĠCalendar Cell State . Selectable Date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPosition Of Date Inside Range . Start Ġ-> ĠCalendar Cell State . Selected Start Of Range ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPosition Of Date Inside Range . Whole Ġ-> ĠCalendar Cell State . Selected Whole Range ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPosition Of Date Inside Range . Middle Ġ-> ĠCalendar Cell State . Selected Mid Range ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPosition Of Date Inside Range . End Ġ-> ĠCalendar Cell State . Selected EndOf Range ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Day OfMonth Cell ( day OfMonth Ġ= Ġcurrent Day OfMonth , Ġcell State Ġ= Ġcell State ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRender Ġempty Ġcells Ġfor Ġend Ġdays Ġto Ġskip ĊĠĠĠĠĠĠĠ Ġfor Ġ( day Ġin Ġ 0 Ġuntil Ġweek Data . end Days To Skip ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Empty Cell () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠMonth Header ( modifier : ĠModifier Ġ= ĠModifier , Ġmonth : ĠYear Month ) Ġ{ ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. wrap Content Height ( Alignment . Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. preferred Width (( CELL _ SIZE _ DP Ġ* Ġ 7 ) Ġ+ Ġ( 1 2 Ġ* Ġ 2 ). dp ), ĊĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Space Between ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . align ( Alignment . Bottom ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġmonth . month . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 6 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . align ( Alignment . Bottom ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ"${ month . year }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . caption ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠWeek Header ( modifier : ĠModifier Ġ= ĠModifier ) Ġ{ ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. wrap Content Width (), ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalendar Start DayOfWeek Ġ= ĠAmb ient Start DayOfWeek . current ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( week Day Ġin Ġ 0 Ġuntil Ġ 7 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent DayOfWeek Ġ= Ġcalendar Start DayOfWeek . plus ( week Day ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDay OfWeek Cell ( day OfWeek Ġ= Ġcurrent DayOfWeek ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠWeek Preview ( dark Theme : ĠBoolean ) Ġ{ ĊĠĠĠ ĠSch eng en Calculator Theme ( dark Theme Ġ= Ġdark Theme ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSurface Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( horizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Week Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Date Ranges Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDate . of ( 2 0 2 0 , Ġ 3 , Ġ 2 ) .. LocalDate . of ( 2 0 2 0 , Ġ 3 , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweek Data Ġ= ĠWeek Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Date OfWeek Ġ= ĠLocalDate . of ( 2 0 2 0 , Ġ 3 , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Date OfWeek Ġ= ĠLocalDate . of ( 2 0 2 0 , Ġ 3 , Ġ 7 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis First Week OfMonth Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Days To Skip Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Days To Skip Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview (" Week ĠItem ĠPreview Ġ- ĠDark ", Ġshow Background Ġ= Ġtrue ) Ċ @ Composable Ċ private Ġfun ĠWeek Item Preview Dark () Ġ{ ĊĠĠĠ ĠWeek Preview ( dark Theme Ġ= Ġtrue ) Ċ } Ċ Ċ @ Preview (" Week ĠItem ĠPreview Ġ- ĠLight ", Ġshow Background Ġ= Ġtrue ) Ċ @ Composable Ċ private Ġfun ĠWeek Item Preview Light () Ġ{ ĊĠĠĠ ĠWeek Preview ( dark Theme Ġ= Ġfalse ) Ċ } ĊĊĊĊĊ