package Ġcom . daniel ramp elt . schedule Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . activity . Component Activity Ċ import Ġandroidx . activity . compose . setContent Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . horizontal Scroll Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Box With Constraints Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . layout . Spacer Ċ import Ġandroidx . compose . foundation . layout . fill Max Height Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . height Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . foundation . layout . size In Ċ import Ġandroidx . compose . foundation . layout . width Ċ import Ġandroidx . compose . foundation . remember Scroll State Ċ import Ġandroidx . compose . foundation . shape . Rounded Corner Shape Ċ import Ġandroidx . compose . foundation . vertical Scroll Ċ 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 . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . clip To Bounds Ċ import Ġandroidx . compose . ui . draw . draw Be hind Ċ import Ġandroidx . compose . ui . geometry . Offset Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . layout . Layout Ċ import Ġandroidx . compose . ui . layout . Parent Data Modifier Ċ import Ġandroidx . compose . ui . layout . on Glob ally Position ed Ċ import Ġandroidx . compose . ui . platform . Local Density Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . text . style . Text Align Ċ import Ġandroidx . compose . ui . text . style . Text Overflow Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Parameter Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Parameter Provider Ċ import Ġandroidx . compose . ui . unit . Density Ċ import Ġandroidx . compose . ui . unit . Dp Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . daniel ramp elt . schedule . ui . theme . Week Schedule Theme Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Local Time Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . time . temporal . Ch rono Unit Ċ import Ġkotlin . math . round ToInt Ċ Ċ class ĠMainActivity Ġ: ĠComponent Activity () Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeek Schedule Theme Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA Ġsurface Ġcontainer Ġusing Ġthe Ġ' background ' Ġcolor Ġfrom Ġthe Ġtheme ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSurface ( color Ġ= ĠMaterial Theme . colors . background ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSchedule ( events Ġ= Ġsample Events ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠEvent ( ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġcolor : ĠColor , ĊĠĠĠ Ġval Ġstart : ĠLocalDateTime , ĊĠĠĠ Ġval Ġend : ĠLocalDateTime , ĊĠĠĠ Ġval Ġdescription : ĠString ? Ġ= Ġnull , Ċ ) Ċ Ċ inline Ġclass ĠSplit Type Ġprivate Ġconstructor ( val Ġvalue : ĠInt ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠNone Ġ= ĠSplit Type ( 0 ) ĊĠĠĠĠĠĠĠ Ġval ĠStart Ġ= ĠSplit Type ( 1 ) ĊĠĠĠĠĠĠĠ Ġval ĠEnd Ġ= ĠSplit Type ( 2 ) ĊĠĠĠĠĠĠĠ Ġval ĠBoth Ġ= ĠSplit Type ( 3 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠPosition ed Event ( ĊĠĠĠ Ġval Ġevent : ĠEvent , ĊĠĠĠ Ġval Ġsplit Type : ĠSplit Type , ĊĠĠĠ Ġval Ġdate : ĠLocalDate , ĊĠĠĠ Ġval Ġstart : ĠLocal Time , ĊĠĠĠ Ġval Ġend : ĠLocal Time , ĊĠĠĠ Ġval Ġcol : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġval Ġcol Span : ĠInt Ġ= Ġ 1 , ĊĠĠĠ Ġval Ġcol Total : ĠInt Ġ= Ġ 1 , Ċ ) Ċ Ċ val ĠEvent Time Formatter Ġ= ĠDateTime Formatter . of Pattern (" h : mm Ġa ") Ċ Ċ @ Composable Ċ fun ĠBasic Event ( ĊĠĠĠ Ġposition ed Event : ĠPosition ed Event , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , Ċ ) Ġ{ ĊĠĠĠ Ġval Ġevent Ġ= Ġposition ed Event . event ĊĠĠĠ Ġval Ġtop Radius Ġ= Ġif Ġ( position ed Event . split Type Ġ== ĠSplit Type . Start Ġ|| Ġposition ed Event . split Type Ġ== ĠSplit Type . Both ) Ġ 0 . dp Ġelse Ġ 4 . dp ĊĠĠĠ Ġval Ġbottom Radius Ġ= Ġif Ġ( position ed Event . split Type Ġ== ĠSplit Type . End Ġ|| Ġposition ed Event . split Type Ġ== ĠSplit Type . Both ) Ġ 0 . dp Ġelse Ġ 4 . dp ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġ 2 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġif Ġ( position ed Event . split Type Ġ== ĠSplit Type . End ) Ġ 0 . dp Ġelse Ġ 2 . dp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. clip To Bounds () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape Ġ= ĠRo unded Corner Shape ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Start Ġ= Ġtop Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop End Ġ= Ġtop Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom End Ġ= Ġbottom Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Start Ġ= Ġbottom Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 4 . dp ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ"${ event . start . format ( Event Time Formatter )} Ġ- Ġ${ event . end . format ( Event Time Formatter )} ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . caption , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverflow Ġ= ĠText Overflow . Clip , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġevent . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . body 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Bold , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverflow Ġ= ĠText Overflow . El lipsis , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( event . description Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġevent . description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . body 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverflow Ġ= ĠText Overflow . El lipsis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval Ġsample Events Ġ= ĠlistOf ( ĊĠĠĠ ĠEvent ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Google ĠI / O ĠKe yn ote ", ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( 0 xFF AF BB F 2 ), ĊĠĠĠĠĠĠĠ Ġstart Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 5 - 1 8 T 0 9 : 0 0 : 0 0 "), ĊĠĠĠĠĠĠĠ Ġend Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 5 - 1 8 T 1 1 : 0 0 : 0 0 "), ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" T une Ġin Ġto Ġfind Ġout Ġabout Ġhow Ġwe 're Ġfurther ing Ġour Ġmission Ġto Ġorgan ize Ġthe Ġworld âĢĻ s Ġinformation Ġand Ġmake Ġit Ġun ivers ally Ġaccessible Ġand Ġuseful .", ĊĠĠĠ Ġ), ĊĠĠĠ ĠEvent ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Developer ĠKe yn ote ", ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( 0 xFF AF BB F 2 ), ĊĠĠĠĠĠĠĠ Ġstart Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 5 - 1 8 T 0 9 : 0 0 : 0 0 "), ĊĠĠĠĠĠĠĠ Ġend Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 5 - 1 8 T 1 0 : 0 0 : 0 0 "), ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Learn Ġabout Ġthe Ġlatest Ġupdates Ġto Ġour Ġdeveloper Ġproducts Ġand Ġplatforms Ġfrom ĠGoogle ĠDevelopers .", ĊĠĠĠ Ġ), ĊĠĠĠ ĠEvent ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" What 's Ġnew Ġin ĠAndroid ", ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( 0 xFF 1 B 9 9 8 B ), ĊĠĠĠĠĠĠĠ Ġstart Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 5 - 1 8 T 1 0 : 0 0 : 0 0 "), ĊĠĠĠĠĠĠĠ Ġend Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 5 - 1 8 T 1 1 : 0 0 : 0 0 "), ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" In Ġthis ĠKe yn ote , ĠC het ĠHa ase , ĠDan ĠS andler , Ġand ĠR omain ĠGu y Ġdiscuss Ġthe Ġlatest ĠAndroid Ġfeatures Ġand Ġenhance ments Ġfor Ġdevelopers .", ĊĠĠĠ Ġ), ĊĠĠĠ ĠEvent ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" What 's Ġnew Ġin ĠMaterial ĠDesign ", ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( 0 xFF 6 DD 3 CE ), ĊĠĠĠĠĠĠĠ Ġstart Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 5 - 1 8 T 1 1 : 0 0 : 0 0 "), ĊĠĠĠĠĠĠĠ Ġend Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 5 - 1 8 T 1 1 : 4 5 : 0 0 "), ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Learn Ġabout Ġthe Ġlatest Ġdesign Ġimprovements Ġto Ġhelp Ġyou Ġbuild Ġpersonal Ġdynamic Ġexperiences Ġwith ĠMaterial ĠDesign .", ĊĠĠĠ Ġ), ĊĠĠĠ ĠEvent ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" What 's Ġnew Ġin ĠMachine ĠLearning ", ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( 0 xFF F 4 BF DB ), ĊĠĠĠĠĠĠĠ Ġstart Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 5 - 1 8 T 1 0 : 0 0 : 0 0 "), ĊĠĠĠĠĠĠĠ Ġend Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 5 - 1 8 T 1 1 : 0 0 : 0 0 "), ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Learn Ġabout Ġthe Ġlatest Ġand Ġgreatest Ġin ĠML Ġfrom ĠGoogle . ĠWe âĢĻ ll Ġcover Ġwhat âĢĻ s Ġavailable Ġto Ġdevelopers Ġwhen Ġit Ġcomes Ġto Ġcreating , Ġunderstanding , Ġand Ġdeploying Ġmodels Ġfor Ġa Ġvariety Ġof Ġdifferent Ġapplications .", ĊĠĠĠ Ġ), ĊĠĠĠ ĠEvent ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" What 's Ġnew Ġin ĠMachine ĠLearning ", ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( 0 xFF F 4 BF DB ), ĊĠĠĠĠĠĠĠ Ġstart Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 5 - 1 8 T 1 0 : 3 0 : 0 0 "), ĊĠĠĠĠĠĠĠ Ġend Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 5 - 1 8 T 1 1 : 3 0 : 0 0 "), ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Learn Ġabout Ġthe Ġlatest Ġand Ġgreatest Ġin ĠML Ġfrom ĠGoogle . ĠWe âĢĻ ll Ġcover Ġwhat âĢĻ s Ġavailable Ġto Ġdevelopers Ġwhen Ġit Ġcomes Ġto Ġcreating , Ġunderstanding , Ġand Ġdeploying Ġmodels Ġfor Ġa Ġvariety Ġof Ġdifferent Ġapplications .", ĊĠĠĠ Ġ), ĊĠĠĠ ĠEvent ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Jet pack ĠCompose ĠBas ics ", ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( 0 xFF 1 B 9 9 8 B ), ĊĠĠĠĠĠĠĠ Ġstart Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 5 - 2 0 T 1 2 : 0 0 : 0 0 "), ĊĠĠĠĠĠĠĠ Ġend Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 5 - 2 0 T 1 3 : 0 0 : 0 0 "), ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" This ĠWork shop Ġwill Ġtake Ġyou Ġthrough Ġthe Ġbasics Ġof Ġbuilding Ġyour Ġfirst Ġapp Ġwith ĠJet pack ĠCompose , ĠAndroid 's Ġnew Ġmodern ĠUI Ġtoolkit Ġthat Ġsimpl ifies Ġand Ġaccel er ates ĠUI Ġdevelopment Ġon ĠAndroid .", ĊĠĠĠ Ġ), Ċ ) Ċ Ċ class ĠEvents Provider Ġ: ĠPreview Parameter Provider < Event > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġvalues Ġ= Ġsample Events . as Sequence () Ċ } Ċ Ċ @ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠEvent Preview ( ĊĠĠĠ Ġ@ Preview Parameter ( Events Provider :: class ) Ġevent : ĠEvent , Ċ ) Ġ{ ĊĠĠĠ ĠWeek Schedule Theme Ġ{ ĊĠĠĠĠĠĠĠ ĠBasic Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPosition ed Event ( event , ĠSplit Type . None , Ġevent . start . to LocalDate (), Ġevent . start . to Local Time (), Ġevent . end . to Local Time ()), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . size In ( max Height Ġ= Ġ 6 4 . dp ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠEvent Data Modifier ( ĊĠĠĠ Ġval Ġposition ed Event : ĠPosition ed Event , Ċ ) Ġ: ĠParent Data Modifier Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠD ensity . modify Parent Data ( parent Data : ĠAny ?) Ġ= Ġposition ed Event Ċ } Ċ Ċ private Ġfun ĠModifier . event Data ( position ed Event : ĠPosition ed Event ) Ġ= Ġthis . then ( EventData Modifier ( position ed Event )) Ċ Ċ private Ġval ĠDay Formatter Ġ= ĠDateTime Formatter . of Pattern (" EE , ĠM MM Ġd ") Ċ Ċ @ Composable Ċ fun ĠBasic Day Header ( ĊĠĠĠ Ġday : ĠLocalDate , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , Ċ ) Ġ{ ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġday . format ( Day Formatter ), ĊĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 4 . dp ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠBasic Day Header Preview () Ġ{ ĊĠĠĠ ĠWeek Schedule Theme Ġ{ ĊĠĠĠĠĠĠĠ ĠBasic Day Header ( day Ġ= ĠLocalDate . now ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠSchedule Header ( ĊĠĠĠ Ġmin Date : ĠLocalDate , ĊĠĠĠ Ġmax Date : ĠLocalDate , ĊĠĠĠ Ġday Width : ĠD p , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġday Header : Ġ@ Composable Ġ( day : ĠLocalDate ) Ġ-> ĠUnit Ġ= Ġ{ ĠBasic Day Header ( day Ġ= Ġit ) Ġ}, Ċ ) Ġ{ ĊĠĠĠ ĠRow ( modifier Ġ= Ġmodifier ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnum Days Ġ= ĠCh rono Unit . DAYS . between ( min Date , Ġmax Date ). toInt () Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġrepeat ( num Days ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( modifier Ġ= ĠModifier . width ( day Width )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Header ( min Date . plus Days ( i . to Long ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠSchedule Header Preview () Ġ{ ĊĠĠĠ ĠWeek Schedule Theme Ġ{ ĊĠĠĠĠĠĠĠ ĠSchedule Header ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Date Ġ= ĠLocalDate . now (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Date Ġ= ĠLocalDate . now (). plus Days ( 5 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday Width Ġ= Ġ 2 5 6 . dp , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval ĠHour Formatter Ġ= ĠDateTime Formatter . of Pattern (" h Ġa ") Ċ Ċ @ Composable Ċ fun ĠBasic Sidebar Label ( ĊĠĠĠ Ġtime : ĠLocal Time , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , Ċ ) Ġ{ ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġtime . format ( Hour Formatter ), ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Height () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 4 . dp ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠBasic Sidebar Label Preview () Ġ{ ĊĠĠĠ ĠWeek Schedule Theme Ġ{ ĊĠĠĠĠĠĠĠ ĠBasic Sidebar Label ( time Ġ= ĠLocal Time . NO ON , ĠModifier . size In ( max Height Ġ= Ġ 6 4 . dp )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠSchedule Sidebar ( ĊĠĠĠ Ġhour Height : ĠD p , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġmin Time : ĠLocal Time Ġ= ĠLocal Time . MIN , ĊĠĠĠ Ġmax Time : ĠLocal Time Ġ= ĠLocal Time . MAX , ĊĠĠĠ Ġlabel : Ġ@ Composable Ġ( time : ĠLocal Time ) Ġ-> ĠUnit Ġ= Ġ{ ĠBasic Sidebar Label ( time Ġ= Ġit ) Ġ}, Ċ ) Ġ{ ĊĠĠĠ Ġval Ġnum Minutes Ġ= ĠCh rono Unit . MIN UTES . between ( min Time , Ġmax Time ). toInt () Ġ+ Ġ 1 ĊĠĠĠ Ġval Ġnum Hours Ġ= Ġnum Minutes Ġ/ Ġ 6 0 ĊĠĠĠ Ġval Ġfirst Hour Ġ= Ġmin Time . tr uncated To ( Ch rono Unit . HOUR S ) ĊĠĠĠ Ġval Ġfirst Hour Offset Minutes Ġ= Ġif Ġ( first Hour Ġ== Ġmin Time ) Ġ 0 Ġelse ĠCh rono Unit . MIN UTES . between ( min Time , Ġfirst Hour . plus Hours ( 1 )) ĊĠĠĠ Ġval Ġfirst Hour Offset Ġ= Ġhour Height Ġ* Ġ( first Hour Offset Minutes Ġ/ Ġ 6 0 f ) ĊĠĠĠ Ġval ĠstartTime Ġ= Ġif Ġ( first Hour Ġ== Ġmin Time ) Ġfirst Hour Ġelse Ġfirst Hour . plus Hours ( 1 ) ĊĠĠĠ ĠColumn ( modifier Ġ= Ġmodifier ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( first Hour Offset )) ĊĠĠĠĠĠĠĠ Ġrepeat ( num Hours ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( modifier Ġ= ĠModifier . height ( hour Height )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel ( startTime . plus Hours ( i . to Long ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠSchedule Sidebar Preview () Ġ{ ĊĠĠĠ ĠWeek Schedule Theme Ġ{ ĊĠĠĠĠĠĠĠ ĠSchedule Sidebar ( hour Height Ġ= Ġ 6 4 . dp ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġsplit Events ( events : ĠList < Event >): ĠList < Position ed Event > Ġ{ ĊĠĠĠ Ġreturn Ġevents ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartDate Ġ= Ġevent . start . to LocalDate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠendDate Ġ= Ġevent . end . to LocalDate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( startDate Ġ== ĠendDate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Position ed Event ( event , ĠSplit Type . None , Ġevent . start . to LocalDate (), Ġevent . start . to Local Time (), Ġevent . end . to Local Time ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdays Ġ= ĠCh rono Unit . DAYS . between ( startDate , ĠendDate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit Events Ġ= Ġmutable ListOf < Position ed Event >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. days ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠstartDate . plus Days ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Events Ġ+= ĠPosition ed Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Type Ġ= Ġif Ġ( date Ġ== ĠstartDate ) ĠSplit Type . End Ġelse Ġif Ġ( date Ġ== ĠendDate ) ĠSplit Type . Start Ġelse ĠSplit Type . Both , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġif Ġ( date Ġ== ĠstartDate ) Ġevent . start . to Local Time () Ġelse ĠLocal Time . MIN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġif Ġ( date Ġ== ĠendDate ) Ġevent . end . to Local Time () Ġelse ĠLocal Time . MAX , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Events ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. flatten () Ċ } Ċ Ċ private Ġfun ĠPosition ed Event . overlap sWith ( other : ĠPosition ed Event ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġdate Ġ== Ġother . date Ġ&& Ġstart Ġ< Ġother . end Ġ&& Ġend Ġ> Ġother . start Ċ } Ċ Ċ private Ġfun ĠList < Position ed Event >. times Overlap With ( event : ĠPosition ed Event ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġany Ġ{ Ġit . overlap sWith ( event ) Ġ} Ċ } Ċ Ċ private Ġfun Ġarrange Events ( events : ĠList < Position ed Event >): ĠList < Position ed Event > Ġ{ ĊĠĠĠ Ġval Ġposition ed Events Ġ= Ġmutable ListOf < Position ed Event >() ĊĠĠĠ Ġval Ġgroup Events : ĠMutable List < Mutable List < Position ed Event >> Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġfun Ġreset Group () Ġ{ ĊĠĠĠĠĠĠĠ Ġgroup Events . forEach Indexed Ġ{ Ġcol Index , Ġcol Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcol . forEach Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ed Events . add ( e . copy ( col Ġ= Ġcol Index , Ġcol Total Ġ= Ġgroup Events . size )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgroup Events . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġevents . forEach Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġvar Ġfirst Free Col Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġnum Free Col Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġgroup Events . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol Ġ= Ġgroup Events [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( col . times Overlap With ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Free Col Ġ< Ġ 0 ) Ġcontinue Ġelse Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Free Col Ġ< Ġ 0 ) Ġfirst Free Col Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnum Free Col ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOver lap s Ġwith Ġall , Ġadd Ġa Ġnew Ġcolumn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Free Col Ġ< Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Events Ġ+= Ġmutable ListOf ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠExpand Ġanything Ġthat Ġspans Ġinto Ġthe Ġprevious Ġcolumn Ġand Ġdoesn 't Ġoverlap Ġwith Ġthis Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ci Ġin Ġ 0 Ġuntil Ġgroup Events . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol Ġ= Ġgroup Events [ ci ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol . forEach Indexed Ġ{ Ġei , Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ci Ġ+ Ġe . col Span Ġ== Ġgroup Events . size Ġ- Ġ 1 Ġ&& Ġ! e . overlap sWith ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol [ ei ] Ġ= Ġe . copy ( col Span Ġ= Ġe . col Span Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġoverlap Ġwith Ġany , Ġstart Ġa Ġnew Ġgroup ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnum Free Col Ġ== Ġgroup Events . size Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Group () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Events Ġ+= Ġmutable ListOf ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAt Ġleast Ġone Ġcolumn Ġfree , Ġadd Ġto Ġfirst Ġfree Ġcolumn Ġand Ġexpand Ġto Ġas Ġmany Ġas Ġpossible ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Events [ first Free Col ] Ġ+= Ġevent . copy ( col Span Ġ= Ġnum Free Col ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreset Group () ĊĠĠĠ Ġreturn Ġposition ed Events Ċ } Ċ Ċ sealed Ġclass ĠSchedule Size Ġ{ ĊĠĠĠ Ġclass ĠFixed Size ( val Ġsize : ĠD p ) Ġ: ĠSchedule Size () ĊĠĠĠ Ġclass ĠFixed Count ( val Ġcount : ĠFloat ) Ġ: ĠSchedule Size () Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructor ( count : ĠInt ) Ġ: Ġthis ( count . toFloat ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġclass ĠAdapt ive ( val Ġmin Size : ĠD p ) Ġ: ĠSchedule Size () Ċ } Ċ Ċ @ Composable Ċ fun ĠSchedule ( ĊĠĠĠ Ġevents : ĠList < Event >, ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġevent Content : Ġ@ Composable Ġ( position ed Event : ĠPosition ed Event ) Ġ-> ĠUnit Ġ= Ġ{ ĠBasic Event ( position ed Event Ġ= Ġit ) Ġ}, ĊĠĠĠ Ġday Header : Ġ@ Composable Ġ( day : ĠLocalDate ) Ġ-> ĠUnit Ġ= Ġ{ ĠBasic Day Header ( day Ġ= Ġit ) Ġ}, ĊĠĠĠ Ġtime Label : Ġ@ Composable Ġ( time : ĠLocal Time ) Ġ-> ĠUnit Ġ= Ġ{ ĠBasic Sidebar Label ( time Ġ= Ġit ) Ġ}, ĊĠĠĠ Ġmin Date : ĠLocalDate Ġ= Ġevents . min By OrNull ( Event :: start )?. start ?. to LocalDate () Ġ?: ĠLocalDate . now (), ĊĠĠĠ Ġmax Date : ĠLocalDate Ġ= Ġevents . max By OrNull ( Event :: end )?. end ?. to LocalDate () Ġ?: ĠLocalDate . now (), ĊĠĠĠ Ġmin Time : ĠLocal Time Ġ= ĠLocal Time . MIN , ĊĠĠĠ Ġmax Time : ĠLocal Time Ġ= ĠLocal Time . MAX , ĊĠĠĠ Ġday Size : ĠSchedule Size Ġ= ĠSchedule Size . Fixed Size ( 2 5 6 . dp ), ĊĠĠĠ Ġhour Size : ĠSchedule Size Ġ= ĠSchedule Size . Fixed Size ( 6 4 . dp ), Ċ ) Ġ{ ĊĠĠĠ Ġval Ġnum Days Ġ= ĠCh rono Unit . DAYS . between ( min Date , Ġmax Date ). toInt () Ġ+ Ġ 1 ĊĠĠĠ Ġval Ġnum Minutes Ġ= ĠCh rono Unit . MIN UTES . between ( min Time , Ġmax Time ). toInt () Ġ+ Ġ 1 ĊĠĠĠ Ġval Ġnum Hours Ġ= Ġnum Minutes . toFloat () Ġ/ Ġ 6 0 f ĊĠĠĠ Ġval Ġvertical Scroll State Ġ= Ġremember Scroll State () ĊĠĠĠ Ġval Ġhorizontal Scroll State Ġ= Ġremember Scroll State () ĊĠĠĠ Ġvar Ġsidebar Width Ġby Ġremember Ġ{ Ġmutable State Of ( 0 ) Ġ} ĊĠĠĠ Ġvar Ġheader Height Ġby Ġremember Ġ{ Ġmutable State Of ( 0 ) Ġ} ĊĠĠĠ ĠBox With Constraints ( modifier Ġ= Ġmodifier ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġday Width : ĠD p Ġ= Ġwhen Ġ( day Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSchedule Size . Fixed Size Ġ-> Ġday Size . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSchedule Size . Fixed Count Ġ-> Ġwith ( Local Density . current ) Ġ{ Ġ(( constraints . maxWidth Ġ- Ġsidebar Width ) Ġ/ Ġday Size . count ). to Dp () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSchedule Size . Adaptive Ġ-> Ġwith ( Local Density . current ) Ġ{ Ġmax Of ((( constraints . maxWidth Ġ- Ġsidebar Width ) Ġ/ Ġnum Days ). to Dp (), Ġday Size . min Size ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġhour Height : ĠD p Ġ= Ġwhen Ġ( hour Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSchedule Size . Fixed Size Ġ-> Ġhour Size . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSchedule Size . Fixed Count Ġ-> Ġwith ( Local Density . current ) Ġ{ Ġ(( constraints . max Height Ġ- Ġheader Height ) Ġ/ Ġhour Size . count ). to Dp () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSchedule Size . Adaptive Ġ-> Ġwith ( Local Density . current ) Ġ{ Ġmax Of ((( constraints . max Height Ġ- Ġheader Height ) Ġ/ Ġnum Hours ). to Dp (), Ġhour Size . min Size ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠColumn ( modifier Ġ= Ġmodifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSchedule Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Date Ġ= Ġmin Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Date Ġ= Ġmax Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Width Ġ= Ġday Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Header Ġ= Ġday Header , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( start Ġ= Ġwith ( Local Density . current ) Ġ{ Ġsidebar Width . to Dp () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. horizontal Scroll ( horizontal Scroll State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Glob ally Position ed Ġ{ Ġheader Height Ġ= Ġit . size . height Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRow ( modifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. weight ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. align ( Alignment . Start )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSchedule Sidebar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhour Height Ġ= Ġhour Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Time Ġ= Ġmin Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Time Ġ= Ġmax Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġtime Label , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. vertical Scroll ( vertical Scroll State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Glob ally Position ed Ġ{ Ġsidebar Width Ġ= Ġit . size . width Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBasic Schedule ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents Ġ= Ġevents , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Content Ġ= Ġevent Content , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Date Ġ= Ġmin Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Date Ġ= Ġmax Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Time Ġ= Ġmin Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Time Ġ= Ġmax Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Width Ġ= Ġday Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhour Height Ġ= Ġhour Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. weight ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. vertical Scroll ( vertical Scroll State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. horizontal Scroll ( horizontal Scroll State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠBasic Schedule ( ĊĠĠĠ Ġevents : ĠList < Event >, ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġevent Content : Ġ@ Composable Ġ( position ed Event : ĠPosition ed Event ) Ġ-> ĠUnit Ġ= Ġ{ ĠBasic Event ( position ed Event Ġ= Ġit ) Ġ}, ĊĠĠĠ Ġmin Date : ĠLocalDate Ġ= Ġevents . min By OrNull ( Event :: start )?. start ?. to LocalDate () Ġ?: ĠLocalDate . now (), ĊĠĠĠ Ġmax Date : ĠLocalDate Ġ= Ġevents . max By OrNull ( Event :: end )?. end ?. to LocalDate () Ġ?: ĠLocalDate . now (), ĊĠĠĠ Ġmin Time : ĠLocal Time Ġ= ĠLocal Time . MIN , ĊĠĠĠ Ġmax Time : ĠLocal Time Ġ= ĠLocal Time . MAX , ĊĠĠĠ Ġday Width : ĠD p , ĊĠĠĠ Ġhour Height : ĠD p , Ċ ) Ġ{ ĊĠĠĠ Ġval Ġnum Days Ġ= ĠCh rono Unit . DAYS . between ( min Date , Ġmax Date ). toInt () Ġ+ Ġ 1 ĊĠĠĠ Ġval Ġnum Minutes Ġ= ĠCh rono Unit . MIN UTES . between ( min Time , Ġmax Time ). toInt () Ġ+ Ġ 1 ĊĠĠĠ Ġval Ġnum Hours Ġ= Ġnum Minutes Ġ/ Ġ 6 0 ĊĠĠĠ Ġval Ġdivider Color Ġ= Ġif Ġ( Material Theme . colors . is Light ) ĠColor . Light Gray Ġelse ĠColor . Dark Gray ĊĠĠĠ Ġval Ġposition ed Events Ġ= Ġremember ( events ) Ġ{ Ġarrange Events ( split Events ( events . sorted By ( Event :: start ))). filter Ġ{ Ġit . end Ġ> Ġmin Time Ġ&& Ġit . start Ġ< Ġmax Time Ġ} Ġ} ĊĠĠĠ ĠLayout ( ĊĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ed Events . forEach Ġ{ Ġposition ed Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( modifier Ġ= ĠModifier . event Data ( position ed Event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Content ( position ed Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. draw Be hind Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Hour Ġ= Ġmin Time . tr uncated To ( Ch rono Unit . HOUR S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Hour Offset Minutes Ġ= Ġif Ġ( first Hour Ġ== Ġmin Time ) Ġ 0 Ġelse ĠCh rono Unit . MIN UTES . between ( min Time , Ġfirst Hour . plus Hours ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Hour Offset Ġ= Ġ( first Hour Offset Minutes Ġ/ Ġ 6 0 f ) Ġ* Ġhour Height . to Px () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( num Hours ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= ĠOffset ( 0 f , Ġit Ġ* Ġhour Height . to Px () Ġ+ Ġfirst Hour Offset ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= ĠOffset ( size . width , Ġit Ġ* Ġhour Height . to Px () Ġ+ Ġfirst Hour Offset ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġ 1 . dp . to Px () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( num Days Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= ĠOffset (( it Ġ+ Ġ 1 ) Ġ* Ġday Width . to Px (), Ġ 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= ĠOffset (( it Ġ+ Ġ 1 ) Ġ* Ġday Width . to Px (), Ġsize . height ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġ 1 . dp . to Px () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ġ{ Ġmeasure ables , Ġconstraints Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġ( hour Height . to Px () Ġ* Ġ( num Minutes Ġ/ Ġ 6 0 f )). round ToInt () ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġday Width . round To Px () Ġ* Ġnum Days ĊĠĠĠĠĠĠĠ Ġval Ġplace ables With Events Ġ= Ġmeasure ables . map Ġ{ Ġmeas ur able Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit Event Ġ= Ġmeas ur able . parent Data Ġas ĠPosition ed Event ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Duration Minutes Ġ= ĠCh rono Unit . MIN UTES . between ( split Event . start , Ġmin Of ( split Event . end , Ġmax Time )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Height Ġ= Ġ(( event Duration Minutes Ġ/ Ġ 6 0 f ) Ġ* Ġhour Height . to Px ()). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Width Ġ= Ġ(( split Event . col Span . toFloat () Ġ/ Ġsplit Event . col Total . toFloat ()) Ġ* Ġday Width . to Px ()). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace able Ġ= Ġmeas ur able . measure ( constraints . copy ( min Width Ġ= Ġevent Width , ĠmaxWidth Ġ= Ġevent Width , ĠminHeight Ġ= Ġevent Height , ĠmaxHeight Ġ= Ġevent Height )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( place able , Ġsplit Event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlayout ( width , Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplace ables With Events . forEach Ġ{ Ġ( place able , Ġsplit Event ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Offset Minutes Ġ= Ġif Ġ( split Event . start Ġ> Ġmin Time ) ĠCh rono Unit . MIN UTES . between ( min Time , Ġsplit Event . start ) Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Y Ġ= Ġ(( event Offset Minutes Ġ/ Ġ 6 0 f ) Ġ* Ġhour Height . to Px ()). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Offset Days Ġ= ĠCh rono Unit . DAYS . between ( min Date , Ġsplit Event . date ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent X Ġ= Ġevent Offset Days Ġ* Ġday Width . round To Px () Ġ+ Ġ( split Event . col Ġ* Ġ( day Width . to Px () Ġ/ Ġsplit Event . col Total . toFloat ())). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace able . place ( event X , Ġevent Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠSchedule Preview () Ġ{ ĊĠĠĠ ĠWeek Schedule Theme Ġ{ ĊĠĠĠĠĠĠĠ ĠSchedule ( sample Events ) ĊĠĠĠ Ġ} Ċ } Ċ