package Ġcom . example . android dev challenge Ċ Ċ import Ġandroidx . compose . foundation . Border Stroke Ċ import Ġandroidx . compose . foundation . Image Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . click able Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . lazy . Grid Cells Ċ import Ġandroidx . compose . foundation . lazy . Lazy Vertical Grid Ċ import Ġandroidx . compose . foundation . lazy . items Ċ import Ġandroidx . compose . foundation . selection . toggle able Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . material . Material Theme . colors Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . layout . Content Scale Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . example . android dev challenge . data . Categories Ċ import Ġcom . example . android dev challenge . data . Services Ċ import Ġcom . example . android dev challenge . data . model . Service Id Ċ import Ġcom . example . android dev challenge . ui . model .* Ċ import Ġcom . example . android dev challenge . ui . theme .* Ċ Ċ @ Composable Ċ fun ĠServices Loading ( ĊĠĠĠ Ġview State : ĠService ListView State . Loading Ċ ) Ġ{ ĊĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠ Ġtop Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTop AppBar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ ĠText ( view State . title ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Icon Ġ= Ġ{ ĠHome Nav Icon () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( colors . surface ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCircular Progress Indicator () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠService List ( ĊĠĠĠ Ġview State : ĠService ListView State . Ready , ĊĠĠĠ Ġupdate Category Selection : Ġ( Service Category State ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Service Selected : Ġ( Service Id ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġbottom Sheet State Ġ= Ġremember Bottom Sheet State ( Bottom Sheet Value . Collapsed ) ĊĠĠĠ ĠBottom Sheet Sca ffold ( ĊĠĠĠĠĠĠĠ Ġscaffold State Ġ= Ġremember Bottom Sheet Sca ffold State ( bottom Sheet State Ġ= Ġbottom Sheet State ), ĊĠĠĠĠĠĠĠ Ġsheet Peek Height Ġ= Ġ 0 . dp , ĊĠĠĠĠĠĠĠ Ġsheet Shape Ġ= Ġbottom Sheet Shape , ĊĠĠĠĠĠĠĠ Ġsheet Elevation Ġ= Ġ 8 . dp , ĊĠĠĠĠĠĠĠ Ġsheet BackgroundColor Ġ= Ġcolors . secondary Variant , ĊĠĠĠĠĠĠĠ Ġsheet Content Ġ= Ġ{ ĠCategories Bottom Sheet ( update Category Selection , Ġview State . categories ) Ġ}, ĊĠĠĠĠĠĠĠ Ġtop Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTop AppBar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ ĠText ( view State . title ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Icon Ġ= Ġ{ ĠHome Nav Icon () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactions Ġ= Ġ{ ĠFilter Action Icon ( bottom Sheet State ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLazy Vertical Grid ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 4 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcells Ġ= ĠGrid Cells . Adaptive ( min Size Ġ= Ġ 1 8 0 . dp ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems ( view State . services ) Ġ{ Ġservice Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠService Item Card ( service , Ġon Service Selected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( Modifier . height ( 1 6 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠCategories Bottom Sheet ( ĊĠĠĠ Ġupdate Category Selection : Ġ( Service Category State ) Ġ-> ĠUnit , ĊĠĠĠ Ġcategories : ĠList < Service Category State > Ċ ) Ġ{ ĊĠĠĠ Ġfor Ġ( category Ġin Ġcategories ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( vertical Ġ= Ġ 4 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toggle able ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . selected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġ{ Ġchecked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Category Selection ( category . category Ġto Ġchecked ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCheckbox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Ġ= Ġcategory . selected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 4 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 6 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Checked Change Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . category . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . padding ( 8 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcolors . on Surface ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠService Item Card ( ĊĠĠĠ Ġservice : ĠService ListItem , ĊĠĠĠ Ġon Service Selected : Ġ( service : ĠService Id ) Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ ĠCard ( ĊĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 4 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able Ġ{ Ġon Service Selected ( service . id ) Ġ}, ĊĠĠĠĠĠĠĠ Ġelevation Ġ= Ġ 2 . dp , ĊĠĠĠĠĠĠĠ Ġborder Ġ= ĠBorder Stroke ( 1 . dp , Ġcolors . primary Variant ), ĊĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= Ġcolors . primary Variant , ĊĠĠĠĠĠĠĠ Ġcontent Color Ġ= Ġcolors . on Primary ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Resource ( id Ġ= Ġservice . image ResourceId ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Scale Ġ= ĠContent Scale . Crop , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( 1 8 0 . dp ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( Modifier . height ( 1 4 0 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSurface ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 4 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape Ġ= Ġshapes . small , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcolors . primary Surface , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelevation Ġ= Ġ 4 . dp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. required Height In ( 4 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( horizontal Ġ= Ġ 8 . dp , Ġvertical Ġ= Ġ 4 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center Start , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġservice . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġty pography . h 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Sem iB old , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( Modifier . size ( 4 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġservice . duration Range . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( horizontal Ġ= Ġ 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġservice . price Range . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( horizontal Ġ= Ġ 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( Modifier . size ( 8 . dp )) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } ĊĊ Ċ @ Preview () Ċ @ Composable Ċ private Ġfun ĠPreview () Ġ{ ĊĠĠĠ ĠMy Theme Ġ{ ĊĠĠĠĠĠĠĠ ĠService List ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State Ġ= ĠService ListView State . Ready ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠServices . all Services . to ListView Presentation (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategories . all Categories . map Ġ{ Ġit Ġto Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Category Selection Ġ= Ġ{ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Service Selected Ġ= Ġ{} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }