package Ġdev . john ore illy . star w ars . android App Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . activity . Component Activity Ċ import Ġandroidx . activity . compose . setContent Ċ import Ġandroidx . compose . foundation . lazy . Lazy Column Ċ import Ġandroidx . compose . foundation . lazy . items Ċ import Ġandroidx . compose . material . Bottom Navigation Ċ import Ġandroidx . compose . material . Bottom Navigation Item Ċ import Ġandroidx . compose . material . Divider Ċ import Ġandroidx . compose . material . Experimental Material Api Ċ import Ġandroidx . compose . material . Icon Ċ import Ġandroidx . compose . material . ListItem Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Sca ffold Ċ import Ġandroidx . compose . material . Surface Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . material . Top AppBar Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . La unched Effect Ċ import Ġandroidx . compose . runtime . collect As State Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . remember Ċ 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 . core . view . Window Compat . set Decor Fits System Windows Ċ import Ġandroidx . navigation . Nav Host Controller Ċ 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 Ġcom . google . ac comp an ist . in sets . Provide Window Insets Ċ import Ġcom . google . ac comp an ist . in sets . navigation Bars Padding Ċ import Ġcom . google . ac comp an ist . in sets . status Bars Padding Ċ import Ġdev . john ore illy . star w ars . android App . theme . Star W ars Theme Ċ import Ġdev . john ore illy . star w ars . fragment . Film Fragment Ċ import Ġdev . john ore illy . star w ars . fragment . Person Fragment Ċ import Ġdev . john ore illy . star w ars . shared . Star W ars Repository ĊĊ Ċ class ĠMainActivity Ġ: ĠComponent Activity () Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Decor Fits System Windows ( window , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġset Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStar W ars Theme Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvide Window Insets Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Layout () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ sealed Ġclass ĠScreen ( val Ġtitle : ĠString ) Ġ{ ĊĠĠĠ Ġobject ĠPerson List Ġ: ĠScreen (" Person ĠList ") ĊĠĠĠ Ġobject ĠFil m List Ġ: ĠScreen (" Film ĠList ") Ċ } Ċ Ċ data Ġclass ĠBottom Navigation item ( val Ġroute : ĠString , Ġval Ġicon : ĠInt , Ġval Ġicon Content Description : ĠString ) Ċ Ċ val Ġbottom Navigation Items Ġ= ĠlistOf ( ĊĠĠĠ ĠBottom Navigation item ( Screen . Person List . title , ĠR . drawable . ic _ face , ĠScreen . Person List . title ), ĊĠĠĠ ĠBottom Navigation item ( Screen . Film List . title , ĠR . drawable . ic _ movie , ĠScreen . Film List . title ) Ċ ) Ċ Ċ @ Composable Ċ fun ĠMain Layout () Ġ{ ĊĠĠĠ Ġval Ġnav Controller Ġ= Ġremember Nav Controller () ĊĠĠĠ Ġval Ġrepo Ġ= Ġremember Star W ars Repository () ĊĊĠĠĠ Ġval Ġpeople Ġby Ġrepo . people . collect As State ( emptyList ()) ĊĠĠĠ Ġval Ġfilm List Ġby Ġrepo . fil ms . collect As State ( emptyList ()) ĊĊĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠ Ġtop Bar Ġ= Ġ{ ĠStar W ars Top AppBar (" Star ĠW ars ") Ġ}, ĊĠĠĠĠĠĠĠ Ġbottom Bar Ġ= Ġ{ ĠStar W ars Bottom Navigation ( nav Controller ) Ġ} ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠNav Host ( nav Controller , Ġstart Destination Ġ= ĠScreen . Person List . title ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ( Screen . Person List . title ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPeople List ( people ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ( Screen . Film List . title ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFil m List ( film List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun Ġremember Star W ars Repository (): ĠStar W ars Repository Ġ{ ĊĠĠĠ Ġval Ġrepo Ġ= Ġremember Ġ{ ĠStar W ars Repository () Ġ} ĊĠĠĠ ĠLa unched Effect ( Unit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepo . prefetch () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġrepo Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠStar W ars Top AppBar ( title : ĠString ) Ġ{ ĊĠĠĠ ĠSurface ( color Ġ= ĠMaterial Theme . colors . primary ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTop AppBar ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ ĠText ( title ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠColor . Transparent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelevation Ġ= Ġ 0 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . status Bars Padding () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠStar W ars Bottom Navigation ( nav Controller : ĠNav Host Controller ) Ġ{ ĊĊĠĠĠ ĠBottom Navigation ( modifier Ġ= ĠModifier . navigation Bars Padding ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Back Stack Entry Ġby Ġnav Controller . current Back Stack Entry As State () ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Route Ġ= Ġnav Back Stack Entry ?. destination ?. route ĊĊĠĠĠĠĠĠĠĠ Ġbottom Navigation Items . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Navigation Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġ{ ĠIcon ( p ainter Resource ( item . icon ), Ġcontent Description Ġ= Ġitem . icon Content Description ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġcurrent Route Ġ== Ġitem . route , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( item . route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Up To ( nav Controller . graph . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Single Top Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠPeople List ( people : ĠList < Person Fragment >) Ġ{ ĊĠĠĠ ĠLazy Column Ġ{ ĊĠĠĠĠĠĠĠ Ġitems ( people ) Ġ{ Ġperson Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerson View ( person ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Opt In ( Experimental Material Api :: class ) Ċ @ Composable Ċ fun ĠPerson View ( person : ĠPerson Fragment ) Ġ{ ĊĠĠĠ ĠListItem ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ{ ĠText ( person . name , Ġstyle Ġ= ĠMaterial Theme . typography . h 6 ) Ġ}, ĊĠĠĠĠĠĠĠ Ġsecondary Text Ġ= Ġ{ ĠText ( person . home world . name , Ġstyle Ġ= ĠMaterial Theme . typography . subtitle 1 , Ġcolor Ġ= ĠColor . Dark Gray ) Ġ} ĊĠĠĠ Ġ) ĊĠĠĠ ĠDiv ider () Ċ } ĊĊ Ċ @ Composable Ċ fun ĠFil m List ( film List : ĠList < Film Fragment >) Ġ{ ĊĠĠĠ ĠLazy Column Ġ{ ĊĠĠĠĠĠĠĠ Ġitems ( items Ġ= Ġfilm List , Ġitem Content Ġ= Ġ{ Ġfilm Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFil m View ( film ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ @ Opt In ( Experimental Material Api :: class ) Ċ @ Composable Ċ fun ĠFil m View ( film : ĠFil m Fragment ) Ġ{ ĊĠĠĠ ĠListItem ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ{ ĠText ( film . title , Ġstyle Ġ= ĠMaterial Theme . typography . h 6 ) Ġ}, ĊĠĠĠĠĠĠĠ Ġsecondary Text Ġ= Ġ{ ĠText ( film . director , Ġstyle Ġ= ĠMaterial Theme . typography . subtitle 1 , Ġcolor Ġ= ĠColor . Dark Gray ) Ġ} ĊĠĠĠ Ġ) ĊĠĠĠ ĠDiv ider () Ċ }