/* Ċ Ġ* Ġ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 . compose . foundation . lazy Ċ Ċ import Ġandroidx . compose . foundation . Experimental Foundation Api Ċ import Ġandroidx . compose . foundation . gest ures . Fl ing Behavior Ċ import Ġandroidx . compose . foundation . gest ures . Scroll able Defaults Ċ import Ġandroidx . compose . foundation . layout . Arrange ment Ċ import Ġandroidx . compose . foundation . layout . Padding Values Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . lazy . grid . Lazy Grid Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Stable Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . unit . Constraints Ċ import Ġandroidx . compose . ui . unit . Density Ċ import Ġandroidx . compose . ui . unit . Dp Ċ import Ġandroidx . compose . ui . unit . dp Ċ Ċ /** Ċ Ġ* ĠThe ĠDSL Ġimplementation Ġof Ġa Ġlazy Ġgrid Ġlayout . ĠIt Ġcomp o ses Ġonly Ġvisible Ġrows Ġof Ġthe Ġgrid . Ċ Ġ* ĠThis ĠAPI Ġis Ġnot Ġstable , Ġplease Ġconsider Ġusing Ġstable Ġcomponents Ġlike Ġ[ Lazy Column ] Ġand Ġ[ Row ] Ċ Ġ* Ġto Ġachieve Ġthe Ġsame Ġresult . Ċ Ġ* Ċ Ġ* Ġ@ param Ġcells Ġa Ġclass Ġdescribing Ġhow Ġcells Ġform Ġcolumns , Ġsee Ġ[ Grid Cells ] Ġdoc Ġfor Ġmore Ġinformation Ċ Ġ* Ġ@ param Ġmodifier Ġthe Ġmodifier Ġto Ġapply Ġto Ġthis Ġlayout Ċ Ġ* Ġ@ param Ġstate Ġthe Ġstate Ġobject Ġto Ġbe Ġused Ġto Ġcontrol Ġor Ġobserve Ġthe Ġlist 's Ġstate Ċ Ġ* Ġ@ param Ġcontent Padding Ġspecify Ġa Ġpadding Ġaround Ġthe Ġwhole Ġcontent Ċ Ġ* Ġ@ param Ġvertical Arrange ment ĠThe Ġvertical Ġarrange ment Ġof Ġthe Ġlayout 's Ġchildren Ċ Ġ* Ġ@ param Ġhorizontal Arrange ment ĠThe Ġhorizontal Ġarrange ment Ġof Ġthe Ġlayout 's Ġchildren Ċ Ġ* Ġ@ param Ġfl ing Behavior Ġlogic Ġdescribing Ġfl ing Ġbehavior Ċ Ġ* Ġ@ param Ġuser Scroll Enabled Ġwhether Ġthe Ġscrolling Ġvia Ġthe Ġuser Ġgest ures Ġor Ġaccessibility Ġactions Ċ Ġ* Ġis Ġallowed . ĠYou Ġcan Ġstill Ġscroll Ġprogram matically Ġusing Ġthe Ġstate Ġeven Ġwhen Ġit Ġis Ġdisabled . Ċ Ġ* Ġ@ param Ġcontent Ġthe Ġ[ Lazy List Scope ] Ġwhich Ġdescribes Ġthe Ġcontent Ċ Ġ*/ Ċ @ Experimental Foundation Api Ċ @ Composable Ċ fun ĠLazy Vertical Grid ( ĊĠĠĠ Ġcells : ĠGrid Cells , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġstate : ĠLazy Grid State Ġ= Ġremember Lazy Grid State (), ĊĠĠĠ Ġcontent Padding : ĠPadding Values Ġ= ĠPadding Values ( 0 . dp ), ĊĠĠĠ Ġvertical Arrange ment : ĠArrange ment . Vertical Ġ= ĠArrange ment . Top , ĊĠĠĠ Ġhorizontal Arrange ment : ĠArrange ment . Horizontal Ġ= ĠArrange ment . Start , ĊĠĠĠ Ġfl ing Behavior : ĠF ling Behavior Ġ= ĠScroll able Defaults . fl ing Behavior (), ĊĠĠĠ Ġuser Scroll Enabled : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġcontent : ĠLazy Grid Scope . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġslots Per Line Ġ= Ġremember < Density .( Constraints ) Ġ-> ĠInt >( cells ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ{ Ġconstraints Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells Ġis ĠGrid Cells . Fixed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells . count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( cells Ġis ĠGrid Cells . Adaptive ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Of (( constraints . maxWidth . to Dp () Ġ/ Ġcells . min Size ). toInt (), Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ ĠLazy Grid ( ĊĠĠĠĠĠĠĠ Ġslots Per Line Ġ= Ġslots Per Line , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier , ĊĠĠĠĠĠĠĠ Ġstate Ġ= Ġstate , ĊĠĠĠĠĠĠĠ Ġcontent Padding Ġ= Ġcontent Padding , ĊĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= Ġhorizontal Arrange ment , ĊĠĠĠĠĠĠĠ Ġvertical Arrange ment Ġ= Ġvertical Arrange ment , ĊĠĠĠĠĠĠĠ Ġfl ing Behavior Ġ= Ġfl ing Behavior , ĊĠĠĠĠĠĠĠ Ġuser Scroll Enabled Ġ= Ġuser Scroll Enabled , ĊĠĠĠĠĠĠĠ Ġcontent Ġ= Ġcontent ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġdescribes Ġhow Ġcells Ġform Ġcolumns Ġin Ġvertical Ġgrids Ġor Ġrows Ġin Ġhorizontal Ġgrids . Ċ Ġ*/ Ċ @ Experimental Foundation Api Ċ @ Stable Ċ sealed Ġclass ĠGrid Cells Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCombin es Ġcells Ġwith Ġfixed Ġnumber Ġrows Ġor Ġcolumns . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġexample , Ġfor Ġthe Ġvertical Ġ[ Lazy Vertical Grid ] ĠFixed ( 3 ) Ġwould Ġmean Ġthat Ġthere Ġare Ġ 3 Ġcolumns Ġ 1 / 3 ĊĠĠĠĠ Ġ* Ġof Ġthe Ġparent Ġwide . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Experimental Foundation Api ĊĠĠĠ Ġ@ Stable ĊĠĠĠ Ġclass ĠFixed ( val Ġcount : ĠInt ) Ġ: ĠGrid Cells () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCombin es Ġcells Ġwith Ġadaptive Ġnumber Ġof Ġrows Ġor Ġcolumns . ĠIt Ġwill Ġtry Ġto Ġposition Ġas Ġmany Ġrows ĊĠĠĠĠ Ġ* Ġor Ġcolumns Ġas Ġpossible Ġon Ġthe Ġcondition Ġthat Ġevery Ġcell Ġhas Ġat Ġleast Ġ[ min Size ] Ġspace Ġand ĊĠĠĠĠ Ġ* Ġall Ġextra Ġspace Ġdistributed Ġeven ly . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġexample , Ġfor Ġthe Ġvertical Ġ[ Lazy Vertical Grid ] ĠAdapt ive ( 2 0 . dp ) Ġwould Ġmean Ġthat Ġthere Ġwill Ġbe Ġas ĊĠĠĠĠ Ġ* Ġmany Ġcolumns Ġas Ġpossible Ġand Ġevery Ġcolumn Ġwill Ġbe Ġat Ġleast Ġ 2 0 . dp Ġand Ġall Ġthe Ġcolumns Ġwill ĊĠĠĠĠ Ġ* Ġhave Ġequal Ġwidth . ĠIf Ġthe Ġscreen Ġis Ġ 8 8 . dp Ġwide Ġthen Ġthere Ġwill Ġbe Ġ 4 Ġcolumns Ġ 2 2 . dp Ġeach . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Experimental Foundation Api ĊĠĠĠ Ġ@ Stable ĊĠĠĠ Ġclass ĠAdapt ive ( val Ġmin Size : ĠD p ) Ġ: ĠGrid Cells () ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= Ġif Ġ( this Ġis ĠFixed ) Ġ{ ĊĠĠĠĠĠĠĠĠ 3 1 Ġ+ Ġcount ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠAdapt ive ) ĊĠĠĠĠĠĠĠĠ 6 2 Ġ+ Ġmin Size . hashCode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= ĊĠĠĠĠĠĠĠ Ġ( this Ġis ĠFixed Ġ&& Ġother Ġis ĠFixed Ġ&& Ġthis . count Ġ== Ġother . count ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( this Ġis ĠAdapt ive Ġ&& Ġother Ġis ĠAdapt ive Ġ&& Ġthis . min Size Ġ== Ġother . min Size ) Ċ } Ċ Ċ /** Ċ Ġ* ĠReceiver Ġscope Ġwhich Ġis Ġused Ġby Ġ[ Lazy Vertical Grid ]. Ċ Ġ*/ Ċ @ Experimental Foundation Api Ċ interface ĠLazy Grid Scope Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġsingle Ġitem Ġto Ġthe Ġscope . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Ġa Ġstable Ġand Ġunique Ġkey Ġrepresenting Ġthe Ġitem . ĠUsing Ġthe Ġsame Ġkey ĊĠĠĠĠ Ġ* Ġfor Ġmultiple Ġitems Ġin Ġthe Ġgrid Ġis Ġnot Ġallowed . ĠType Ġof Ġthe Ġkey Ġshould Ġbe Ġsave able ĊĠĠĠĠ Ġ* Ġvia ĠBundle Ġon ĠAndroid . ĠIf Ġnull Ġis Ġpassed Ġthe Ġposition Ġin Ġthe Ġgrid Ġwill Ġrepresent Ġthe Ġkey . ĊĠĠĠĠ Ġ* ĠWhen Ġyou Ġspecify Ġthe Ġkey Ġthe Ġscroll Ġposition Ġwill Ġbe Ġmaintained Ġbased Ġon Ġthe Ġkey , Ġwhich ĊĠĠĠĠ Ġ* Ġmeans Ġif Ġyou Ġadd / remove Ġitems Ġbefore Ġthe Ġcurrent Ġvisible Ġitem Ġthe Ġitem Ġwith Ġthe Ġgiven Ġkey ĊĠĠĠĠ Ġ* Ġwill Ġbe Ġkept Ġas Ġthe Ġfirst Ġvisible Ġone . ĊĠĠĠĠ Ġ* Ġ@ param Ġspan Ġthe Ġspan Ġof Ġthe Ġitem . ĠDefault Ġis Ġ 1 x 1 . ĠIt Ġis Ġgood Ġpractice Ġto Ġleave Ġit Ġ` null ` ĊĠĠĠĠ Ġ* Ġwhen Ġthis Ġmatches Ġthe Ġintended Ġbehavior , Ġas Ġproviding Ġa Ġcustom Ġimplementation Ġimpact s ĊĠĠĠĠ Ġ* Ġperformance ĊĠĠĠĠ Ġ* Ġ@ param ĠcontentType Ġthe Ġtype Ġof Ġthe Ġcontent Ġof Ġthis Ġitem . ĠThe Ġitem Ġcomposition s Ġof Ġthe Ġsame ĊĠĠĠĠ Ġ* Ġtype Ġcould Ġbe Ġreused Ġmore Ġefficiently . ĠNote Ġthat Ġnull Ġis Ġa Ġvalid Ġtype Ġand Ġitems Ġof Ġsuch ĊĠĠĠĠ Ġ* Ġtype Ġwill Ġbe Ġconsidered Ġcompatible . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Ġthe Ġcontent Ġof Ġthe Ġitem ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġitem ( ĊĠĠĠĠĠĠĠ Ġkey : ĠAny ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġspan : Ġ( Lazy Grid Item Span Scope . () Ġ-> ĠGrid Item Span )? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠcontentType : ĠAny ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġcontent : Ġ@ Composable Ġ() Ġ-> ĠUnit ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġ[ count ] Ġof Ġitems . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcount Ġthe Ġitems Ġcount ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Ġa Ġfactory Ġof Ġstable Ġand Ġunique Ġkeys Ġrepresenting Ġthe Ġitem . ĠUsing Ġthe Ġsame Ġkey ĊĠĠĠĠ Ġ* Ġfor Ġmultiple Ġitems Ġin Ġthe Ġgrid Ġis Ġnot Ġallowed . ĠType Ġof Ġthe Ġkey Ġshould Ġbe Ġsave able ĊĠĠĠĠ Ġ* Ġvia ĠBundle Ġon ĠAndroid . ĠIf Ġnull Ġis Ġpassed Ġthe Ġposition Ġin Ġthe Ġgrid Ġwill Ġrepresent Ġthe Ġkey . ĊĠĠĠĠ Ġ* ĠWhen Ġyou Ġspecify Ġthe Ġkey Ġthe Ġscroll Ġposition Ġwill Ġbe Ġmaintained Ġbased Ġon Ġthe Ġkey , Ġwhich ĊĠĠĠĠ Ġ* Ġmeans Ġif Ġyou Ġadd / remove Ġitems Ġbefore Ġthe Ġcurrent Ġvisible Ġitem Ġthe Ġitem Ġwith Ġthe Ġgiven Ġkey ĊĠĠĠĠ Ġ* Ġwill Ġbe Ġkept Ġas Ġthe Ġfirst Ġvisible Ġone . ĊĠĠĠĠ Ġ* Ġ@ param Ġspan Ġdefine Ġcustom Ġspans Ġfor Ġthe Ġitems . ĠDefault Ġis Ġ 1 x 1 . ĠIt Ġis Ġgood Ġpractice Ġto ĊĠĠĠĠ Ġ* Ġleave Ġit Ġ` null ` Ġwhen Ġthis Ġmatches Ġthe Ġintended Ġbehavior , Ġas Ġproviding Ġa Ġcustom ĊĠĠĠĠ Ġ* Ġimplementation Ġimpact s Ġperformance ĊĠĠĠĠ Ġ* Ġ@ param ĠcontentType Ġa Ġfactory Ġof Ġthe Ġcontent Ġtypes Ġfor Ġthe Ġitem . ĠThe Ġitem Ġcomposition s Ġof ĊĠĠĠĠ Ġ* Ġthe Ġsame Ġtype Ġcould Ġbe Ġreused Ġmore Ġefficiently . ĠNote Ġthat Ġnull Ġis Ġa Ġvalid Ġtype Ġand Ġitems Ġof Ġsuch ĊĠĠĠĠ Ġ* Ġtype Ġwill Ġbe Ġconsidered Ġcompatible . ĊĠĠĠĠ Ġ* Ġ@ param Ġitem Content Ġthe Ġcontent Ġdisplayed Ġby Ġa Ġsingle Ġitem ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġitems ( ĊĠĠĠĠĠĠĠ Ġcount : ĠInt , ĊĠĠĠĠĠĠĠ Ġkey : Ġ(( index : ĠInt ) Ġ-> ĠAny )? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġspan : Ġ( Lazy Grid Item Span Scope .( index : ĠInt ) Ġ-> ĠGrid Item Span )? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠcontentType : Ġ( index : ĠInt ) Ġ-> ĠAny ? Ġ= Ġ{ Ġnull Ġ}, ĊĠĠĠĠĠĠĠ Ġitem Content : Ġ@ Composable Ġ( index : ĠInt ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAdds Ġa Ġlist Ġof Ġitems . Ċ Ġ* Ċ Ġ* Ġ@ param Ġitems Ġthe Ġdata Ġlist Ċ Ġ* Ġ@ param Ġkey Ġa Ġfactory Ġof Ġstable Ġand Ġunique Ġkeys Ġrepresenting Ġthe Ġitem . ĠUsing Ġthe Ġsame Ġkey Ċ Ġ* Ġfor Ġmultiple Ġitems Ġin Ġthe Ġgrid Ġis Ġnot Ġallowed . ĠType Ġof Ġthe Ġkey Ġshould Ġbe Ġsave able Ċ Ġ* Ġvia ĠBundle Ġon ĠAndroid . ĠIf Ġnull Ġis Ġpassed Ġthe Ġposition Ġin Ġthe Ġgrid Ġwill Ġrepresent Ġthe Ġkey . Ċ Ġ* ĠWhen Ġyou Ġspecify Ġthe Ġkey Ġthe Ġscroll Ġposition Ġwill Ġbe Ġmaintained Ġbased Ġon Ġthe Ġkey , Ġwhich Ċ Ġ* Ġmeans Ġif Ġyou Ġadd / remove Ġitems Ġbefore Ġthe Ġcurrent Ġvisible Ġitem Ġthe Ġitem Ġwith Ġthe Ġgiven Ġkey Ċ Ġ* Ġwill Ġbe Ġkept Ġas Ġthe Ġfirst Ġvisible Ġone . Ċ Ġ* Ġ@ param Ġspan Ġdefine Ġcustom Ġspans Ġfor Ġthe Ġitems . ĠDefault Ġis Ġ 1 x 1 . ĠIt Ġis Ġgood Ġpractice Ġto Ċ Ġ* Ġleave Ġit Ġ` null ` Ġwhen Ġthis Ġmatches Ġthe Ġintended Ġbehavior , Ġas Ġproviding Ġa Ġcustom Ġimplementation Ċ Ġ* Ġimpact s Ġperformance Ċ Ġ* Ġ@ param ĠcontentType Ġa Ġfactory Ġof Ġthe Ġcontent Ġtypes Ġfor Ġthe Ġitem . ĠThe Ġitem Ġcomposition s Ġof Ċ Ġ* Ġthe Ġsame Ġtype Ġcould Ġbe Ġreused Ġmore Ġefficiently . ĠNote Ġthat Ġnull Ġis Ġa Ġvalid Ġtype Ġand Ġitems Ġof Ġsuch Ċ Ġ* Ġtype Ġwill Ġbe Ġconsidered Ġcompatible . Ċ Ġ* Ġ@ param Ġitem Content Ġthe Ġcontent Ġdisplayed Ġby Ġa Ġsingle Ġitem Ċ Ġ*/ Ċ @ Experimental Foundation Api Ċ inline Ġfun Ġ< T > ĠLazy Grid Scope . items ( ĊĠĠĠ Ġitems : ĠList < T >, ĊĠĠĠ Ġno inline Ġkey : Ġ(( item : ĠT ) Ġ-> ĠAny )? Ġ= Ġnull , ĊĠĠĠ Ġno inline Ġspan : Ġ( Lazy Grid Item Span Scope .( item : ĠT ) Ġ-> ĠGrid Item Span )? Ġ= Ġnull , ĊĠĠĠ Ġno inline ĠcontentType : Ġ( item : ĠT ) Ġ-> ĠAny ? Ġ= Ġ{ Ġnull Ġ}, ĊĠĠĠ Ġcross inline Ġitem Content : Ġ@ Composable Ġ( item : ĠT ) Ġ-> ĠUnit Ċ ) Ġ= Ġitems ( ĊĠĠĠ Ġcount Ġ= Ġitems . size , ĊĠĠĠ Ġkey Ġ= Ġif Ġ( key Ġ!= Ġnull ) Ġ{ Ġindex : ĠInt Ġ-> Ġkey ( items [ index ]) Ġ} Ġelse Ġnull , ĊĠĠĠ Ġspan Ġ= Ġif Ġ( span Ġ!= Ġnull ) Ġ{ Ġ{ Ġspan ( items [ it ]) Ġ} Ġ} Ġelse Ġnull , ĊĠĠĠ ĠcontentType Ġ= Ġ{ Ġindex : ĠInt Ġ-> ĠcontentType ( items [ index ]) Ġ} Ċ ) Ġ{ ĊĠĠĠ Ġitem Content ( items [ it ]) Ċ } Ċ Ċ /** Ċ Ġ* ĠAdds Ġa Ġlist Ġof Ġitems Ġwhere Ġthe Ġcontent Ġof Ġan Ġitem Ġis Ġaware Ġof Ġits Ġindex . Ċ Ġ* Ċ Ġ* Ġ@ param Ġitems Ġthe Ġdata Ġlist Ċ Ġ* Ġ@ param Ġkey Ġa Ġfactory Ġof Ġstable Ġand Ġunique Ġkeys Ġrepresenting Ġthe Ġitem . ĠUsing Ġthe Ġsame Ġkey Ċ Ġ* Ġfor Ġmultiple Ġitems Ġin Ġthe Ġgrid Ġis Ġnot Ġallowed . ĠType Ġof Ġthe Ġkey Ġshould Ġbe Ġsave able Ċ Ġ* Ġvia ĠBundle Ġon ĠAndroid . ĠIf Ġnull Ġis Ġpassed Ġthe Ġposition Ġin Ġthe Ġgrid Ġwill Ġrepresent Ġthe Ġkey . Ċ Ġ* ĠWhen Ġyou Ġspecify Ġthe Ġkey Ġthe Ġscroll Ġposition Ġwill Ġbe Ġmaintained Ġbased Ġon Ġthe Ġkey , Ġwhich Ċ Ġ* Ġmeans Ġif Ġyou Ġadd / remove Ġitems Ġbefore Ġthe Ġcurrent Ġvisible Ġitem Ġthe Ġitem Ġwith Ġthe Ġgiven Ġkey Ċ Ġ* Ġwill Ġbe Ġkept Ġas Ġthe Ġfirst Ġvisible Ġone . Ċ Ġ* Ġ@ param Ġspan Ġdefine Ġcustom Ġspans Ġfor Ġthe Ġitems . ĠDefault Ġis Ġ 1 x 1 . ĠIt Ġis Ġgood Ġpractice Ġto Ġleave Ċ Ġ* Ġit Ġ` null ` Ġwhen Ġthis Ġmatches Ġthe Ġintended Ġbehavior , Ġas Ġproviding Ġa Ġcustom Ġimplementation Ċ Ġ* Ġimpact s Ġperformance Ċ Ġ* Ġ@ param ĠcontentType Ġa Ġfactory Ġof Ġthe Ġcontent Ġtypes Ġfor Ġthe Ġitem . ĠThe Ġitem Ġcomposition s Ġof Ċ Ġ* Ġthe Ġsame Ġtype Ġcould Ġbe Ġreused Ġmore Ġefficiently . ĠNote Ġthat Ġnull Ġis Ġa Ġvalid Ġtype Ġand Ġitems Ġof Ġsuch Ċ Ġ* Ġtype Ġwill Ġbe Ġconsidered Ġcompatible . Ċ Ġ* Ġ@ param Ġitem Content Ġthe Ġcontent Ġdisplayed Ġby Ġa Ġsingle Ġitem Ċ Ġ*/ Ċ @ Experimental Foundation Api Ċ inline Ġfun Ġ< T > ĠLazy Grid Scope . items Indexed ( ĊĠĠĠ Ġitems : ĠList < T >, ĊĠĠĠ Ġno inline Ġkey : Ġ(( index : ĠInt , Ġitem : ĠT ) Ġ-> ĠAny )? Ġ= Ġnull , ĊĠĠĠ Ġno inline Ġspan : Ġ( Lazy Grid Item Span Scope .( index : ĠInt , Ġitem : ĠT ) Ġ-> ĠGrid Item Span )? Ġ= Ġnull , ĊĠĠĠ Ġcross inline ĠcontentType : Ġ( index : ĠInt , Ġitem : ĠT ) Ġ-> ĠAny ? Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġnull Ġ}, ĊĠĠĠ Ġcross inline Ġitem Content : Ġ@ Composable Ġ( index : ĠInt , Ġitem : ĠT ) Ġ-> ĠUnit Ċ ) Ġ= Ġitems ( ĊĠĠĠ Ġcount Ġ= Ġitems . size , ĊĠĠĠ Ġkey Ġ= Ġif Ġ( key Ġ!= Ġnull ) Ġ{ Ġindex : ĠInt Ġ-> Ġkey ( index , Ġitems [ index ]) Ġ} Ġelse Ġnull , ĊĠĠĠ Ġspan Ġ= Ġif Ġ( span Ġ!= Ġnull ) Ġ{ Ġ{ Ġspan ( it , Ġitems [ it ]) Ġ} Ġ} Ġelse Ġnull , ĊĠĠĠ ĠcontentType Ġ= Ġ{ Ġindex Ġ-> ĠcontentType ( index , Ġitems [ index ]) Ġ} Ċ ) Ġ{ ĊĠĠĠ Ġitem Content ( it , Ġitems [ it ]) Ċ } Ċ Ċ /** Ċ Ġ* ĠAdds Ġan Ġarray Ġof Ġitems . Ċ Ġ* Ċ Ġ* Ġ@ param Ġitems Ġthe Ġdata Ġarray Ċ Ġ* Ġ@ param Ġkey Ġa Ġfactory Ġof Ġstable Ġand Ġunique Ġkeys Ġrepresenting Ġthe Ġitem . ĠUsing Ġthe Ġsame Ġkey Ċ Ġ* Ġfor Ġmultiple Ġitems Ġin Ġthe Ġgrid Ġis Ġnot Ġallowed . ĠType Ġof Ġthe Ġkey Ġshould Ġbe Ġsave able Ċ Ġ* Ġvia ĠBundle Ġon ĠAndroid . ĠIf Ġnull Ġis Ġpassed Ġthe Ġposition Ġin Ġthe Ġgrid Ġwill Ġrepresent Ġthe Ġkey . Ċ Ġ* ĠWhen Ġyou Ġspecify Ġthe Ġkey Ġthe Ġscroll Ġposition Ġwill Ġbe Ġmaintained Ġbased Ġon Ġthe Ġkey , Ġwhich Ċ Ġ* Ġmeans Ġif Ġyou Ġadd / remove Ġitems Ġbefore Ġthe Ġcurrent Ġvisible Ġitem Ġthe Ġitem Ġwith Ġthe Ġgiven Ġkey Ċ Ġ* Ġwill Ġbe Ġkept Ġas Ġthe Ġfirst Ġvisible Ġone . Ċ Ġ* Ġ@ param Ġspan Ġdefine Ġcustom Ġspans Ġfor Ġthe Ġitems . ĠDefault Ġis Ġ 1 x 1 . ĠIt Ġis Ġgood Ġpractice Ġto Ġleave Ċ Ġ* Ġit Ġ` null ` Ġwhen Ġthis Ġmatches Ġthe Ġintended Ġbehavior , Ġas Ġproviding Ġa Ġcustom Ġimplementation Ċ Ġ* Ġimpact s Ġperformance Ċ Ġ* Ġ@ param ĠcontentType Ġa Ġfactory Ġof Ġthe Ġcontent Ġtypes Ġfor Ġthe Ġitem . ĠThe Ġitem Ġcomposition s Ġof Ċ Ġ* Ġthe Ġsame Ġtype Ġcould Ġbe Ġreused Ġmore Ġefficiently . ĠNote Ġthat Ġnull Ġis Ġa Ġvalid Ġtype Ġand Ġitems Ġof Ġsuch Ċ Ġ* Ġtype Ġwill Ġbe Ġconsidered Ġcompatible . Ċ Ġ* Ġ@ param Ġitem Content Ġthe Ġcontent Ġdisplayed Ġby Ġa Ġsingle Ġitem Ċ Ġ*/ Ċ @ Experimental Foundation Api Ċ inline Ġfun Ġ< T > ĠLazy Grid Scope . items ( ĊĠĠĠ Ġitems : ĠArray < T >, ĊĠĠĠ Ġno inline Ġkey : Ġ(( item : ĠT ) Ġ-> ĠAny )? Ġ= Ġnull , ĊĠĠĠ Ġno inline Ġspan : Ġ( Lazy Grid Item Span Scope .( item : ĠT ) Ġ-> ĠGrid Item Span )? Ġ= Ġnull , ĊĠĠĠ Ġno inline ĠcontentType : Ġ( item : ĠT ) Ġ-> ĠAny ? Ġ= Ġ{ Ġnull Ġ}, ĊĠĠĠ Ġcross inline Ġitem Content : Ġ@ Composable Ġ( item : ĠT ) Ġ-> ĠUnit Ċ ) Ġ= Ġitems ( ĊĠĠĠ Ġcount Ġ= Ġitems . size , ĊĠĠĠ Ġkey Ġ= Ġif Ġ( key Ġ!= Ġnull ) Ġ{ Ġindex : ĠInt Ġ-> Ġkey ( items [ index ]) Ġ} Ġelse Ġnull , ĊĠĠĠ Ġspan Ġ= Ġif Ġ( span Ġ!= Ġnull ) Ġ{ Ġ{ Ġspan ( items [ it ]) Ġ} Ġ} Ġelse Ġnull , ĊĠĠĠ ĠcontentType Ġ= Ġ{ Ġindex : ĠInt Ġ-> ĠcontentType ( items [ index ]) Ġ} Ċ ) Ġ{ ĊĠĠĠ Ġitem Content ( items [ it ]) Ċ } Ċ Ċ /** Ċ Ġ* ĠAdds Ġan Ġarray Ġof Ġitems Ġwhere Ġthe Ġcontent Ġof Ġan Ġitem Ġis Ġaware Ġof Ġits Ġindex . Ċ Ġ* Ċ Ġ* Ġ@ param Ġitems Ġthe Ġdata Ġarray Ċ Ġ* Ġ@ param Ġkey Ġa Ġfactory Ġof Ġstable Ġand Ġunique Ġkeys Ġrepresenting Ġthe Ġitem . ĠUsing Ġthe Ġsame Ġkey Ċ Ġ* Ġfor Ġmultiple Ġitems Ġin Ġthe Ġgrid Ġis Ġnot Ġallowed . ĠType Ġof Ġthe Ġkey Ġshould Ġbe Ġsave able Ċ Ġ* Ġvia ĠBundle Ġon ĠAndroid . ĠIf Ġnull Ġis Ġpassed Ġthe Ġposition Ġin Ġthe Ġgrid Ġwill Ġrepresent Ġthe Ġkey . Ċ Ġ* ĠWhen Ġyou Ġspecify Ġthe Ġkey Ġthe Ġscroll Ġposition Ġwill Ġbe Ġmaintained Ġbased Ġon Ġthe Ġkey , Ġwhich Ċ Ġ* Ġmeans Ġif Ġyou Ġadd / remove Ġitems Ġbefore Ġthe Ġcurrent Ġvisible Ġitem Ġthe Ġitem Ġwith Ġthe Ġgiven Ġkey Ċ Ġ* Ġwill Ġbe Ġkept Ġas Ġthe Ġfirst Ġvisible Ġone . Ċ Ġ* Ġ@ param Ġspan Ġdefine Ġcustom Ġspans Ġfor Ġthe Ġitems . ĠDefault Ġis Ġ 1 x 1 . ĠIt Ġis Ġgood Ġpractice Ġto Ġleave Ċ Ġ* Ġit Ġ` null ` Ġwhen Ġthis Ġmatches Ġthe Ġintended Ġbehavior , Ġas Ġproviding Ġa Ġcustom Ġimplementation Ċ Ġ* Ġimpact s Ġperformance Ċ Ġ* Ġ@ param ĠcontentType Ġa Ġfactory Ġof Ġthe Ġcontent Ġtypes Ġfor Ġthe Ġitem . ĠThe Ġitem Ġcomposition s Ġof Ċ Ġ* Ġthe Ġsame Ġtype Ġcould Ġbe Ġreused Ġmore Ġefficiently . ĠNote Ġthat Ġnull Ġis Ġa Ġvalid Ġtype Ġand Ġitems Ġof Ġsuch Ċ Ġ* Ġtype Ġwill Ġbe Ġconsidered Ġcompatible . Ċ Ġ* Ġ@ param Ġitem Content Ġthe Ġcontent Ġdisplayed Ġby Ġa Ġsingle Ġitem Ċ Ġ*/ Ċ @ Experimental Foundation Api Ċ inline Ġfun Ġ< T > ĠLazy Grid Scope . items Indexed ( ĊĠĠĠ Ġitems : ĠArray < T >, ĊĠĠĠ Ġno inline Ġkey : Ġ(( index : ĠInt , Ġitem : ĠT ) Ġ-> ĠAny )? Ġ= Ġnull , ĊĠĠĠ Ġno inline Ġspan : Ġ( Lazy Grid Item Span Scope .( index : ĠInt , Ġitem : ĠT ) Ġ-> ĠGrid Item Span )? Ġ= Ġnull , ĊĠĠĠ Ġcross inline ĠcontentType : Ġ( index : ĠInt , Ġitem : ĠT ) Ġ-> ĠAny ? Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġnull Ġ}, ĊĠĠĠ Ġcross inline Ġitem Content : Ġ@ Composable Ġ( index : ĠInt , Ġitem : ĠT ) Ġ-> ĠUnit Ċ ) Ġ= Ġitems ( ĊĠĠĠ Ġcount Ġ= Ġitems . size , ĊĠĠĠ Ġkey Ġ= Ġif Ġ( key Ġ!= Ġnull ) Ġ{ Ġindex : ĠInt Ġ-> Ġkey ( index , Ġitems [ index ]) Ġ} Ġelse Ġnull , ĊĠĠĠ Ġspan Ġ= Ġif Ġ( span Ġ!= Ġnull ) Ġ{ Ġ{ Ġspan ( it , Ġitems [ it ]) Ġ} Ġ} Ġelse Ġnull , ĊĠĠĠ ĠcontentType Ġ= Ġ{ Ġindex Ġ-> ĠcontentType ( index , Ġitems [ index ]) Ġ} Ċ ) Ġ{ ĊĠĠĠ Ġitem Content ( it , Ġitems [ it ]) Ċ } Ċ