package Ġru . ale shi . let sp lay cities . ui Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġkotlinx . coroutines . Comp letable Deferred Ċ import Ġkotlinx . coroutines . Deferred Ċ Ċ abstract Ġclass ĠBase Async Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Code Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġresult By Code Ġ= Ġmutable Map Of < Int , ĠComp letable Deferred < Activity Result ? >>() ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult By Code [ request Code ]?. let Ġ{ Ġdeferred Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeferred . complete ( Activity Result ( result Code , Ġdata )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult By Code . remove ( request Code ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLa unches Ġthe Ġintent Ġallowing Ġto Ġprocess Ġthe Ġresult Ġusing Ġawait () ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġintent Ġthe Ġintent Ġto Ġbe Ġlaunched . ĊĠĠĠĠ Ġ* Ġ@ return Ġresult Ġretrieved Ġfrom Ġ` startActivity For Result ` Ġor Ġ` null ` Ġwhen Ġno Ġsuitable Ġactivity ĊĠĠĠĠ Ġ* Ġfor Ġgiven Ġ[ intent ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġlaunch Intent Async ( intent : ĠIntent ): ĠDeferred < Activity Result ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Result Ġ= ĠComp letable Deferred < Activity Result ?> () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( intent . resolve Activity ( package Manager ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠresultCode Ġ= Ġcurrent Code ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult By Code [ result Code ] Ġ= Ġactivity Result ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠresultCode ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Result . complete ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġactivity Result ĊĠĠĠ Ġ} Ċ Ċ }