/* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 . samples . cr ane . details Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . annotation . Float Range Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Disposable Effect Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . samples . cr ane . R Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . platform . Local Lifecycle Owner Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Event Observer Ċ import Ġcom . google . android . libraries . maps . Google Map Ċ import Ġcom . google . android . libraries . maps . MapView Ċ Ċ /** Ċ Ġ* ĠRe members Ġa ĠMap View Ġand Ġgives Ġit Ġthe Ġlifecycle Ġof Ġthe Ġcurrent ĠLifecycle Owner Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠAs Ġthe ĠMap View Ġis Ġa ĠView Ġand Ġnot Ġa Ġcomp osable , Ġwe Ġwant Ġit Ġto Ġfollow Ġthe Ġlifecycle Ġof Ġthe ĠActivity Ġwhere Ġit 's Ġused Ġinstead Ġof Ġthe Ġlifecycle Ġof Ġthe ĠComp osition . ĠThat Ġmeans Ġwe Ġneed Ġto Ġcreate Ġa ĠLifecycle Event Observer Ġto Ġlisten Ġfor Ġlifecycle Ġevents Ġand Ġcall Ġthe Ġright Ġmethods Ġon Ġthe ĠMap View . ĠThen , Ġwe Ġneed Ġto Ġadd Ġthis Ġobserver Ġto Ġthe Ġcurrent Ġactivity 's Ġlifecycle . ĊĊ Ġ*/ ĊĊ Ċ // This Ġcan Ġbe Ġused Ġthe Ġsame Ġway Ġfor ĠEx op layer Ċ @ Composable Ċ fun Ġremember MapView With Lifecycle (): ĠMap View Ġ{ ĊĠĠĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĠĠĠĠ Ġval Ġmap View Ġ= Ġremember Ġ{ ĊĠĠĠĠĠĠĠ ĠMap View ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠR . id . map ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonCreate ( Bundle ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġobserver Ġis Ġadded Ġto Ġthe Ġcurrent Ġlifecycle , Ġand Ġit 'll Ġbe Ġremoved Ġwhenever Ġthe Ġcurrent Ġlifecycle Ġchanges Ġor Ġthis Ġcomp osable Ġleaves Ġthe ĠComp osition . ĠWith Ġthe Ġkeys Ġin ĠDis posable Effect , Ġif Ġeither Ġthe Ġlifecycle Ġor Ġthe Ġmap View Ġchange , Ġthe Ġobserver Ġwill Ġbe Ġremoved Ġand Ġadded Ġagain Ġto Ġthe Ġright Ġlifecycle . ĊĊĠĠĠ ĠWith Ġthe Ġchanges Ġwe 've Ġjust Ġmade , Ġthe ĠMap View Ġwill Ġalways Ġfollow Ġthe Ġlifecycle Ġof Ġthe Ġcurrent ĠLifecycle Owner Ġand Ġits Ġbehavior Ġwould Ġbe Ġjust Ġas Ġif Ġit Ġwas Ġused Ġin Ġthe ĠView Ġworld . ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġval Ġlifecycle Ġ= ĠLocal Lifecycle Owner . current . lifecycle ĊĠĠĠ ĠDis posable Effect ( key 1 Ġ= Ġlifecycle , Ġkey 2 Ġ= Ġmap View ){ ĊĠĠĠĠĠĠĠ Ġval Ġlifecycle Observer Ġ= Ġget Map Lifecycle Observer ( map View ) ĊĠĠĠĠĠĠĠ Ġlifecycle . add Observer ( lifecycle Observer ) ĊĠĠĠĠĠĠĠ Ġon Dispose { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle . remove Observer ( lifecycle Observer ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġmap View Ċ } Ċ Ċ /** Ċ Ġ* Ġ ĠWe Ġneed Ġa Ġside Ġeffect Ġthat Ġtells Ġus Ġwhen Ġthe Ġeffect Ġis Ġleaving Ġthe ĠComp osition Ġso Ġthat Ġwe Ġcan Ġperform Ġsome Ġcleanup Ġcode . ĠThe Ġside - effect ĠAPI Ġwe 're Ġlooking Ġfor Ġis ĠDis posable Effect . Ċ Disposable Effect Ġis Ġmeant Ġfor Ġside Ġeffects Ġthat Ġneed Ġto Ġbe Ġcleaned Ġup Ġafter Ġthe Ġkeys Ġchange Ġor Ġthe Ġcomp osable Ġleaves Ġthe ĠComp osition . ĠThe Ġfinal Ġremember MapView With Lifecycle Ġcode Ġdoes Ġexactly Ġthat . ĠImplement Ġthe Ġfollowing Ġlines Ġin Ġyour Ġproject : ĊĊ Ġ*/ Ċ private Ġfun Ġget Map Lifecycle Observer ( map View : ĠMap View ): ĠLifecycle Event Observer Ġ= ĊĠĠĠ ĠLifecycle Event Observer Ġ{ Ġ_, Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLifecycle . Event . ON _ CREATE Ġ-> Ġmap View . onCreate ( Bundle ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLifecycle . Event . ON _ START Ġ-> Ġmap View . onStart () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLifecycle . Event . ON _ RE SU ME Ġ-> Ġmap View . on Resume () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLifecycle . Event . ON _ PAUSE Ġ-> Ġmap View . on Pause () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLifecycle . Event . ON _ STOP Ġ-> Ġmap View . on Stop () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLifecycle . Event . ON _ DESTROY Ġ-> Ġmap View . on Destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ fun ĠGoogle Map . set Zoom ( ĊĠĠĠ Ġ@ Float Range ( from Ġ= ĠMin Zoom . toDouble (), Ġto Ġ= ĠMax Zoom . toDouble ()) Ġzoom : ĠFloat Ċ ) Ġ{ ĊĠĠĠ Ġreset MinMax Zoom Preference () ĊĠĠĠ Ġset Min Zoom Preference ( zoom ) ĊĠĠĠ Ġset Max Zoom Preference ( zoom ) Ċ } Ċ