/* Ċ Ġ* Ġ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 . ui . platform Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Composition Ċ import Ġandroidx . compose . runtime . Composition Reference Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . View Tree Lifecycle Owner Ċ Ċ /** Ċ Ġ* ĠBase Ġclass Ġfor Ġcustom Ġ[ android . view . View ] s Ġimplemented Ġusing ĠJet pack ĠCompose ĠUI . Ċ Ġ* ĠSub classes Ġshould Ġimplement Ġthe Ġ[ Content ] Ġfunction Ġwith Ġthe Ġappropriate Ġcontent . Ċ Ġ* ĠCalls Ġto Ġ[ addView ] Ġand Ġits Ġvariants Ġand Ġover loads Ġwill Ġfail Ġwith Ġ[ IllegalStateException ]. Ċ Ġ* Ċ Ġ* ĠThis Ġ[ android . view . View ] Ġrequires Ġthat Ġthe Ġwindow Ġit Ġis Ġattached Ġto Ġcontains Ġa Ċ Ġ* Ġ[ View Tree Lifecycle Owner ]. ĠThis Ġ[ android x . lifecycle . Lifecycle Owner ] Ġis Ġused Ġto Ċ Ġ* Ġ[ dispose ][ android x . compose . runtime . Composition . dispose ] Ġof Ġthe Ġunderlying Ġcomposition Ċ Ġ* Ġwhen Ġthe Ġhost Ġ[ Lifecycle ] Ġis Ġdestroyed , Ġpermit ting Ġthe Ġview Ġto Ġbe Ġattached Ġand Ċ Ġ* Ġdet ached Ġrepeatedly Ġwhile Ġpre serving Ġthe Ġcomposition . ĠCall Ġ[ dispose Composition ] Ċ Ġ* Ġto Ġdispose Ġof Ġthe Ġunderlying Ġcomposition Ġearlier , Ġor Ġif Ġthe Ġview Ġis Ġnever Ġinitially Ċ Ġ* Ġattached Ġto Ġa Ġwindow . Ġ( The Ġrequirement Ġto Ġdispose Ġof Ġthe Ġcomposition Ġexplicitly Ċ Ġ* Ġin Ġthe Ġevent Ġthat Ġthe Ġview Ġis Ġnever Ġ( re ) attached Ġis Ġtemporary .) Ċ Ġ*/ Ċ abstract Ġclass ĠAbstract Compose View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠViewGroup ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġclip Children Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġclip To Padding Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcomposition : ĠComp osition ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġparent Reference : ĠComp osition Reference ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ!== Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Ġ= Ġcomposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old Ġ!== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold . dispose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomposition Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRe create Ġthe Ġcomposition Ġnow Ġif Ġwe Ġare Ġattached . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Attached To Window ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġensure Composition Created () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġ[ Composition Reference ] Ġthat Ġshould Ġbe Ġthe Ġparent Ġof Ġthis Ġview 's Ġcomposition . ĊĠĠĠĠ Ġ* ĠIf Ġ[ parent ] Ġis Ġ` null ` Ġit Ġwill Ġbe Ġdetermined Ġautomatically Ġfrom Ġthe Ġwindow Ġthe Ġview Ġis ĊĠĠĠĠ Ġ* Ġattached Ġto . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Parent Composition Reference ( parent : ĠComp osition Reference ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġparent Reference Ġ= Ġparent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠLe aking Ġ` this ` Ġduring Ġinit Ġis Ġgenerally Ġdangerous , Ġbut Ġwe Ġknow Ġthat Ġthe Ġimplementation Ġof ĊĠĠĠ Ġ// Ġthis Ġparticular ĠView Composition Strategy Ġis Ġnot Ġgoing Ġto Ġdo Ġsomething Ġharm ful Ġwith Ġit . ĊĠĠĠ Ġ@ Suppress (" Le aking This ") ĊĠĠĠ Ġprivate Ġvar Ġdispose View Composition Strategy : Ġ(() Ġ-> ĠUnit )? Ġ= ĊĠĠĠĠĠĠĠ ĠView Composition Strategy . Dispose On Detached From Window . install For ( this ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġstrategy Ġfor Ġmanaging Ġdis posal Ġof Ġthis ĠView 's Ġinternal Ġcomposition . ĊĠĠĠĠ Ġ* ĠDefaults Ġto Ġ[ View Composition Strategy . Dispose On Detached From Window ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis ĠView 's Ġcomposition Ġis Ġa Ġlive Ġresource Ġthat Ġmust Ġbe Ġdisposed Ġto Ġensure Ġthat ĊĠĠĠĠ Ġ* Ġlong - li ved Ġreferences Ġto Ġit Ġdo Ġnot Ġpersist ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee Ġ[ View Composition Strategy ] Ġfor Ġmore Ġinformation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset View Composition Strategy ( strategy : ĠView Composition Strategy ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdispose View Composition Strategy ?. invoke () ĊĠĠĠĠĠĠĠ Ġdispose View Composition Strategy Ġ= Ġstrategy . install For ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġ` true `, Ġthis ĠView 's Ġcomposition Ġwill Ġbe Ġcreated Ġwhen Ġit Ġbecomes Ġattached Ġto Ġa ĊĠĠĠĠ Ġ* Ġwindow Ġfor Ġthe Ġfirst Ġtime . ĠDefaults Ġto Ġ` true `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSub classes Ġmay Ġchoose Ġto Ġoverride Ġthis Ġproperty Ġto Ġprevent Ġthis Ġeager Ġinitial Ġcomposition ĊĠĠĠĠ Ġ* Ġin Ġcases Ġwhere Ġthe Ġview 's Ġcontent Ġis Ġnot Ġyet Ġready . ĠInitial Ġcomposition Ġwill Ġstill Ġoccur ĊĠĠĠĠ Ġ* Ġwhen Ġthis Ġview Ġis Ġfirst Ġmeasured . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġval Ġshould Create Composition On Attached To Window : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtrue ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠJet pack ĠCompose ĠUI Ġcontent Ġfor Ġthis Ġview . ĊĠĠĠĠ Ġ* ĠSub classes Ġmust Ġimplement Ġthis Ġmethod Ġto Ġprovide Ġcontent . ĠInitial Ġcomposition Ġwill ĊĠĠĠĠ Ġ* Ġoccur Ġwhen Ġthe Ġview Ġbecomes Ġattached Ġto Ġa Ġwindow Ġor Ġwhen Ġ[ create Composition ] Ġis Ġcalled , ĊĠĠĠĠ Ġ* Ġwh iche ver Ġcomes Ġfirst . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġabstract Ġfun ĠContent () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerform Ġinitial Ġcomposition Ġfor Ġthis Ġview . ĊĠĠĠĠ Ġ* ĠOnce Ġthis Ġmethod Ġis Ġcalled Ġor Ġthe Ġview Ġbecomes Ġattached Ġto Ġa Ġwindow , ĊĠĠĠĠ Ġ* Ġeither Ġ[ dispose Composition ] Ġmust Ġbe Ġcalled Ġor Ġthe Ġ[ View Tree Lifecycle Owner ] Ġmust ĊĠĠĠĠ Ġ* Ġreach Ġthe Ġ[ Lifecycle . State . DESTROY ED ] Ġstate Ġfor Ġthe Ġcomposition Ġto Ġbe Ġcleaned Ġup ĊĠĠĠĠ Ġ* Ġproperly . Ġ( This Ġrestriction Ġis Ġtemporary .) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthis Ġmethod Ġis Ġcalled Ġwhen Ġthe Ġcomposition Ġhas Ġalready Ġbeen Ġcreated Ġit Ġhas Ġno Ġeffect . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġshould Ġonly Ġbe Ġcalled Ġif Ġthis Ġview Ġ[ is Attached To Window ] Ġor Ġif Ġa Ġparent ĊĠĠĠĠ Ġ* Ġ[ Composition Reference ] Ġhas Ġbeen Ġ[ set ][ setParent Composition Reference ] Ġexplicitly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate Composition () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( parent Reference Ġ!= Ġnull Ġ|| Ġis Attached To Window ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" create Composition Ġrequires Ġeither Ġa Ġparent Ġreference Ġor Ġthe ĠView Ġto Ġbe Ġattached " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" to Ġa Ġwindow . ĠAttach Ġthe ĠView Ġor Ġcall Ġset Parent Composition Reference ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġensure Composition Created () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcreating Composition Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġfun Ġcheck Add View () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! creating Composition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cannot Ġadd Ġviews Ġto Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ java Class . simple Name }; Ġonly ĠCompose Ġcontent Ġis Ġsupported " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") Ġ// ĠStill Ġusing ĠViewGroup . setContent Ġfor Ġnow ĊĠĠĠ Ġprivate Ġfun Ġensure Composition Created () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( composition Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreating Composition Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomposition Ġ= Ġset Content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Reference Ġ?: Ġfind View Tree Composition Reference () Ġ?: Ġwindow Re composer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreating Composition Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDispose Ġof Ġthe Ġunderlying Ġcomposition Ġand Ġ[ request Layout ]. ĊĠĠĠĠ Ġ* ĠA Ġnew Ġcomposition Ġwill Ġbe Ġcreated Ġif Ġ[ create Composition ] Ġis Ġcalled Ġor Ġwhen Ġneeded Ġto ĊĠĠĠĠ Ġ* Ġlay Ġout Ġthis Ġview . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdispose Composition () Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposition ?. dispose () ĊĠĠĠĠĠĠĠ Ġcomposition Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ` true ` Ġif Ġthis ĠView Ġis Ġhost Ġto Ġan Ġactive ĠCompose ĠUI Ġcomposition . ĊĠĠĠĠ Ġ* ĠAn Ġactive Ġcomposition Ġmay Ġconsume Ġresources . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġhas Composition : ĠBoolean Ġget () Ġ= Ġcomposition Ġ!= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To Window () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( should Create Composition On Attached To Window ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġensure Composition Created () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Composition Created () ĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( child Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġmax Of ( 0 , ĠMeasure Spec . getSize ( width Measure Spec ) Ġ- Ġpadding Left Ġ- Ġpadding Right ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġmax Of ( 0 , ĠMeasure Spec . getSize ( height Measure Spec ) Ġ- Ġpadding Top Ġ- Ġpadding Bottom ) ĊĠĠĠĠĠĠĠ Ġchild . measure ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . make Measure Spec ( width , ĠMeasure Spec . get Mode ( width Measure Spec )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . make Measure Spec ( height , ĠMeasure Spec . get Mode ( height Measure Spec )), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild . meas ured Width Ġ+ Ġpadding Left Ġ+ Ġpadding Right , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild . meas ured Height Ġ+ Ġpadding Top Ġ+ Ġpadding Bottom ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Child At ( 0 )?. layout ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpadding Left , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpadding Top , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ- Ġleft Ġ- Ġpadding Right , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ- Ġtop Ġ- Ġpadding Bottom ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠBelow : Ġenforce Ġrestrictions Ġon Ġadding Ġchild Ġviews Ġto Ġthis ĠViewGroup ĊĊĠĠĠ Ġoverride Ġfun Ġadd View ( child : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Add View () ĊĠĠĠĠĠĠĠ Ġsuper . addView ( child ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd View ( child : ĠView ?, Ġindex : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Add View () ĊĠĠĠĠĠĠĠ Ġsuper . addView ( child , Ġindex ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd View ( child : ĠView ?, Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Add View () ĊĠĠĠĠĠĠĠ Ġsuper . addView ( child , Ġwidth , Ġheight ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd View ( child : ĠView ?, Ġparams : ĠLayout Params ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Add View () ĊĠĠĠĠĠĠĠ Ġsuper . addView ( child , Ġparams ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd View ( child : ĠView ?, Ġindex : ĠInt , Ġparams : ĠLayout Params ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Add View () ĊĠĠĠĠĠĠĠ Ġsuper . addView ( child , Ġindex , Ġparams ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd View In Layout ( child : ĠView ?, Ġindex : ĠInt , Ġparams : ĠLayout Params ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Add View () ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . addView In Layout ( child , Ġindex , Ġparams ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd View In Layout ( ĊĠĠĠĠĠĠĠ Ġchild : ĠView ?, ĊĠĠĠĠĠĠĠ Ġindex : ĠInt , ĊĠĠĠĠĠĠĠ Ġparams : ĠLayout Params ?, ĊĠĠĠĠĠĠĠ Ġprevent Request Layout : ĠBoolean ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Add View () ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . addView In Layout ( child , Ġindex , Ġparams , Ġprevent Request Layout ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġ[ android . view . View ] Ġthat Ġcan Ġhost ĠJet pack ĠCompose ĠUI Ġcontent . Ċ Ġ* ĠUse Ġ[ setContent ] Ġto Ġsupply Ġthe Ġcontent Ġcomp osable Ġfunction Ġfor Ġthe Ġview . Ċ Ġ* Ċ Ġ* ĠThis Ġ[ android . view . View ] Ġrequires Ġthat Ġthe Ġwindow Ġit Ġis Ġattached Ġto Ġcontains Ġa Ċ Ġ* Ġ[ View Tree Lifecycle Owner ]. ĠThis Ġ[ android x . lifecycle . Lifecycle Owner ] Ġis Ġused Ġto Ċ Ġ* Ġ[ dispose ][ android x . compose . runtime . Composition . dispose ] Ġof Ġthe Ġunderlying Ġcomposition Ċ Ġ* Ġwhen Ġthe Ġhost Ġ[ Lifecycle ] Ġis Ġdestroyed , Ġpermit ting Ġthe Ġview Ġto Ġbe Ġattached Ġand Ċ Ġ* Ġdet ached Ġrepeatedly Ġwhile Ġpre serving Ġthe Ġcomposition . ĠCall Ġ[ dispose Composition ] Ċ Ġ* Ġto Ġdispose Ġof Ġthe Ġunderlying Ġcomposition Ġearlier , Ġor Ġif Ġthe Ġview Ġis Ġnever Ġinitially Ċ Ġ* Ġattached Ġto Ġa Ġwindow . Ġ( The Ġrequirement Ġto Ġdispose Ġof Ġthe Ġcomposition Ġexplicitly Ċ Ġ* Ġin Ġthe Ġevent Ġthat Ġthe Ġview Ġis Ġnever Ġ( re ) attached Ġis Ġtemporary .) Ċ Ġ*/ Ċ class ĠCompose View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠAbstract Compose View ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcontent Ġ= Ġmutable State Of < (@ Composable Ġ() Ġ-> ĠUnit )? >( null ) ĊĊĠĠĠ Ġ@ Suppress (" Red undant Visibility Modifier ") ĊĠĠĠ Ġprotected Ġoverride Ġvar Ġshould Create Composition On Attached To Window : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġoverride Ġfun ĠContent () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent . value ?. invoke () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe ĠJet pack ĠCompose ĠUI Ġcontent Ġfor Ġthis Ġview . ĊĠĠĠĠ Ġ* ĠInitial Ġcomposition Ġwill Ġoccur Ġwhen Ġthe Ġview Ġbecomes Ġattached Ġto Ġa Ġwindow Ġor Ġwhen ĊĠĠĠĠ Ġ* Ġ[ create Composition ] Ġis Ġcalled , Ġwh iche ver Ġcomes Ġfirst . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Content ( content : Ġ@ Composable Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshould Create Composition On Attached To Window Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġthis . content . value Ġ= Ġcontent ĊĠĠĠĠĠĠĠ Ġif Ġ( is Attached To Window ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Composition () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ