package Ġcom . reg gar . movies compose . mov iel ist . presentation Ċ Ċ import Ġandroidx . compose . foundation . Experimental Foundation Api Ċ import Ġandroidx . compose . foundation . Image Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . lazy . Grid Cells Ċ import Ġandroidx . compose . foundation . lazy . Lazy Vertical Grid Ċ import Ġandroidx . compose . foundation . lazy . items Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . runtime . save able . remember Save able Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . clip Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . layout . Content Scale Ċ import Ġandroidx . compose . ui . platform . test Tag Ċ import Ġandroidx . compose . ui . res . dimension Resource Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . text . style . Text Align Ċ import Ġandroidx . compose . ui . text . style . Text Overflow Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . lifecycle . view model . compose . viewModel Ċ import Ġcom . reg gar . movies compose . R Ċ import Ġcom . reg gar . movies compose . mov iel ist . data . model . Movie Ċ import Ġdev . chr is ban es . ac comp an ist . glide . G lide Image Ċ Ċ @ Composable Ċ fun ĠMovie Screen ( ĊĠĠĠ ĠviewModel : ĠMovie ViewModel Ġ= ĠviewModel () Ċ ) Ġ{ ĊĠĠĠ Ġval Ġstate Ġby ĠviewModel . state ĊĊĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠ Ġtop Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Top Bar Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Event ( Movie Event . On Search Changed ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMovie State . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Loading Body () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMovie State . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Error Body () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMovie State . Content Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Content Body (( state Ġas ĠMovie State . Content ). movies ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview Ċ @ Composable Ċ fun ĠMovie Top Bar ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġon Search TextChanged : Ġ( search Text : ĠString ) Ġ-> ĠUnit Ġ= Ġ{}, Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġsearch Term Ġby Ġremember Save able Ġ{ Ġmutable State Of ("") Ġ} ĊĊĠĠĠ ĠSurface ( ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠMaterial Theme . colors . primary , ĊĠĠĠĠĠĠĠ Ġelevation Ġ= Ġdimension Resource ( R . dim en . gap _ medium ), ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTextField ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġsearch Term , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplaceholder Ġ= Ġ{ ĠText ( string Resource ( R . string . movie _ list _ search _ hint )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Line Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . test Tag (" search Bar ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( dimension Resource ( R . dim en . gap _ medium )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Term Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Search TextChanged ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠMovie Loading Body ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ{ ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . fill MaxSize (), ĊĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCircular Progress Indicator ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . test Tag (" spinner ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠMovie Error Body ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ{ ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . fill MaxSize (), ĊĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( string Resource ( R . string . movie _ list _ error )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Opt In ( Experimental Foundation Api :: class ) Ċ @ Composable Ċ fun ĠMovie Content Body ( ĊĠĠĠ Ġmovies : ĠList < Movie >, ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ{ ĊĠĠĠ ĠLazy Vertical Grid ( ĊĠĠĠĠĠĠĠ Ġcells Ġ= ĠGrid Cells . Adaptive ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdimension Resource ( R . dim en . movie _ grid _ cell _ min _ size ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġcontent Padding Ġ= ĠPadding Values ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdimension Resource ( R . dim en . gap _ small ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems ( movies ) Ġ{ Ġmovie Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Card ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( dimension Resource ( R . dim en . gap _ small )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠMovie Card ( ĊĠĠĠ Ġmovie : ĠMovie , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ{ ĊĠĠĠ ĠCard ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Top End ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Post er ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Url Ġ= Ġmovie . poster , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġmovie . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġmovie . genre , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( dimension Resource ( R . dim en . gap _ small )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . body 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverflow Ġ= ĠText Overflow . El lipsis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( horizontal Ġ= Ġdimension Resource ( R . dim en . gap _ medium )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( top Ġ= Ġdimension Resource ( R . dim en . gap _ medium )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . year . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . body 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( horizontal Ġ= Ġdimension Resource ( R . dim en . gap _ medium )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( bottom Ġ= Ġdimension Resource ( R . dim en . gap _ medium )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠMovie Tag ( ĊĠĠĠ Ġtext : ĠString , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ{ ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . clip ( Material Theme . shapes . small ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Material Theme . colors . secondary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 4 . dp ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . over line . copy ( color Ġ= ĠMaterial Theme . colors . on Secondary ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġconst Ġval ĠMOV IE _ POST ER _ RATIO Ġ= Ġ 0 . 6 9 5 f Ċ Ċ @ Composable Ċ fun ĠMovie Post er ( ĊĠĠĠ Ġposter Url : ĠString , ĊĠĠĠ Ġtitle : ĠString , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ{ ĊĠĠĠ Ġval Ġimage Ġ= Ġpainter Resource ( R . drawable . ic _ baseline _ error _ outline _ 2 4 ) ĊĠĠĠ ĠG lide Image ( ĊĠĠĠĠĠĠĠ Ġdata Ġ= Ġposter Url , ĊĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġtitle , ĊĠĠĠĠĠĠĠ Ġcontent Scale Ġ= ĠContent Scale . Crop , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. aspect Ratio ( MOV IE _ POST ER _ RATIO , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Color . Light Gray ), ĊĠĠĠĠĠĠĠ Ġerror Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Ġ= Ġimage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġstring Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . movie _ poster _ content _ description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . width ( dimension Resource ( R . dim en . movie _ poster _ error _ icon _ size )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. aspect Ratio ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ }