package Ġcom . le ov p . android base . utils . ui Ċ Ċ import Ġandroidx . activity . result . Activity Result Caller Ċ import Ġandroidx . activity . result . Activity Result Launcher Ċ import Ġandroidx . activity . result . contract . Activity Result Contract Ċ import Ġcom . le ov p . min _ base _ sdk . fail Ċ Ċ /** Ċ Ġ* ĠAuthor : ĠMichael ĠLe o Ċ Ġ* ĠDate : Ġ 2 0 2 1 / 1 0 / 1 3 Ġ 1 4 : 5 0 Ċ Ġ* Ċ Ġ* ĠUsage : Ċ Ġ* Ġ``` kotlin Ċ Ġ* Ġprivate Ġval Ġmy Activity Launcher Ġ= Ċ Ġ* ĠĠĠĠĠ ĠBetter Activity Result . register For Activity Result ( this , ĠActivity Result Contracts . Start Activity For Result ()) Ġ{ Ġresult Ġ-> Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġif ( result . result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġresult . data ?. getString Extra (" extra ") Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠĠ Ġ} Ċ Ġ* Ġmy Activity Launcher . launch ( Intent ( this , ĠLog Activity :: class . java )) Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ class ĠBetter Activity Result < I , ĠO > Ġprivate Ġconstructor ( ĊĠĠĠ Ġcaller : ĠActivity Result Caller , ĊĠĠĠ Ġcontract : ĠActivity Result Contract < I , ĠO >, ĊĠĠĠ Ġprivate Ġvar Ġdefault Result : Ġ(( O ) Ġ-> ĠUnit )? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġinternal Result : Ġ(( O ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġlauncher : ĠActivity Result Launcher < I > Ġ= Ġcaller . register For Activity Result ( contract ) Ġ{ Ġre : ĠO Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġfinal Result Ġ= Ġ( this . internal Result Ġ?: Ġthis . default Result ) Ġ?: Ġfail (" The Ġ[ Result ] Ġcan Ġnot Ġbe Ġnull .") ĊĠĠĠĠĠĠĠ Ġfinal Result ( re ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLaunch Ġactivity , Ġsame Ġas Ġ[ Activity Result Launcher . launch ] Ġexcept Ġthat Ġit Ġallows Ġa Ġcallback ĊĠĠĠĠ Ġ* Ġexecuted Ġafter Ġreceiving Ġa Ġresult Ġfrom Ġthe Ġtarget Ġactivity . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġresult ĠIf Ġthis Ġparameter Ġis Ġ` null `, Ġmake Ġsure Ġyou Ġhave Ġalready Ġset Ġthe Ġ` result ` Ġwhen Ġcall Ġ[ Better Activity Result . register For Activity Result ]. ĊĠĠĠĠ Ġ* ĠIf Ġyou Ġset Ġ` result ` Ġin Ġboth Ġ[ launch ] Ġand ĠBetter Activity Result Ġconstructor , Ġthe Ġ` result ` Ġin Ġ[ launch ] Ġwill Ġbe Ġused Ġfirst . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġlaunch ( input : ĠI , Ġresult : Ġ(( O ) Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Result Ġ= Ġresult ĊĠĠĠĠĠĠĠ Ġlauncher . launch ( input ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRegister Ġactivity Ġresult Ġusing Ġa Ġ[ Activity Result Contract ] Ġand Ġan Ġin - place Ġactivity Ġresult Ġcallback Ġlike ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġdefault Ġapproach . ĠYou Ġcan Ġstill Ġcustom ise Ġcallback Ġusing Ġ[ launch ]. ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġresult ĠIf Ġthis Ġparameter Ġis Ġ` null `, Ġmake Ġsure Ġyou Ġhave Ġalready Ġset Ġthe Ġ` result ` Ġwhen Ġcall Ġ[ Better Activity Result . launch ] ĊĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġyou Ġset Ġ` result ` Ġin Ġboth Ġ[ launch ] Ġand ĠBetter Activity Result Ġconstructor , Ġthe Ġ` result ` Ġin Ġ[ launch ] Ġwill Ġbe Ġused Ġfirst . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< I , ĠO > Ġregister For Activity Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaller : ĠActivity Result Caller , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontract : ĠActivity Result Contract < I , ĠO >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult : Ġ(( O ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ): ĠBetter Activity Result < I , ĠO > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBetter Activity Result ( caller , Ġcontract , Ġresult ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }