/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 Ġ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 Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . annotation . MainThread Ċ import Ġorg . jetbrains . annotations . Test Only Ċ import Ġjava . util . Weak HashMap Ċ Ċ // ĠTODO ( l mr ): Ġconsider Ġmoving Ġthis Ġto Ġthe ĠView Composer Ġdirectly Ċ /** Ċ Ġ* ĠA Ġglobal Ġnamespace Ġto Ġhold Ġsome ĠCompose Ġutility Ġmethods , Ġsuch Ġas Ġ[ Compose . compose Into ] Ġand Ċ Ġ* Ġ[ Compose . dispose Composition ]. Ċ Ġ*/ Ċ object ĠCompose Ġ{ ĊĊĠĠĠ Ġprivate Ġclass ĠRoot Ġ: ĠComponent () Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġupdate () Ġ= Ġcomposer . compose () ĊĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġcomp osable : Ġ@ Composable () Ġ() Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġcomposer : ĠComp osition Context ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" PLUGIN _ ERROR ") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcc Ġ= Ġcurrent Composer NonNull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcc . start Group ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcc . end Group () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠTAG _ ROOT _ COMPONENT Ġ= Ġ" compose Root Component ". hashCode () ĊĠĠĠ Ġprivate Ġval ĠE MIT TABLE _ ROOT _ COMPONENT Ġ= ĠWeak HashMap < Emit table , ĠComponent >() ĊĊĠĠĠ Ġprivate Ġfun Ġget Root Component ( view : ĠView ): ĠComponent ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġview . getTag ( TAG _ ROOT _ COMPONENT ) Ġas ? ĠComponent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO ( l mr ): Ġused Ġby Ġtests Ġonly . Ġconsider Ġways Ġto Ġremove . ĊĠĠĠ Ġinternal Ġfun Ġfind Root ( view : ĠView ): ĠComponent ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnode : ĠView ? Ġ= Ġview ĊĠĠĠĠĠĠĠ Ġwhile Ġ( node Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcc Ġ= Ġnode . getTag ( TAG _ ROOT _ COMPONENT ) Ġas ? ĠComponent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cc Ġ!= Ġnull ) Ġreturn Ġcc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġ= Ġnode . parent Ġas ? ĠView ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġset Root ( view : ĠView , Ġcomponent : ĠComponent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . setTag ( TAG _ ROOT _ COMPONENT , Ġcomponent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Root Component ( emit table : ĠEmit table ): ĠComponent ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠE MIT TABLE _ ROOT _ COMPONENT [ emit table ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Root ( emit table : ĠEmit table , Ġcomponent : ĠComponent ) Ġ{ ĊĠĠĠĠĠĠĠ ĠE MIT TABLE _ ROOT _ COMPONENT [ emit table ] Ġ= Ġcomponent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ suppress ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test Only ĊĠĠĠ Ġfun Ġcreate Composition Context ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġgroup : ĠAny , ĊĠĠĠĠĠĠĠ Ġcomponent : ĠComponent , ĊĠĠĠĠĠĠĠ Ġreference : ĠComp osition Reference ? ĊĠĠĠ Ġ): ĠComp osition Context Ġ= ĠComp osition Context . prepare ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġgroup , ĊĠĠĠĠĠĠĠ Ġcomponent , ĊĠĠĠĠĠĠĠ Ġreference ĊĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( group ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠViewGroup Ġ-> Ġset Root ( group , Ġcomponent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEmit table Ġ-> Ġset Root ( group , Ġcomponent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġthe Ġway Ġto Ġinitiate Ġa Ġcomposition . ĠThe Ġ[ comp osable ] Ġpassed Ġin Ġwill Ġbe Ġexecuted ĊĠĠĠĠ Ġ* Ġto Ġcompose Ġthe Ġchildren Ġof Ġthe Ġpassed Ġin Ġ[ container ]. Ġ ĠOptionally , Ġa Ġ[ parent ] ĊĠĠĠĠ Ġ* Ġ[ Composition Reference ] Ġcan Ġbe Ġprovided Ġto Ġmake Ġthe Ġcomposition Ġbehave Ġas Ġa Ġsub - composition Ġof ĊĠĠĠĠ Ġ* Ġthe Ġparent . Ġ ĠThe Ġchildren Ġof Ġ[ container ] Ġwill Ġbe Ġupdated Ġand Ġmaintained Ġby Ġthe Ġtime Ġthis ĊĠĠĠĠ Ġ* Ġmethod Ġreturns . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIt Ġis Ġimportant Ġto Ġcall Ġ[ dispose Composition ] Ġwhenever Ġthis Ġview Ġis Ġno Ġlonger Ġneeded Ġin Ġorder ĊĠĠĠĠ Ġ* Ġto Ġrelease Ġresources . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontainer ĠThe Ġview Ġwhose Ġchildren Ġis Ġbeing Ġcomposed . ĊĠĠĠĠ Ġ* Ġ@ param Ġparent ĠThe Ġparent Ġcomposition Ġreference , Ġif Ġapplicable . ĠDefault Ġis Ġnull . ĊĠĠĠĠ Ġ* Ġ@ param Ġcomp osable ĠThe Ġcomp osable Ġfunction Ġintended Ġto Ġcompose Ġthe Ġchildren Ġof Ġ[ container ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠCompose . dispose Composition ĊĠĠĠĠ Ġ* Ġ@ see ĠComp osable ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// ĠTODO ( l mr ): Ġrename Ġto Ġcompose ? ĊĠĠĠ Ġ@ MainThread ĊĠĠĠ Ġfun Ġcompose Into ( ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup , ĊĠĠĠĠĠĠĠ Ġparent : ĠComp osition Reference ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġcomp osable : Ġ@ Composable () Ġ() Ġ-> ĠUnit ĊĠĠĠ Ġ): ĠComp osition Context ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġroot Ġ= Ġget Root Component ( container ) Ġas ? ĠRoot ĊĠĠĠĠĠĠĠ Ġif Ġ( root Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . removeAll Views () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Ġ= ĠRoot () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . comp osable Ġ= Ġcomp osable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Root ( container , Ġroot ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcc Ġ= ĠComp osition Context . prepare ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . composer Ġ= Ġcc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . update () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcc ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . comp osable Ġ= Ġcomp osable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . update () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDis poses Ġany Ġcomposition Ġpreviously Ġrun Ġwith Ġ[ container ] Ġas Ġthe Ġroot . ĠThis Ġwill ĊĠĠĠĠ Ġ* Ġrelease Ġany Ġresources Ġthat Ġhave Ġbeen Ġbuilt Ġaround Ġthe Ġcomposition , Ġincluding Ġall Ġ[ on Dispose ] ĊĠĠĠĠ Ġ* Ġcallbacks Ġthat Ġhave Ġbeen Ġregistered Ġwith Ġ[ Composition Lifecycle Observer ] Ġobjects . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIt Ġis Ġimportant Ġto Ġcall Ġthis Ġfor Ġany Ġ[ Compose . compose Into ] Ġcall Ġthat Ġis Ġmade , Ġor Ġelse Ġyou Ġmay Ġhave ĊĠĠĠĠ Ġ* Ġmemory Ġle aks Ġin Ġyour Ġapplication . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontainer ĠThe Ġview Ġthat Ġwas Ġpassed Ġinto Ġ[ Compose . compose Into ] Ġas Ġthe Ġroot Ġcontainer Ġof Ġthe Ġcomposition ĊĠĠĠĠ Ġ* Ġ@ param Ġparent ĠThe Ġparent Ġcomposition Ġreference , Ġif Ġapplicable . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠCompose . compose Into ĊĠĠĠĠ Ġ* Ġ@ see ĠComp osition Lifecycle Observer ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ MainThread ĊĠĠĠ Ġfun Ġdispose Composition ( container : ĠViewGroup , Ġparent : ĠComp osition Reference ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtemporary Ġeasy Ġway Ġto Ġcall Ġcorrect Ġl ifec yc les Ġon Ġeverything ĊĠĠĠĠĠĠĠ Ġ// Ġneed Ġto Ġremove Ġcomposition Context Ġfrom Ġcontext Ġmap Ġas Ġwell ĊĠĠĠĠĠĠĠ Ġcompose Into ( container , Ġparent ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠ Ġcontainer . setTag ( TAG _ ROOT _ COMPONENT , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġthe Ġway Ġto Ġinitiate Ġa Ġcomposition . ĠThe Ġ[ comp osable ] Ġpassed Ġin Ġwill Ġbe Ġexecuted ĊĠĠĠĠ Ġ* Ġto Ġcompose Ġthe Ġchildren Ġof Ġthe Ġpassed Ġin Ġ[ container ]. Ġ ĠOptionally , Ġa Ġ[ parent ] ĊĠĠĠĠ Ġ* Ġ[ Composition Reference ] Ġcan Ġbe Ġprovided Ġto Ġmake Ġthe Ġcomposition Ġbehave Ġas Ġa Ġsub - composition Ġof ĊĠĠĠĠ Ġ* Ġthe Ġparent . Ġ ĠThe Ġchildren Ġof Ġ[ container ] Ġwill Ġbe Ġupdated Ġand Ġmaintained Ġby Ġthe Ġtime Ġthis ĊĠĠĠĠ Ġ* Ġmethod Ġreturns . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIt Ġis Ġimportant Ġto Ġcall Ġ[ Compose . dispose Composition ] Ġwhenever Ġthis Ġview Ġis Ġno Ġlonger Ġneeded Ġin Ġorder ĊĠĠĠĠ Ġ* Ġto Ġrelease Ġresources . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontainer ĠThe Ġemit table Ġwhose Ġchildren Ġis Ġbeing Ġcomposed . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠThe Ġandroid Ġ[ Context ] Ġto Ġassociate Ġwith Ġthis Ġcomposition . ĊĠĠĠĠ Ġ* Ġ@ param Ġparent ĠThe Ġparent Ġcomposition Ġreference , Ġif Ġapplicable . ĠDefault Ġis Ġnull . ĊĠĠĠĠ Ġ* Ġ@ param Ġcomp osable ĠThe Ġcomp osable Ġfunction Ġintended Ġto Ġcompose Ġthe Ġchildren Ġof Ġ[ container ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠCompose . dispose Composition ĊĠĠĠĠ Ġ* Ġ@ see ĠComp osable ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// ĠTODO ( l mr ): Ġrename Ġto Ġcompose ? ĊĠĠĠ Ġ@ MainThread ĊĠĠĠ Ġfun Ġcompose Into ( ĊĠĠĠĠĠĠĠ Ġcontainer : ĠEmit table , ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġparent : ĠComp osition Reference ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġcomp osable : Ġ@ Composable () Ġ() Ġ-> ĠUnit ĊĠĠĠ Ġ): ĠComp osition Context Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġroot Ġ= Ġget Root Component ( container ) Ġas ? ĠRoot ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( root Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Ġ= ĠRoot () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . comp osable Ġ= Ġcomp osable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Root ( container , Ġroot ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcc Ġ= ĠComp osition Context . prepare ( context , Ġcontainer , Ġroot , Ġparent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . composer Ġ= Ġcc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . update () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcc ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . comp osable Ġ= Ġcomp osable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . update () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . composer ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDis poses Ġany Ġcomposition Ġpreviously Ġrun Ġwith Ġ[ container ] Ġas Ġthe Ġroot . ĠThis Ġwill ĊĠĠĠĠ Ġ* Ġrelease Ġany Ġresources Ġthat Ġhave Ġbeen Ġbuilt Ġaround Ġthe Ġcomposition , Ġincluding Ġall Ġ[ on Dispose ] ĊĠĠĠĠ Ġ* Ġcallbacks Ġthat Ġhave Ġbeen Ġregistered Ġwith Ġ[ Composition Lifecycle Observer ] Ġobjects . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIt Ġis Ġimportant Ġto Ġcall Ġthis Ġfor Ġany Ġ[ Compose . compose Into ] Ġcall Ġthat Ġis Ġmade , Ġor Ġelse Ġyou Ġmay Ġhave ĊĠĠĠĠ Ġ* Ġmemory Ġle aks Ġin Ġyour Ġapplication . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontainer ĠThe Ġview Ġthat Ġwas Ġpassed Ġinto Ġ[ Compose . compose Into ] Ġas Ġthe Ġroot Ġcontainer Ġof Ġthe Ġcomposition ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠThe Ġandroid Ġ[ Context ] Ġassociated Ġwith Ġthe Ġcomposition ĊĠĠĠĠ Ġ* Ġ@ param Ġparent ĠThe Ġparent Ġcomposition Ġreference , Ġif Ġapplicable . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠCompose . compose Into ĊĠĠĠĠ Ġ* Ġ@ see ĠComp osition Lifecycle Observer ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ MainThread ĊĠĠĠ Ġfun Ġdispose Composition ( ĊĠĠĠĠĠĠĠ Ġcontainer : ĠEmit table , ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġparent : ĠComp osition Reference ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtemporary Ġeasy Ġway Ġto Ġcall Ġcorrect Ġl ifec yc les Ġon Ġeverything ĊĠĠĠĠĠĠĠ Ġcompose Into ( container , Ġcontext , Ġparent ) Ġ{} ĊĠĠĠĠĠĠĠ ĠE MIT TABLE _ ROOT _ COMPONENT . remove ( container ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠSets Ġthe Ġcontent View Ġof Ġan Ġactivity Ġto Ġa ĠFrame Layout , Ġand Ġcomp o ses Ġthe Ġcontents Ġof Ġthe Ġlayout Ċ Ġ* Ġwith Ġthe Ġpassed Ġin Ġ[ comp osable ]. ĠThis Ġis Ġa Ġconvenience Ġmethod Ġaround Ġ[ Compose . compose Into ]. Ċ Ġ* Ċ Ġ* Ġ@ see ĠCompose . compose Into Ċ Ġ* Ġ@ see ĠActivity . set ContentView Ċ Ġ*/ Ċ fun ĠActivity . setContent ( comp osable : Ġ@ Composable () Ġ() Ġ-> ĠUnit ): ĠComp osition Context ? Ġ{ ĊĠĠĠ Ġ// ĠIf Ġthere Ġis Ġalready Ġa ĠFrame Layout Ġin Ġthe Ġroot , Ġwe Ġassume Ġwe Ġwant Ġto Ġcompose ĊĠĠĠ Ġ// Ġinto Ġit Ġinstead Ġof Ġcreate Ġa Ġnew Ġone . ĠThis Ġallows Ġfor Ġ` setContent ` Ġto Ġbe ĊĠĠĠ Ġ// Ġcalled Ġmultiple Ġtimes . ĊĠĠĠ Ġval Ġroot Ġ= Ġwindow ĊĠĠĠĠĠĠĠ Ġ. decor View ĊĠĠĠĠĠĠĠ Ġ. findViewById < ViewGroup >( android . R . id . content ) ĊĠĠĠĠĠĠĠ Ġ. getChild At ( 0 ) Ġas ? ĠViewGroup ĊĠĠĠ Ġ?: ĠFrame Layout ( this ). also Ġ{ ĠsetContentView ( it ) Ġ} ĊĠĠĠ Ġreturn Ġroot . compose ( comp osable ) Ċ } Ċ Ċ /** Ċ Ġ* ĠDis poses Ġof Ġa Ġcomposition Ġthat Ġwas Ġstarted Ġusing Ġ[ setContent ]. ĠThis Ġis Ġa Ġconvenience Ġmethod Ċ Ġ* Ġaround Ġ[ Compose . dispose Composition ]. Ċ Ġ* Ċ Ġ* Ġ@ see Ġset Content Ċ Ġ* Ġ@ see ĠCompose . dispose Composition Ċ Ġ*/ Ċ fun ĠActivity . dispose Composition () Ġ{ ĊĠĠĠ Ġval Ġview Ġ= Ġwindow ĊĠĠĠĠĠĠĠ Ġ. decor View ĊĠĠĠĠĠĠĠ Ġ. findViewById < ViewGroup >( android . R . id . content ) ĊĠĠĠĠĠĠĠ Ġ. getChild At ( 0 ) Ġas ? ĠViewGroup ĊĠĠĠĠĠĠĠ Ġ?: Ġerror (" No Ġroot Ġview Ġfound ") ĊĠĠĠ ĠCompose . dispose Composition ( view , Ġnull ) Ċ } Ċ Ċ /** Ċ Ġ* ĠComp o ses Ġthe Ġchildren Ġof Ġthe Ġview Ġwith Ġthe Ġpassed Ġin Ġ[ comp osable ]. ĠThis Ġis Ġa Ġconvenience Ġmethod Ċ Ġ* Ġaround Ġ[ Compose . compose Into ]. Ċ Ġ* Ċ Ġ* Ġ@ see ĠCompose . compose Into Ċ Ġ* Ġ@ see Ġdispose Composition Ċ Ġ*/ Ċ fun ĠViewGroup . compose ( comp osable : Ġ@ Composable () Ġ() Ġ-> ĠUnit ): ĠComp osition Context ? Ġ= ĊĠĠĠ ĠCompose . compose Into ( this , Ġnull , Ġcomp osable ) Ċ Ċ /** Ċ Ġ* ĠDis poses Ġof Ġa Ġcomposition Ġof Ġthe Ġchildren Ġof Ġthis Ġview . ĠThis Ġis Ġa Ġconvenience Ġmethod Ġaround Ċ Ġ* Ġ[ Compose . dispose Composition ]. Ċ Ġ* Ċ Ġ* Ġ@ see ĠCompose . dispose Composition Ċ Ġ* Ġ@ see Ġcompose Ċ Ġ*/ Ċ fun ĠViewGroup . dispose Composition () Ġ= ĠCompose . dispose Composition ( this , Ġnull ) Ċ