/* Ċ Ġ* Ġ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 . compose . runtime Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġre comp osable Ġscope Ġor Ġsection Ġof Ġthe Ġcomposition Ġhierarchy . ĠCan Ġbe Ġused Ġto Ċ Ġ* Ġmanually Ġinvalidate Ġthe Ġscope Ġto Ġschedule Ġit Ġfor Ġre composition . Ċ Ġ*/ Ċ interface ĠRe compose Scope Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn validate Ġthe Ġcorresponding Ġscope , Ġrequesting Ġthe Ġcomposer Ġre compose Ġthis Ġscope . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinvalidate () Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġobject Ġwhich Ġcan Ġbe Ġused Ġto Ġinvalidate Ġthe Ġcurrent Ġscope Ġat Ġthis Ġpoint Ġin Ġcomposition . Ċ Ġ* ĠThis Ġobject Ġcan Ġbe Ġused Ġto Ġmanually Ġcause Ġre composition s . Ċ Ġ*/ Ċ val Ġcurrent Re compose Scope : ĠRe compose Scope ĊĠĠĠ Ġ@ Composable Contract ( readonly Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Composable Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= Ġcurrent Composer . current Re compose Scope Ġ?: Ġerror (" no Ġre compose Ġscope Ġfound ") ĊĠĠĠĠĠĠĠ Ġscope . used Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġscope ĊĠĠĠ Ġ} Ċ Ċ /** Ċ Ġ* ĠA ĠRe compose Scope Ġis Ġcreated Ġfor Ġa Ġregion Ġof Ġthe Ġcomposition Ġthat Ġcan Ġbe Ġre composed Ġindependently Ċ Ġ* Ġof Ġthe Ġrest Ġof Ġthe Ġcomposition . ĠThe Ġcomposer Ġwill Ġposition Ġthe Ġslot Ġtable Ġto Ġthe Ġlocation Ċ Ġ* Ġstored Ġin Ġ[ anchor ] Ġand Ġcall Ġ[ block ] Ġwhen Ġre composition Ġis Ġrequested . ĠIt Ġis Ġcreated Ġby Ċ Ġ* Ġ[ Composer . start Restart Group ] Ġand Ġis Ġused Ġto Ġtrack Ġhow Ġto Ġrestart Ġthe Ġgroup . Ċ Ġ*/ Ċ @ Opt In ( Compose Compiler Api :: class ) Ċ internal Ġclass ĠRe compose Scope Impl ( var Ġcomposer : ĠComposer < *> ?) Ġ: ĠScope Update Scope , ĠRe compose Scope Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn Ġanchor Ġto Ġthe Ġlocation Ġin Ġthe Ġslot Ġtable Ġthat Ġstart Ġthe Ġgroup Ġassociated Ġwith Ġthis ĊĠĠĠĠ Ġ* Ġre compose Ġscope . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġanchor : ĠAnchor ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġwhether Ġthe Ġscope Ġis Ġvalid . ĠA Ġscope Ġbecomes Ġinvalid Ġwhen Ġthe Ġslots Ġit Ġupdates Ġare ĊĠĠĠĠ Ġ* Ġremoved Ġfrom Ġthe Ġslot Ġtable . ĠFor Ġexample , Ġif Ġthe Ġscope Ġis Ġin Ġthe Ġthen Ġclause Ġof Ġan Ġif ĊĠĠĠĠ Ġ* Ġstatement Ġthat Ġlater Ġbecomes Ġfalse . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġvalid : ĠBoolean Ġget () Ġ= Ġcomposer Ġ!= Ġnull Ġ&& Ġanchor ?. valid Ġ?: Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUsed Ġis Ġset Ġwhen Ġthe Ġ[ Re compose Scope Impl ] Ġis Ġused Ġby , Ġfor Ġexample , Ġ[ current Re compose Scope ]. ĊĠĠĠĠ Ġ* ĠThis Ġis Ġused Ġas Ġthe Ġresult Ġof Ġ[ Composer . end Restart Group ] Ġand Ġindicates Ġwhether Ġthe Ġlambda ĊĠĠĠĠ Ġ* Ġthat Ġis Ġstored Ġin Ġ[ block ] Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġused Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġto Ġtrue Ġwhen Ġthe Ġthere Ġare Ġfunction Ġdefault Ġcalculations Ġin Ġthe Ġscope . ĠThese Ġare ĊĠĠĠĠ Ġ* Ġtreated Ġas Ġa Ġspecial Ġcase Ġto Ġavoid Ġhaving Ġto Ġcreate Ġa Ġspecial Ġscope Ġfor Ġthem . ĠIf Ġthese ĊĠĠĠĠ Ġ* Ġchange Ġthe Ġthis Ġscope Ġneeds Ġto Ġbe Ġre composed Ġbut Ġthe Ġdefault Ġvalues Ġcan Ġbe Ġskipped Ġif Ġthey ĊĠĠĠĠ Ġ* Ġwhere Ġnot Ġinvalid ated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġdefaults In Scope Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrack s Ġwhether Ġany Ġof Ġthe Ġcalculations Ġin Ġthe Ġdefault Ġvalues Ġwere Ġchanged . ĠSee ĊĠĠĠĠ Ġ* Ġ[ defaults In Scope ] Ġfor Ġdetails . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġdefaults Invalid Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrack s Ġwhether Ġthe Ġscope Ġwas Ġinvalid ated Ġdirectly Ġbut Ġwas Ġre composed Ġbecause Ġthe Ġcaller ĊĠĠĠĠ Ġ* Ġwas Ġre composed . ĠThis Ġensures Ġthat Ġa Ġscope Ġinvalid ated Ġdirectly Ġwill Ġre compose Ġeven Ġif Ġits ĊĠĠĠĠ Ġ* Ġparameters Ġare Ġthe Ġsame Ġas Ġthe Ġprevious Ġre composition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġrequires Re compose Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġlambda Ġto Ġcall Ġto Ġrestart Ġthe Ġscopes Ġcomposition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġblock : Ġ(( Composer <* >, ĠInt ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRestart Ġthe Ġscope 's Ġcomposition . ĠIt Ġis Ġan Ġerror Ġif Ġ[ block ] Ġwas Ġnot Ġupdated . ĠThe Ġcode ĊĠĠĠĠ Ġ* Ġgenerated Ġby Ġthe Ġcompiler Ġensures Ġthat Ġwhen Ġthe Ġre compose Ġscope Ġis Ġused Ġthen Ġ[ block ] Ġwill ĊĠĠĠĠ Ġ* Ġbe Ġset Ġbut Ġit Ġmight Ġoccur Ġif Ġthe Ġcompiler Ġis Ġout - of - date Ġ( or Ġahead Ġof Ġthe Ġruntime ) Ġor ĊĠĠĠĠ Ġ* Ġincorrect Ġdirect Ġcalls Ġto Ġ[ Composer . start Restart Group ] Ġand Ġ[ Composer . end Restart Group ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< N > Ġcompose ( composer : ĠComposer < N >) Ġ{ ĊĠĠĠĠĠĠĠ Ġblock ?. invoke ( composer , Ġ 1 ) Ġ?: Ġerror (" Invalid Ġrestart Ġscope ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn validate Ġthe Ġgroup Ġwhich Ġwill Ġcause Ġ[ composer ] Ġto Ġrequest Ġthis Ġscope Ġbe Ġre composed , ĊĠĠĠĠ Ġ* Ġand Ġan Ġ[ Invalid ation Result ] Ġwill Ġbe Ġreturned . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinvalidate For Result (): ĠIn validation Result Ġ= ĊĠĠĠĠĠĠĠ Ġcomposer ?. invalidate ( this ) Ġ?: ĠIn validation Result . IG NO RED ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn validate Ġthe Ġgroup Ġwhich Ġwill Ġcause Ġ[ composer ] Ġto Ġrequest Ġthis Ġscope Ġbe Ġre composed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġinvalidate () Ġ{ ĊĠĠĠĠĠĠĠ Ġinvalidate For Result () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġ[ block ]. ĠThe Ġscope Ġis Ġreturned Ġby Ġ[ Composer . end Restart Group ] Ġwhen Ġ[ used ] Ġis Ġtrue ĊĠĠĠĠ Ġ* Ġand Ġimplements Ġ[ Scope Update Scope ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġupdate Scope ( block : Ġ( Composer <* >, ĠInt ) Ġ-> ĠUnit ) Ġ{ Ġthis . block Ġ= Ġblock Ġ} Ċ }