@ file : Opt In ( Gl ance Internal Api :: class ) Ċ /* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġ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 . gl ance . app widget . layout Ċ Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Compose Node Ċ import Ġandroidx . gl ance . App lier Ċ import Ġandroidx . gl ance . Emit table With Children Ċ import Ġandroidx . gl ance . Gl ance Internal Api Ċ import Ġandroidx . gl ance . Modifier Ċ import Ġandroidx . gl ance . layout . Alignment Ċ Ċ /** Ċ Ġ* ĠA Ġvertical Ġscrolling Ġlist Ġthat Ġonly Ġl ays Ġout Ġthe Ġcurrently Ġvisible Ġitems . ĠThe Ġ[ content ] Ġblock Ċ Ġ* Ġdefines Ġa ĠDSL Ġwhich Ġallows Ġyou Ġto Ġemit Ġdifferent Ġlist Ġitems . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmodifier Ġthe Ġmodifier Ġto Ġapply Ġto Ġthis Ġlayout Ċ Ġ* Ġ@ param Ġhorizontal Alignment Ġthe Ġhorizontal Ġalignment Ġapplied Ġto Ġthe Ġitems . Ċ Ġ* Ġ@ param Ġcontent Ġa Ġblock Ġwhich Ġdescribes Ġthe Ġcontent . ĠIn side Ġthis Ġblock Ġyou Ġcan Ġuse Ġmethods Ġlike Ċ Ġ* Ġ[ Lazy List Scope . item ] Ġto Ġadd Ġa Ġsingle Ġitem Ġor Ġ[ Lazy List Scope . items ] Ġto Ġadd Ġa Ġlist Ġof Ġitems . Ċ Ġ* Ċ Ġ* ĠTODO ( b / 1 9 8 6 1 8 3 5 9 ): Ġapply Ġmodifiers Ġfor Ġcolumn Ġand Ġcolumn Ġitems , Ġsupport Ġalignment , Ġclick Ġhandling Ċ Ġ*/ Ċ @ Composable Ċ public Ġfun ĠLazy Column ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġhorizontal Alignment : ĠAlignment . Horizontal Ġ= ĠAlignment . Start , ĊĠĠĠ Ġcontent : ĠLazy List Scope . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠCompose Node < Emit table Lazy Column , ĠApp lier >( ĊĠĠĠĠĠĠĠ Ġfactory Ġ= Ġ:: Emit table Lazy Column , ĊĠĠĠĠĠĠĠ Ġupdate Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set ( modifier ) Ġ{ Ġthis . modifier Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set ( horizontal Alignment ) Ġ{ Ġthis . horizontal Alignment Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġcontent Ġ= Ġapply List Scope ( content ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ private Ġfun Ġapply List Scope ( content : ĠLazy List Scope . () Ġ-> ĠUnit ): Ġ@ Composable Ġ() Ġ-> ĠUnit Ġ{ ĊĠĠĠ Ġvar Ġnext Implicit ItemId Ġ= ĠReserved ItemId Range End ĊĠĠĠ Ġval Ġitem List Ġ= Ġmutable ListOf < Pair < Long ?, Ġ@ Composable ĠLazy Item Scope . () Ġ-> ĠUnit >>() ĊĠĠĠ Ġval Ġlist Scope Impl Ġ= Ġobject Ġ: ĠLazy List Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġitem ( itemId : ĠLong , Ġcontent : Ġ@ Composable ĠLazy Item Scope . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( itemId Ġ== ĠLazy List Scope . Unspecified ItemId Ġ|| ĠitemId Ġ> ĠReserved ItemId Range End ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠYou Ġmay Ġnot Ġspecify Ġitem Ġids Ġless Ġthan Ġ$ Reserved ItemId Range End Ġin Ġa ĠGl ance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidget . ĠThese Ġare Ġreserved . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem List . add ( itemId Ġto Ġcontent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġitems ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemId : Ġ(( index : ĠInt ) Ġ-> ĠLong ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Content : Ġ@ Composable ĠLazy Item Scope .( index : ĠInt ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( count ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem ( itemId ( index )) Ġ{ Ġitem Content ( index ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġlist Scope Impl . apply ( content ) ĊĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠ Ġitem List . forEach Ġ{ Ġ( itemId , Ġcomp osable ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠitemId . take If Ġ{ Ġit Ġ!= ĠLazy List Scope . Unspecified ItemId Ġ} Ġ?: Ġnext Implicit ItemId -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( id Ġ!= ĠLazy List Scope . Unspecified ItemId ) Ġ{ Ġ" Implicit Ġlist Ġitem Ġids Ġex hausted ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy ListItem ( id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠLazy Item Scope Ġ{ Ġ}. apply Ġ{ Ġcomp osable () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Opt In ( Gl ance Internal Api :: class ) Ċ @ Composable Ċ private Ġfun ĠLazy ListItem ( ĊĠĠĠ ĠitemId : ĠLong , ĊĠĠĠ Ġcontent : Ġ@ Composable Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠCompose Node < Emit table Lazy ListItem , ĠApp lier >( ĊĠĠĠĠĠĠĠ Ġfactory Ġ= Ġ:: Emit table Lazy ListItem , ĊĠĠĠĠĠĠĠ Ġupdate Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set ( itemId ) Ġ{ Ġthis . itemId Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġcontent Ġ= Ġcontent ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠValues Ġbetween Ġ- 2 ^ 6 3 Ġand Ġ- 2 ^ 6 2 Ġare Ġreserved Ġfor Ġlist Ġitems Ġwhose Ġid Ġhas Ġnot Ġbeen Ġexplicitly Ċ Ġ* Ġdefined . Ċ Ġ*/ Ċ @ Visible ForTesting Ċ internal Ġconst Ġval ĠReserved ItemId Range End Ġ= Ġ- 0 x 4 _ 0 0 0 _ 0 0 0 _ 0 0 0 _ 0 0 0 _ 0 0 0 L Ċ Ċ @ Dsl Marker Ċ annotation Ġclass ĠLazy Scope Marker Ċ Ċ /** Ċ Ġ* ĠReceiver Ġscope Ġbeing Ġused Ġby Ġthe Ġitem Ġcontent Ġparameter Ġof Ġ[ Lazy Column ]. Ċ Ġ*/ Ċ @ Lazy Scope Marker Ċ interface ĠLazy Item Scope Ċ Ċ /** Ċ Ġ* ĠReceiver Ġscope Ġwhich Ġis Ġused Ġby Ġ[ Lazy Column ]. Ċ Ġ*/ Ċ @ Lazy Scope Marker Ċ interface ĠLazy List Scope Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġsingle Ġitem . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠitemId Ġa Ġstable Ġand Ġunique Ġid Ġrepresenting Ġthe Ġitem . ĠThe Ġvalue Ġmay Ġnot Ġbe Ġless Ġthan ĊĠĠĠĠ Ġ* Ġor Ġequal Ġto Ġ- 2 ^ 6 2 , Ġas Ġthese Ġvalues Ġare Ġreserved Ġby Ġthe ĠGl ance ĠAPI . ĠSpec ifying Ġthe Ġlist ĊĠĠĠĠ Ġ* Ġitem Ġids Ġwill Ġmaintain Ġthe Ġscroll Ġposition Ġthrough Ġapp Ġwidget Ġupdates Ġin ĠAndroid ĠS Ġand ĊĠĠĠĠ Ġ* Ġhigher Ġdevices . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Ġthe Ġcontent Ġof Ġthe Ġitem ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġitem ( itemId : ĠLong Ġ= ĠUn specified ItemId , Ġcontent : Ġ@ Composable ĠLazy Item Scope . () Ġ-> ĠUnit ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġ[ count ] Ġof Ġitems . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcount Ġthe Ġcount Ġof Ġitems ĊĠĠĠĠ Ġ* Ġ@ param ĠitemId Ġa Ġfactory Ġof Ġstable Ġand Ġunique Ġids Ġrepresenting Ġthe Ġitem . ĠThe Ġvalue Ġmay Ġnot Ġbe ĊĠĠĠĠ Ġ* Ġless Ġthan Ġor Ġequal Ġto Ġ- 2 ^ 6 2 , Ġas Ġthese Ġvalues Ġare Ġreserved Ġby Ġthe ĠGl ance ĠAPI . ĠSpec ifying ĊĠĠĠĠ Ġ* Ġthe Ġlist Ġitem Ġids Ġwill Ġmaintain Ġthe Ġscroll Ġposition Ġthrough Ġapp Ġwidget Ġupdates Ġin ĠAndroid ĊĠĠĠĠ Ġ* ĠS Ġand Ġhigher Ġdevices . ĊĠĠĠĠ Ġ* Ġ@ param Ġitem Content Ġthe Ġcontent Ġdisplayed Ġby Ġa Ġsingle Ġitem ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġitems ( ĊĠĠĠĠĠĠĠ Ġcount : ĠInt , ĊĠĠĠĠĠĠĠ ĠitemId : Ġ(( index : ĠInt ) Ġ-> ĠLong ) Ġ= Ġ{ ĠUn specified ItemId Ġ}, ĊĠĠĠĠĠĠĠ Ġitem Content : Ġ@ Composable ĠLazy Item Scope .( index : ĠInt ) Ġ-> ĠUnit ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠUn specified ItemId Ġ= ĠLong . MIN _ VALUE ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠTODO ( b / 1 9 8 6 1 8 3 5 9 ): ĠAdd Ġinline Ġhelper Ġfunctions Ġwith ĠList < T > Ġand ĠArray < T > Ġparams . Ċ Ċ @ Opt In ( Gl ance Internal Api :: class ) Ċ internal Ġabstract Ġclass ĠEmit table Lazy List Ġ: ĠEmit table With Children () Ġ{ ĊĠĠĠ Ġoverride Ġvar Ġmodifier : ĠModifier Ġ= ĠModifier ĊĠĠĠ Ġpublic Ġvar Ġhorizontal Alignment : ĠAlignment . Horizontal Ġ= ĠAlignment . Start ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= ĊĠĠĠĠĠĠĠ Ġ" Emit table Lazy List ( modifier =$ modifier , Ġchildren =[ \ n ${ children ToString () }\ n ]) " Ċ } Ċ Ċ @ Opt In ( Gl ance Internal Api :: class ) Ċ internal Ġclass ĠEmit table Lazy ListItem Ġ: ĠEmit table With Children () Ġ{ ĊĠĠĠ Ġoverride Ġvar Ġmodifier : ĠModifier Ġ= ĠModifier ĊĠĠĠ Ġvar ĠitemId : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= ĊĠĠĠĠĠĠĠ Ġ" Emit table Lazy ListItem ( modifier =$ modifier , Ġchildren =[ \ n ${ children ToString () }\ n ]) " Ċ } Ċ Ċ internal Ġclass ĠEmit table Lazy Column Ġ: ĠEmit table Lazy List () Ċ