/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// 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 Ġandroidx . ui . demos Ċ Ċ import Ġandroidx . compose . Composable Ċ import Ġandroidx . compose . mutable State Of Ċ import Ġandroidx . ui . animation . Cross fade Ċ import Ġandroidx . ui . core . Text Ċ Ċ import Ġandroidx . ui . foundation . Icon Ċ import Ġandroidx . ui . foundation . Vertical Scroller Ċ import Ġandroidx . ui . layout . Column Ċ import Ġandroidx . ui . layout . Layout Align Ċ import Ġandroidx . ui . layout . Layout Height Ċ import Ġandroidx . ui . material . IconButton Ċ import Ġandroidx . ui . material . ListItem Ċ import Ġandroidx . ui . material . Sca ffold Ċ import Ġandroidx . ui . material . Top AppBar Ċ import Ġandroidx . ui . material . icons . Icons Ċ import Ġandroidx . ui . material . icons . filled . Arrow Back Ċ import Ġandroidx . ui . material . icons . filled . Search Ċ import Ġandroidx . ui . material . icons . filled . Settings Ċ import Ġandroidx . ui . unit . dp Ċ Ċ @ Composable Ċ fun ĠDemo App ( ĊĠĠĠ Ġcurrent Demo : ĠDemo , ĊĠĠĠ Ġback Stack Title : ĠString , ĊĠĠĠ Ġis Filtering : ĠBoolean , ĊĠĠĠ ĠonStart Filtering : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon End Filtering : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon Navigate To Demo : Ġ( Demo ) Ġ-> ĠUnit , ĊĠĠĠ Ġcan Navigate Up : ĠBoolean , ĊĠĠĠ Ġon Navigate Up : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġlaunch Settings : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġnavigation Icon Ġ= Ġ(@ Composable Ġ{ ĊĠĠĠĠĠĠĠ ĠIcon Button ( onClick Ġ= Ġon Navigate Up ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( Icons . Filled . Arrow Back ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}). take If Ġ{ Ġcan Navigate Up Ġ} ĊĊĠĠĠ Ġvar Ġfilter Text Ġby Ġmutable State Of ("") ĊĊĠĠĠ ĠScaffold ( top AppBar Ġ= Ġ{ ĊĠĠĠĠĠĠĠ ĠDemo AppBar ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġback Stack Title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Icon Ġ= Ġnavigation Icon , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Settings Ġ= Ġlaunch Settings , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Filtering Ġ= Ġis Filtering , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Text Ġ= Ġfilter Text , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Filter Ġ= Ġ{ Ġfilter Text Ġ= Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonStart Filtering Ġ= ĠonStart Filtering , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon End Filtering Ġ= Ġon End Filtering ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ ĠDemo Content ( current Demo , Ġis Filtering , Ġfilter Text , Ġon Navigate To Demo ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠDemo Content ( ĊĠĠĠ Ġcurrent Demo : ĠDemo , ĊĠĠĠ Ġis Filtering : ĠBoolean , ĊĠĠĠ Ġfilter Text : ĠString , ĊĠĠĠ Ġon Navigate : Ġ( Demo ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠCross fade ( is Filtering Ġto Ġcurrent Demo ) Ġ{ Ġ( filtering , Ġdemo ) Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( filtering ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDemo Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch able Dem os Ġ= ĠAll Dem os Category . all Launch able Dem os (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Text Ġ= Ġfilter Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Navigate Ġ= Ġon Navigate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDisplay Demo ( demo , Ġon Navigate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠDisplay Demo ( demo : ĠDemo , Ġon Navigate : Ġ( Demo ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġwhen Ġ( demo ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠActivity Demo < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġshould Ġnever Ġget Ġhere Ġas Ġactivity Ġde mos Ġare Ġnot Ġadded Ġto Ġthe Ġback stack */ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠComp osable Demo Ġ-> Ġdemo . content () ĊĠĠĠĠĠĠĠ Ġis ĠDemo Category Ġ-> ĠDisplay Demo Category ( demo , Ġon Navigate ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠDisplay Demo Category ( category : ĠDemo Category , Ġon Navigate : Ġ( Demo ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠVertical Scroller Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . demos . forEach Ġ{ Ġdemo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠListItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠLayout Height ( 5 6 . dp ) Ġ+ ĠLayout Align . Center , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġdemo . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Navigate ( demo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠDemo AppBar ( ĊĠĠĠ Ġtitle : ĠString , ĊĠĠĠ Ġnavigation Icon : Ġ@ Composable () Ġ(() Ġ-> ĠUnit )? , ĊĠĠĠ Ġis Filtering : ĠBoolean , ĊĠĠĠ Ġfilter Text : ĠString , ĊĠĠĠ Ġon Filter : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ ĠonStart Filtering : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon End Filtering : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġlaunch Settings : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( is Filtering ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFilter AppBar ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Text Ġ= Ġfilter Text , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Filter Ġ= Ġon Filter , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClose Ġ= Ġon End Filtering ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠTop AppBar ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ ĠText ( title ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Icon Ġ= Ġnavigation Icon , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Bar Icons . Filter ( onClick Ġ= ĠonStart Filtering ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Bar Icons . Settings ( onClick Ġ= Ġlaunch Settings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġobject ĠApp Bar Icons Ġ{ ĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġfun ĠFilter ( onClick : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠIcon Button ( onClick Ġ= ĠonClick ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( Icons . Filled . Search ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġfun ĠSettings ( onClick : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠIcon Button ( onClick Ġ= ĠonClick ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( Icons . Filled . Settings ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ