package Ġcom . soft bank robot ics . q is d kt utorial s . ui . tutorials . motion . extend map Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġcom . al de bar an . qi . Future Ċ import Ġcom . al de bar an . qi . Promise Ċ import Ġcom . al de bar an . qi . sdk . Qi Context Ċ import Ġcom . al de bar an . qi . sdk . Qi SDK Ċ import Ġcom . al de bar an . qi . sdk . Robot Lifecycle Callbacks Ċ import Ġcom . al de bar an . qi . sdk .` object `. act uation . Ex ploration Map Ċ import Ġcom . al de bar an . qi . sdk .` object `. act uation . Localization Status Ċ import Ġcom . al de bar an . qi . sdk .` object `. act uation . Local ize And Map Ċ import Ġcom . al de bar an . qi . sdk . builder . Local ize And Map Builder Ċ import Ġcom . al de bar an . qi . sdk . builder . Say Builder Ċ import Ġcom . al de bar an . qi . sdk . util . Future Utils Ċ import Ġcom . soft bank robot ics . q is d kt utorial s . R Ċ import Ġcom . soft bank robot ics . q is d kt utorial s . ui . conversation . Conversation Binder Ċ import Ġcom . soft bank robot ics . q is d kt utorial s . ui . conversation . Conversation ItemType Ċ import Ġcom . soft bank robot ics . q is d kt utorial s . ui . tutorials . Tutorial Activity Ċ import Ġkotlinx . android . synt hetic . main . activity _ ex ploration _ map _ representation _ tutorial .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* ĠThe Ġtutorial Ġto Ġextend Ġan ĠEx ploration Map . Ċ Ġ*/ Ċ class ĠMap Extension Tutorial Activity Ġ: ĠTutorial Activity (), ĠRobot Lifecycle Callbacks Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġconversation Binder : ĠCon versation Binder ? Ġ= Ġnull ĊĠĠĠ Ġ// ĠThe ĠQ i Context Ġprovided Ġby Ġthe ĠQ i SDK . ĊĠĠĠ Ġprivate Ġvar Ġq i Context : ĠQ i Context ? Ġ= Ġnull ĊĠĠĠ Ġ// ĠThe Ġinitial ĠEx ploration Map . ĊĠĠĠ Ġprivate Ġvar Ġinitial Ex ploration Map : ĠEx ploration Map ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġbutton ĠonClick Ġlistener . ĊĠĠĠĠĠĠĠ Ġstart Mapping Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe ĠActivity Ġowns Ġthe Ġfocus . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġq i Context Ġ= Ġq i Context Ġ?: Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġthe Ġmapping Ġstep . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Mapping Step ( qi Context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġextend Map Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġan Ġinitial Ġmap Ġis Ġavailable . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Ex ploration Map Ġ= Ġinitial Ex ploration Map Ġ?: Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe ĠActivity Ġowns Ġthe Ġfocus . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġq i Context Ġ= Ġq i Context Ġ?: Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġthe Ġmap Ġextension Ġstep . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Map Extension Step ( initial Ex ploration Map , Ġq i Context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġthe ĠRobot Lifecycle Callbacks Ġto Ġthis ĠActivity . ĊĠĠĠĠĠĠĠ ĠQ i SDK . register ( this , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġ// ĠReset ĠUI Ġand Ġvariables Ġstate . ĊĠĠĠĠĠĠĠ Ġstart Mapping Button . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġextend Map Button . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġinitial Ex ploration Map Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmap ImageView . setImage Bitmap ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠUn register Ġthe ĠRobot Lifecycle Callbacks Ġfor Ġthis ĠActivity . ĊĠĠĠĠĠĠĠ ĠQ i SDK . unregister ( this , Ġthis ) ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġlayout Id Ġ= ĠR . layout . activity _ ex ploration _ map _ representation _ tutorial ĊĊĠĠĠ Ġoverride Ġfun Ġon Robot Focus G ained ( qi Context : ĠQ i Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠStore Ġthe Ġprovided ĠQ i Context . ĊĠĠĠĠĠĠĠ Ġthis . qi Context Ġ= Ġq i Context ĊĊĠĠĠĠĠĠĠ Ġ// ĠBind Ġthe Ġcon vers ational Ġevents Ġto Ġthe Ġview . ĊĠĠĠĠĠĠĠ Ġval Ġconversation Status Ġ= Ġq i Context . conversation . status ( qi Context . robot Context ) ĊĠĠĠĠĠĠĠ Ġconversation Binder Ġ= Ġconversation _ view . bind Conversation To ( conversation Status ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsay Ġ= ĠS ay Builder . with ( qi Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Text (" I Ġcan Ġdisplay Ġthe Ġgraphical Ġrepresentation Ġof Ġa Ġmap . ĠClick Ġon Ġstart Ġmapping Ġto Ġtry !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġsay . run () ĊĊĠĠĠĠĠĠĠ Ġ// ĠEnable Ġ" start Ġmapping " Ġbutton . ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Mapping Button . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Robot Focus Lost () Ġ{ ĊĠĠĠĠĠĠĠ Ġconversation Binder ?. unbind () ĊĊĠĠĠĠĠĠĠ Ġ// ĠRemove Ġthe ĠQ i Context . ĊĠĠĠĠĠĠĠ Ġthis . qi Context Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Robot Focus Ref used ( reason : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNothing Ġhere . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Mapping Step ( qi Context : ĠQ i Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay Line (" Start Ġmapping ...", ĠCon versation ItemType . INFO _ LOG ) ĊĠĠĠĠĠĠĠ Ġ// ĠDisable Ġ" start Ġmapping " Ġbutton . ĊĠĠĠĠĠĠĠ Ġstart Mapping Button . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠMap Ġthe Ġsur round ings Ġand Ġget Ġthe Ġmap . ĊĠĠĠĠĠĠĠ Ġmap Sur round ings ( qi Context ). then Consume Ġ{ Ġfuture Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( future . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Line (" Mapping Ġdone , Ġretrieving Ġmap Ġrepresentation ...", ĠCon versation ItemType . INFO _ LOG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexploration Map Ġ= Ġfuture . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStore Ġthe Ġinitial Ġmap . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . initial Ex ploration Map Ġ= Ġexploration Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConvert Ġthe Ġmap Ġto Ġa Ġbitmap . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġmap To Bitmap ( ex ploration Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Line (" Map Ġrepresentation Ġretrieved .", ĠCon versation ItemType . INFO _ LOG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġthe Ġbitmap Ġand Ġenable Ġ" extend Ġmap " Ġbutton . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lifecycle . currentState . is At Least ( Lifecycle . State . RE SU MED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Map ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextend Map Button . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsay Ġ= ĠS ay Builder . with ( qi Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Text (" I Ġcan Ġnow Ġextend Ġthis Ġmap . ĠClick Ġon Ġextend Ġmap , Ġthen Ġgive Ġme Ġa Ġtour Ġto Ġtry !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsay . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( future . has Error ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Line (" Mapping Ġfailed : Ġ${ future . errorMessage }", ĠCon versation ItemType . ERROR _ LOG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġoperation Ġis Ġnot Ġa Ġsuccess , Ġre - enable Ġ" start Ġmapping " Ġbutton . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lifecycle . currentState . is At Least ( Lifecycle . State . RE SU MED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Mapping Button . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Map Extension Step ( initial Ex ploration Map : ĠEx ploration Map , Ġq i Context : ĠQ i Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay Line (" Starting Ġmap Ġextension ...", ĠCon versation ItemType . INFO _ LOG ) ĊĠĠĠĠĠĠĠ Ġ// ĠDisable Ġ" extend Ġmap " Ġbutton . ĊĠĠĠĠĠĠĠ Ġextend Map Button . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠStart Ġthe Ġmap Ġextension Ġand Ġnotify Ġeach Ġtime Ġthe Ġmap Ġis Ġupdated . ĊĠĠĠĠĠĠĠ Ġextend Map ( initial Ex ploration Map , Ġq i Context ) Ġ{ Ġupdated Map Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConvert Ġthe Ġmap Ġto Ġa Ġbitmap . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdated Bitmap Ġ= Ġmap To Bitmap ( updated Map ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Line (" New Ġmap Ġrepresentation Ġavailable .", ĠCon versation ItemType . INFO _ LOG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġthe Ġbitmap . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lifecycle . currentState . is At Least ( Lifecycle . State . RE SU MED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Map ( updated Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. then Consume Ġ{ Ġfuture Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġoperation Ġis Ġnot Ġa Ġsuccess , Ġre - enable Ġ" extend Ġmap " Ġbutton . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! future . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( future . has Error ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Line (" Map Ġextension Ġfailed : Ġ${ future . errorMessage }", ĠCon versation ItemType . ERROR _ LOG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lifecycle . currentState . is At Least ( Lifecycle . State . RE SU MED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextend Map Button . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmap Sur round ings ( qi Context : ĠQ i Context ): ĠFuture < Ex ploration Map > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa ĠPromise Ġto Ġset Ġthe Ġoperation Ġstate Ġlater . ĊĠĠĠĠĠĠĠ Ġval Ġpromise Ġ= ĠPromise < Ex ploration Map >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġsomething Ġtries Ġto Ġcancel Ġthe Ġassociated ĠFuture , Ġdo Ġcancel Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Cancel Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . future . is Done ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Cancelled () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa ĠLocal ize And Map , Ġrun Ġit , Ġand Ġkeep Ġthe ĠFuture . ĊĠĠĠĠĠĠĠ Ġval Ġlocal ize And Map Future Ġ= ĠLocal ize And Map Builder . with ( qi Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build Async () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Then Compose Ġ{ Ġlocal ize And Map Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġan ĠOn Status Changed Listener Ġto Ġknow Ġwhen Ġthe Ġrobot Ġis Ġlocalized . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ize And Map . add On Status Changed Listener Ġ{ Ġstatus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status Ġ== ĠLocalization Status . LOCAL IZED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġthe Ġmap . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexploration Map Ġ= Ġlocal ize And Map . dump Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe ĠPromise Ġstate Ġin Ġsuccess , Ġwith Ġthe ĠEx ploration Map . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! promise . future . is Done ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpromise . setValue ( ex ploration Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRun Ġthe ĠLocal ize And Map . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ize And Map . async (). run (). then Consume Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRemove Ġthe ĠOn Status Changed Listener . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ize And Map . removeAll On Status Changed Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġcase Ġof Ġerror , Ġforward Ġit Ġto Ġthe ĠPromise . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . has Error () Ġ&& Ġ! promise . future . is Done ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpromise . setError ( it . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠReturn Ġthe ĠFuture Ġassociated Ġto Ġthe ĠPromise . ĊĠĠĠĠĠĠĠ Ġreturn Ġpromise . future . then Compose Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStop Ġthe ĠLocal ize And Map . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ize And Map Future . cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ then Compose Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextend Map ( ex ploration Map : ĠEx ploration Map , Ġq i Context : ĠQ i Context , Ġupdated Map Callback : Ġ( Ex ploration Map ) Ġ-> ĠUnit ): ĠFuture < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa ĠPromise Ġto Ġset Ġthe Ġoperation Ġstate Ġlater . ĊĠĠĠĠĠĠĠ Ġval Ġpromise Ġ= ĠPromise < Void >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġsomething Ġtries Ġto Ġcancel Ġthe Ġassociated ĠFuture , Ġdo Ġcancel Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Cancel Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . future . is Done ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Cancelled () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa ĠLocal ize And Map Ġwith Ġthe Ġinitial Ġmap , Ġrun Ġit , Ġand Ġkeep Ġthe ĠFuture . ĊĠĠĠĠĠĠĠ Ġval Ġlocal ize And Map Future Ġ= ĠLocal ize And Map Builder . with ( qi Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Map ( ex ploration Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build Async () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Then Compose Ġ{ Ġlocal ize And Map Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa ĠFuture Ġfor Ġmap Ġnotification . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpublish Ex ploration Map Future : ĠFuture < Void >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġan ĠOn Status Changed Listener Ġto Ġknow Ġwhen Ġthe Ġrobot Ġis Ġlocalized . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ize And Map . add On Status Changed Listener Ġ{ Ġstatus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status Ġ== ĠLocalization Status . LOCAL IZED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġthe Ġmap Ġnotification Ġprocess . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Ex ploration Map Future Ġ= Ġpublish Ex ploration Map ( localize And Map , Ġupdated Map Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRun Ġthe ĠLocal ize And Map . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ize And Map . async (). run (). then Consume Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRemove Ġthe ĠOn Status Changed Listener . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ize And Map . removeAll On Status Changed Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStop Ġthe Ġmap Ġnotification Ġprocess . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Ex ploration Map Future ?. cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġcase Ġof Ġerror , Ġforward Ġit Ġto Ġthe ĠPromise . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . has Error () Ġ&& Ġ! promise . future . is Done ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpromise . setError ( it . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠReturn Ġthe ĠFuture Ġassociated Ġto Ġthe ĠPromise . ĊĠĠĠĠĠĠĠ Ġreturn Ġpromise . future . then Compose Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStop Ġthe ĠLocal ize And Map . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ize And Map Future . cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ then Compose Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpublish Ex ploration Map ( localize And Map : ĠLocal ize And Map , Ġupdated Map Callback : Ġ( Ex ploration Map ) Ġ-> ĠUnit ): ĠFuture < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġthe Ġmap . ĊĠĠĠĠĠĠĠ Ġreturn Ġlocal ize And Map . async (). dump Map (). and Then Compose Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCall Ġthe Ġcallback Ġwith Ġthe Ġmap . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Map Callback ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWait Ġfor Ġ 2 Ġseconds . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFuture Utils . wait ( 2 L , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġ}. and Then Compose Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCall Ġthe Ġmethod Ġrecursively . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Ex ploration Map ( localize And Map , Ġupdated Map Callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmap To Bitmap ( ex ploration Map : ĠEx ploration Map ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe ĠByteBuffer Ġcontaining Ġthe Ġmap Ġgraphical Ġrepresentation . ĊĠĠĠĠĠĠĠ Ġval Ġbyte Buffer Ġ= Ġexploration Map . top Graph ical Representation . image . data . apply Ġ{ Ġre wind () Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġbuffer Ġsize . ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġbyte Buffer . remaining () ĊĠĠĠĠĠĠĠ Ġ// ĠTransform Ġthe Ġbuffer Ġto Ġa ĠByteArray . ĊĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= ĠByteArray ( size ). also Ġ{ Ġbyte Buffer . get ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠTransform Ġthe ĠByteArray Ġto Ġa ĠBitmap . ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode ByteArray ( byteArray , Ġ 0 , Ġsize ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisplay Map ( bitmap : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe ĠImageView Ġbitmap . ĊĠĠĠĠĠĠĠ Ġmap ImageView . setImage Bitmap ( bitmap ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisplay Line ( text : ĠString , Ġtype : ĠCon versation ItemType ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lifecycle . currentState . is At Least ( Lifecycle . State . RE SU MED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconversation _ view . add Line ( text , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ