package Ġcom . google . ad ux . shr ine Ċ Ċ import Ġandroid . content . res . Configuration . UI _ MODE _ N IGHT _ YES Ċ import Ġandroidx . compose . animation .* Ċ import Ġandroidx . compose . animation . core .* Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . material . Content Alpha Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Brush Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . graphics . graphics Layer Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . google . ac comp an ist . in sets . Local Window Insets Ċ import Ġcom . google . ac comp an ist . in sets . status Bars Padding Ċ import Ġcom . google . ad ux . shr ine . ui . theme . Sh r ine P ink 3 0 0 Ċ import Ġcom . google . ad ux . shr ine . ui . theme . Sh r ine Theme Ċ Ċ @ Experimental Animation Api Ċ @ Composable Ċ fun ĠSh r ine App () Ġ{ ĊĠĠĠ Ġval ĠTOP _ APP BAR _ HEIGHT Ġ= Ġ 5 6 ĊĊĠĠĠ Ġvar Ġactive Category Ġby Ġremember Ġ{ Ġmutable State Of ( Category . All ) Ġ} ĊĠĠĠ Ġvar Ġinventory Ġby Ġremember Ġ{ Ġmutable State Of ( Sample Items Data . toList ()) Ġ} ĊĊĠĠĠ Ġvar Ġshow Menu Ġby Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĠĠĠ Ġvar Ġshow Cart Ġby Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĊĠĠĠ Ġvar Ġcart Items Ġby Ġremember Ġ{ Ġmutable State Of ( Sample Items Data . sub List ( from Index Ġ= Ġ 0 , Ġto Index Ġ= Ġ 2 )) Ġ} ĊĊĠĠĠ ĠBox With Constraints ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill MaxSize () ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscreen Transition Ġ= Ġupdate Transition ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget State Ġ= Ġif Ġ( show Menu ) ĠScreen State . Collapsed Ġelse ĠScreen State . Expanded , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ" screen Transition " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġscreen Offset Ġby Ġscreen Transition . animate Dp ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ" screen Offset ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Spec Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScreen State . Expanded Ġis Transition ing To ĠScreen State . Collapsed Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ween ( duration Millis Ġ= Ġ 4 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ween ( duration Millis Ġ= Ġ 3 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnav Bar Height Ġ= ĠLocal Window Insets . current . navigation Bars . bottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠScreen State . Collapsed ) Ġ( max Height . value Ġ- ĠTOP _ APP BAR _ HEIGHT Ġ- Ġnav Bar Height ). dp Ġelse Ġ( TOP _ APP BAR _ HEIGHT ). dp ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠNavigation Surface ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Foreground Ġ= Ġshow Menu , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactive Category Ġ= Ġactive Category , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Menu Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Navigate Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Category Ġ= Ġit ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinventory Ġ= Ġif Ġ( it Ġ== ĠCategory . All ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSample Items Data . toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSample Items Data . filter Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . category Ġ== Ġactive Category ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Menu Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠHome Screen ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. height (( max Height . value Ġ- ĠTOP _ APP BAR _ HEIGHT ). dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. status Bars Padding () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. offset ( y Ġ= Ġscreen Offset ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġinventory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon AddTo Cart Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcart Items Ġ+= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠS cri m Ġfor Ġcart Ġtransition ĊĠĠĠĠĠĠĠ ĠAnimated Visibility ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill MaxSize (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisible Ġ= Ġshow Cart , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenter Ġ= ĠfadeIn ( animation Spec Ġ= Ġt ween ( duration Millis Ġ= Ġ 5 0 0 , Ġeasing Ġ= ĠLinear E asing )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Ġ= Ġfade Out ( animation Spec Ġ= Ġt ween ( duration Millis Ġ= Ġ 5 0 0 , Ġeasing Ġ= ĠLinear E asing )) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . background ( Sh r ine P ink 3 0 0 . copy ( alpha Ġ= Ġ 0 . 8 7 f ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠCart ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . align ( Alignment . Bottom End ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġcart Items , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpanded Ġ= Ġshow Cart , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhidden Ġ= Ġshow Menu , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth Ġ= ĠmaxWidth , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxHeight Ġ= ĠmaxHeight , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Remove Item Ġ= Ġ{ Ġindex ToRemove Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcart Items Ġ= Ġcart Items . filter Indexed Ġ{ Ġidx , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidx Ġ!= Ġindex ToRemove ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Cart Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠAnimated Visibility ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . align ( Alignment . Bottom Center ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisible Ġ= Ġshow Cart , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenter Ġ= ĠfadeIn ( animation Spec Ġ= Ġt ween ( duration Millis Ġ= Ġ 1 5 0 , Ġdelay Millis Ġ= Ġ 1 5 0 , Ġeasing Ġ= ĠLinear E asing )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Ġ= Ġfade Out ( animation Spec Ġ= Ġt ween ( duration Millis Ġ= Ġ 1 1 7 , Ġeasing Ġ= ĠLinear E asing )) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġby Ġtransition . animate Float ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Spec Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnter Exit State . Visible Ġis Transition ing To ĠEnter Exit State . Post Exit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ween ( duration Millis Ġ= Ġ 1 0 0 , Ġeasing Ġ= ĠFast Out Linear In E asing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ween ( duration Millis Ġ= Ġ 2 5 0 , Ġdelay Millis Ġ= Ġ 2 5 0 , Ġeasing Ġ= ĠLinear Out Slow In E asing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ" scale " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠEnter Exit State . Visible ) Ġ 1 f Ġelse Ġ 0 . 8 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs cri m Alpha Ġby Ġtransition . animate Float ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ" scri m Alpha ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Spec Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ween ( duration Millis Ġ= Ġ 1 5 0 , Ġdelay Millis Ġ= Ġ 4 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠEnter Exit State . Visible ) ĠContent Alpha . medium Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCheckout Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. graphics Layer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Ġ= Ġscale ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Ġ= Ġscale ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBr ush . vertical Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolors Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . Transparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Theme . colors . surface . copy ( alpha Ġ= Ġs cri m Alpha ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview ( name Ġ= Ġ" Light Ġtheme ", Ġwidth Dp Ġ= Ġ 3 6 0 , Ġheight Dp Ġ= Ġ 6 4 0 ) Ċ @ Preview ( name Ġ= Ġ" Dark Ġtheme ", Ġwidth Dp Ġ= Ġ 3 6 0 , Ġheight Dp Ġ= Ġ 6 4 0 , Ġui Mode Ġ= ĠUI _ MODE _ N IGHT _ YES ) Ċ @ Experimental Animation Api Ċ @ Composable Ċ fun ĠSh r ine App Preview () Ġ{ ĊĠĠĠ ĠSh r ine Theme Ġ{ ĊĠĠĠĠĠĠĠ ĠSh r ine App () ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġenum Ġclass ĠScreen State Ġ{ ĊĠĠĠ ĠCol lapsed , ĊĠĠĠ ĠEx pan ded Ċ }