package Ġcom . corn ell app dev . sco op . ui . navigation Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . compose . animation . Animated Visibility Ċ import Ġandroidx . compose . animation . Experimental Animation Api Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . material . Bottom Navigation Ċ import Ġandroidx . compose . material . Bottom Navigation Item Ċ import Ġandroidx . compose . material . Icon Ċ import Ġandroidx . compose . material . Sca ffold Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . save able . remember Save able Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . navigation . Nav Host Controller Ċ import Ġandroidx . navigation . Nav Type Ċ 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 . remember Nav Controller Ċ import Ġandroidx . navigation . nav Argument Ċ import Ġandroidx . navigation . nav Deep Link Ċ import Ġcom . corn ell app dev . sco op . ui . screens . Home Screen Ċ import Ġcom . corn ell app dev . sco op . ui . screens . Post Screen Ċ import Ġcom . corn ell app dev . sco op . ui . screens . Profile Screen Ċ import Ġcom . corn ell app dev . sco op . ui . screens . Search Screen Ċ import Ġcom . google . ac comp an ist . pager . Experimental Pager Api Ċ Ċ /** ĠThis Ġcomp osable Ġmakes Ġthe Ġbottom Ġnav Ġbar Ġand Ġbase Ġlayer Ġon Ġwhich Ġdifferent Ġscreens Ġare Ġshown . Ġ*/ Ċ @ Composable Ċ fun ĠMain Screen ( Ċ ) Ġ{ ĊĠĠĠ Ġval Ġnav Controller Ġ= Ġremember Nav Controller () ĊĠĠĠ Ġnav Controller . current Back Stack Entry As State () ĊĠĠĠ Ġval Ġbottom Nav Tab List Ġ= ĠBottom Nav Tab . bottom Nav Tab List ĊĠĠĠ Ġval Ġ( show Bottom Bar , ĠsetShow Bottom Bar ) Ġ= Ġremember Save able Ġ{ Ġmutable State Of ( true ) Ġ} ĊĊĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠ Ġbottom Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnimated Visibility ( visible Ġ= Ġshow Bottom Bar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Nav ( nav Controller Ġ= Ġnav Controller , Ġtab Items Ġ= Ġbottom Nav Tab List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ġ{ Ġinner Padding Ġ-> ĊĠĠĠĠĠĠĠ ĠMain Screen Navigation Configurations ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller Ġ= Ġnav Controller , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( inner Padding ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetShow Bottom Bar Ġ= ĠsetShow Bottom Bar ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠThis Ġdefines Ġthe Ġbehavior Ġand Ġlook Ġof Ġeach Ġtab . Ċ Ġ*/ Ċ @ Composable Ċ fun ĠBottom Nav ( nav Controller : ĠNav Host Controller , Ġtab Items : ĠList < Bottom Nav Tab >) Ġ{ ĊĠĠĠ ĠBottom Navigation ( backgroundColor Ġ= ĠColor . White ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Route Ġ= Ġcurrent Route ( nav Controller ) ĊĠĠĠĠĠĠĠ Ġtab Items . forEach Ġ{ Ġscreen Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Navigation Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Ġ= Ġpainter Resource ( id Ġ= Ġif Ġ( current Route Ġ== Ġscreen . route ) Ġscreen . selected Icon Id Ġelse Ġscreen . un selected Icon Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġscreen . content Description ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġcurrent Route Ġ== Ġscreen . route , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Content Color Ġ= ĠColor . Unspecified , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun selected Content Color Ġ= ĠColor . Unspecified , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 1 0 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Route Ġ!= Ġscreen . route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( screen . route ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠMaps Ġthe ĠNav Host Ġroutes Ġto Ġvarious Ġscreens Ġin Ġthe Ġapp . Ċ Ġ*/ Ċ @ Opt In ( ĊĠĠĠ ĠExperimental Animation Api :: class , ĠExperimental Pager Api :: class Ċ ) Ċ @ Composable Ċ fun ĠMain Screen Navigation Configurations ( ĊĠĠĠ Ġnav Controller : ĠNav Host Controller , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ ĠsetShow Bottom Bar : Ġ( Boolean ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠNav Host ( ĊĠĠĠĠĠĠĠ Ġnav Controller Ġ= Ġnav Controller , ĊĠĠĠĠĠĠĠ Ġstart Destination Ġ= ĠRoutes . Home . route , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcomp osable ( Routes . Home . route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetShow Bottom Bar ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHome Screen ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Trip Click Ġ= Ġ{ Ġidentifier Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Trip ( nav Controller , Ġidentifier ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Post New R ide Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Post Flow ( nav Controller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcomp osable ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoutes . Home Show Trip Posted . route , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument (" show _ trip _ posted ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠNav Type . Bool Type ; ĠdefaultValue Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetShow Bottom Bar ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshow Trip Posted Ġ= Ġentry . arguments ?. getBoolean (" show _ trip _ posted ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHome Screen ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Trip Click Ġ= Ġ{ Ġidentifier Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Trip ( nav Controller , Ġidentifier ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Post New R ide Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Post Flow ( nav Controller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Trip Posted Ġ= Ġshow Trip Posted !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcomp osable ( Routes . Search . route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetShow Bottom Bar ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Screen () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcomp osable ( Routes . Profile . route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetShow Bottom Bar ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Screen () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcomp osable ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoutes . View . route , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument (" trip _ identifier ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠNav Type . StringType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdds Ġdeep Ġlinking Ġin Ġcase Ġwe Ġwant Ġto Ġadd Ġsharing Ġand Ġpulling Ġup Ġa Ġ ride Ġautomatically . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeep Links Ġ= ĠlistOf ( nav Deep Link Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuri Pattern Ġ= Ġ" r ally /${ Routes . View . route }/{ trip _ identifier }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}), ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPlace holder Ġfor Ġevent ual Ġretrieving Ġtrip Ġlogic ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġval Ġtrip Identifier Ġ= Ġentry . arguments ?. getString (" trip _ identifier ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġtrip Ġinformation Ġusing Ġwhatever Ġidentifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBuild Ġcomp osable Ġfor Ġdisplaying Ġtrip ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcomp osable ( Routes . Post . route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetShow Bottom Bar ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPost Screen ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Post New Trip Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Trip ", Ġit . arrival Location !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun Ġcurrent Route ( nav Controller : ĠNav Host Controller ): ĠString ? Ġ{ ĊĠĠĠ Ġval Ġnav Back Stack Entry Ġby Ġnav Controller . current Back Stack Entry As State () ĊĠĠĠ Ġreturn Ġnav Back Stack Entry ?. destination ?. route Ċ } Ċ Ċ private Ġfun Ġnavigate To Trip ( ĊĠĠĠ Ġnav Controller : ĠNav Host Controller , ĊĠĠĠ Ġtrip _ identifier : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġnav Controller . navigate ("${ Routes . View . route }/ $ trip _ identifier ") Ċ } Ċ Ċ private Ġfun Ġnavigate To Post Flow ( ĊĠĠĠ Ġnav Controller : ĠNav Host Controller , Ċ ) Ġ{ ĊĠĠĠ Ġnav Controller . navigate ( Routes . Post . route ) Ċ } Ċ Ċ private Ġconst Ġval ĠIn active Tab Opacity Ġ= Ġ 0 . 6 0 f