/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . example . android dev challenge . ui . screens . home . components Ċ Ċ import Ġandroidx . compose . foundation . click able Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . constraint layout . compose . Constraint Layout Ċ import Ġcom . example . android dev challenge . domain . extensions . format Ċ import Ġcom . example . android dev challenge . domain . extensions . next After Ċ import Ġcom . example . android dev challenge . domain . extensions . previous Before Ċ import Ġcom . example . android dev challenge . domain . models . Sol Ċ import Ġcom . example . android dev challenge . domain . repository . Sol Repository Ċ import Ġcom . example . android dev challenge . ui . theme . My Theme Ċ import Ġcom . example . android dev challenge . ui . to Sol String Ċ Ċ sealed Ġclass ĠSol Page ( val Ġid : ĠInt ) Ġ{ ĊĠĠĠ Ġobject ĠFore cast Ġ: ĠSol Page (- 1 ) ĊĠĠĠ Ġdata Ġclass ĠSol Header ( val Ġsol : ĠSol ) Ġ: ĠSol Page ( sol . number ) Ċ } Ċ Ċ @ Composable Ċ fun ĠSol Menu Component ( ĊĠĠĠ Ġitems : ĠList < Sol Page >, ĊĠĠĠ Ġcurrent : ĠSol Page ?, ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġon Sol Number Selected : Ġ( Int ) Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ{ ĊĊĠĠĠ Ġif Ġ( items . isNotEmpty () Ġ&& Ġcurrent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġitems . next After ( current ) ĊĠĠĠĠĠĠĠ Ġval Ġprevious Ġ= Ġitems . previous Before ( current ) ĊĠĠĠĠĠĠĠ ĠConstraint Layout ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . fill Max Width () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( first Ref , Ġcurrent Ref , Ġnext Ref , Ġdate Ref ) Ġ= Ġcreate Refs () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Constraint Ġ= ĠModifier . constr ain As ( first Ref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom . link To ( parent . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart . link To ( parent . start ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop . link To ( parent . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Constraint Ġ= ĠModifier . constr ain As ( current Ref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom . link To ( parent . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart . link To ( parent . start ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend . link To ( parent . end ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Constr ain Ġ= ĠModifier . constr ain As ( date Ref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop . link To ( current Ref . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart . link To ( current Ref . start ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend . link To ( current Ref . end ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Constraint Ġ= ĠModifier . constr ain As ( next Ref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom . link To ( parent . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend . link To ( parent . end ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop . link To ( parent . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSol Menu Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġfirst Constraint . click able Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Sol Number Selected . invoke ( it . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSol Menu Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Ġ= Ġitems . first Ġ{ Ġit Ġ== Ġcurrent Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġcurrent Constraint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Ġis ĠSol Page . Sol Header ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġcurrent . sol . date . format (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġdate Constr ain , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠMaterial Theme . colors . secondary , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . subtitle 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSol Menu Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġnext Constraint . click able Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Sol Number Selected . invoke ( it . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠSol Menu Model ( model : ĠSol Page , Ġactive : ĠBoolean , Ġmodifier : ĠModifier Ġ= ĠModifier ) Ġ{ ĊĠĠĠ Ġval Ġtext Ġ= Ġwhen Ġ( model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠSol Page . Forecast Ġ-> Ġ" Forecast " ĊĠĠĠĠĠĠĠ Ġis ĠSol Page . Sol Header Ġ-> Ġmodel . sol . number . to Sol String () ĊĠĠĠ Ġ} ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= Ġif Ġ( active ) ĠMaterial Theme . colors . primary Ġelse ĠMaterial Theme . colors . secondary , ĊĠĠĠĠĠĠĠ Ġstyle Ġ= Ġif Ġ( active ) ĠMaterial Theme . typography . h 1 Ġelse ĠMaterial Theme . typography . h 2 , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Preview Ċ @ Composable Ċ fun ĠPreview Sol Menu Component () Ġ{ ĊĠĠĠ Ġval Ġitems Ġ= ĠSol Repository . get Available S ols () ĊĠĠĠ ĠMy Theme Ġ{ ĊĠĠĠĠĠĠĠ ĠSol Menu Component ( items Ġ= Ġitems . map Ġ{ ĠSol Page . Sol Header ( it ) Ġ}, Ġcurrent Ġ= ĠSol Page . Sol Header ( items . last ())) ĊĠĠĠ Ġ} Ċ } Ċ