/* Ċ Ġ* Ġ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 . screen Ċ Ċ import Ġandroidx . compose . material . Bottom Navigation Ċ import Ġandroidx . compose . material . Bottom Navigation Item Ċ import Ġandroidx . compose . material . Icon Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Sca ffold Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled . Account Circle Ċ import Ġandroidx . compose . material . icons . filled . Favorite Border Ċ import Ġandroidx . compose . material . icons . filled . Home Ċ import Ġandroidx . compose . material . icons . filled . Launch Ċ import Ġandroidx . compose . material . icons . filled . Login Ċ import Ġandroidx . compose . material . icons . filled . Shopping Cart Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . ui . graphics . vector . Image Vector Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . navigation . compose . KEY _ ROUTE Ċ import Ġandroidx . navigation . compose . Nav Host Ċ import Ġandroidx . navigation . compose . comp osable Ċ import Ġandroidx . navigation . compose . current Back Stack Entry As State Ċ import Ġandroidx . navigation . compose . navigate Ċ import Ġandroidx . navigation . compose . remember Nav Controller Ċ import Ġcom . example . android dev challenge . ui . theme . My Theme Ċ Ċ sealed Ġclass ĠScreen ( val Ġroute : ĠString , Ġval Ġlabel : ĠString , Ġval Ġicon : ĠImage Vector ) Ġ{ ĊĠĠĠ Ġobject ĠHome Ġ: ĠScreen (" home ", Ġ" Home ", ĠIcons . Default . Home ) ĊĠĠĠ Ġobject ĠProfile Ġ: ĠScreen (" profile ", Ġ" Profile ", ĠIcons . Default . Account Circle ) ĊĠĠĠ Ġobject ĠF avorites Ġ: ĠScreen (" favorites ", Ġ" F avorites ", ĠIcons . Default . Favorite Border ) ĊĠĠĠ Ġobject ĠCart Ġ: ĠScreen (" cart ", Ġ" Cart ", ĠIcons . Default . Shopping Cart ) ĊĠĠĠ Ġobject ĠLogin Ġ: ĠScreen (" login ", Ġ" Login ", ĠIcons . Default . Login ) ĊĠĠĠ Ġobject ĠWelcome Ġ: ĠScreen (" welcome ", Ġ" Welcome ", ĠIcons . Default . Launch ) Ċ } Ċ Ċ val Ġitems Ġ= ĠlistOf ( ĊĠĠĠ ĠScreen . Home , ĊĠĠĠ ĠScreen . F avorites , ĊĠĠĠ ĠScreen . Profile , ĊĠĠĠ ĠScreen . Cart Ċ ) Ċ Ċ @ Composable Ċ fun ĠMain () Ġ{ ĊĠĠĠ Ġval Ġnav Controller Ġ= Ġremember Nav Controller () ĊĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠ Ġbottom Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Navigation ( backgroundColor Ġ= ĠMaterial Theme . colors . primary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnav Back Stack Entry Ġby Ġnav Controller . current Back Stack Entry As State () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Route Ġ= Ġnav Back Stack Entry ?. arguments ?. getString ( KEY _ ROUTE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . forEach Ġ{ Ġscreen Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Navigation Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( image Vector Ġ= Ġscreen . icon , Ġscreen . label ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ{ ĠText ( screen . label ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġcurrent Route Ġ== Ġscreen . route , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( screen . route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Up To Ġ= Ġnav Controller . graph . start Destination ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Single Top Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Content Color Ġ= ĠMaterial Theme . colors . on Primary ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠNav Host ( nav Controller , Ġstart Destination Ġ= ĠScreen . Home . route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ( Screen . Home . route ) Ġ{ ĠHome ( nav Controller ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ( Screen . F avorites . route ) Ġ{ ĠF avorites ( nav Controller ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ( Screen . Profile . route ) Ġ{ ĠProfile ( nav Controller ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ( Screen . Cart . route ) Ġ{ ĠCart ( nav Controller ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview ( width Dp Ġ= Ġ 3 6 0 , Ġheight Dp Ġ= Ġ 6 4 0 ) Ċ @ Composable Ċ fun ĠMain Preview Light () Ġ{ ĊĠĠĠ ĠMy Theme Ġ{ ĊĠĠĠĠĠĠĠ ĠMain () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview ( width Dp Ġ= Ġ 3 6 0 , Ġheight Dp Ġ= Ġ 6 4 0 ) Ċ @ Composable Ċ fun ĠMain Preview Dark () Ġ{ ĊĠĠĠ ĠMy Theme ( dark Theme Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMain () ĊĠĠĠ Ġ} Ċ } Ċ