/* Ċ Ġ* Ġ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 . view Ċ Ċ import Ġandroidx . compose . foundation . Experimental Foundation Api Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Padding Values Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . foundation . lazy . Lazy Column Ċ import Ġandroidx . compose . foundation . lazy . items Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Outlined TextField Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . save able . remember Save able Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . text . style . Text Align Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . example . android dev challenge . R Ċ import Ġcom . example . android dev challenge . domain . model . P up py Ċ import Ġcom . example . android dev challenge . ui . theme . My Theme Ċ import Ġcom . example . android dev challenge . ui . theme . typography Ċ Ċ @ Opt In ( Experimental Foundation Api :: class ) Ċ @ Composable Ċ fun ĠP up p ies List ( pup p ies : ĠList < P up py >, Ġon P up py Selected : Ġ( uuid : ĠString ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġ( filter , Ġset Filter ) Ġ= Ġremember Save able Ġ{ Ġmutable State Of ("") Ġ} ĊĠĠĠ Ġval Ġfiltered P up p ies Ġ= Ġfilter . take If Ġ{ Ġit . isNotBlank () Ġ} ?. let Ġ{ Ġactive Filter Ġ-> ĊĠĠĠĠĠĠĠ Ġp up p ies . filter Ġ{ Ġit . bre ed . contains ( active Filter , Ġignore Case Ġ= Ġtrue ) Ġ} ĊĠĠĠ Ġ} Ġ?: Ġp up p ies ĊĠĠĠ ĠMy Theme Ġ{ ĊĠĠĠĠĠĠĠ ĠLazy Column ( content Padding Ġ= ĠPadding Values ( bottom Ġ= Ġ 1 6 . dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsticky Header Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP up p ies List Header ( filter , Ġset Filter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered P up p ies . take If Ġ{ Ġit . isNotEmpty () Ġ} ?. let Ġ{ Ġresult List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems ( result List ) Ġ{ Ġp up py Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP up py ListItem ( pup py Ġ= Ġp up py , Ġon P up py Selected Ġ= Ġon P up py Selected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġkotlin . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEmpty P up p ies List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview Ċ @ Composable Ċ fun ĠEmpty P up p ies List () Ġ{ ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( id Ġ= ĠR . string . empty _ pup p ies ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġty pography . h 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. align ( Alignment . Center ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠP up p ies List Header ( filter : ĠString , Ġset Filter : Ġ( String ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= ĠMaterial Theme . colors . surface ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 8 . dp ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġstring Resource ( id Ġ= ĠR . string . welcome ), Ġstyle Ġ= Ġty pography . h 5 ) ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( id Ġ= ĠR . string . welcome _ body ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġty pography . body 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( top Ġ= Ġ 8 . dp ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠOut lined TextField ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġfilter , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġset Filter , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġstring Resource ( id Ġ= ĠR . string . pup p ies _ filter _ placeholder )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Line Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( vertical Ġ= Ġ 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ