package Ġio . mu un . apollo . presentation . ui . activity . extension Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġice pick . State Ċ import Ġio . mu un . apollo . presentation . ui . base . di . Per Activity Ċ import Ġjava . util . HashMap Ċ import Ġjavax . inject . Inject Ċ Ċ @ Per Activity Ċ class ĠExternal Result Extension Ġ@ Inject Ġconstructor () Ġ: ĠBase Request Extension () Ġ{ ĊĊĠĠĠ Ġinterface ĠCall er Ġ: ĠBase Caller Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon External Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠYeah . ĠNames Ġs ucks Ġh uh ? ĠThis Ġrepresents Ġa ĠCall er Ġthat Ġcan Ġdelegate Ġthe Ġon External Result ĊĠĠĠĠ Ġ* Ġcallback Ġto Ġanother ĠCall er . ĠThis Ġis Ġmainly Ġto Ġworkaround Ġsome Ġof ĠAndroid 's Ġde lic ious ĊĠĠĠĠ Ġ* Ġshort com ings , Ġfor Ġexample Ġthe Ġin ability Ġto Ġproper Ġset Ġfragments ĠID Ġwhen Ġinside ĊĠĠĠĠ Ġ* ĠView Pager / Fragment Pager Adapter Ġ( and Ġapparently Ġthey Ġall Ġhave Ġthe Ġsame ĠID ) Ġand Ġthe Ġhardcoded ĊĠĠĠĠ Ġ* Ġfragment Ġtags Ġin Ġund ocument ed Ġinternal Ġcode Ġ( which Ġwe Ġwould Ġrather Ġnot Ġ( ab ) use ). ĊĠĠĠĠ Ġ* ĠMore Ġinfo : ĊĠĠĠĠ Ġ* Ġ- Ġhttps :// stackoverflow . com / q / 1 8 6 0 9 2 6 1 / 9 0 1 4 6 5 ĊĠĠĠĠ Ġ* Ġ- Ġhttps :// stackoverflow . com / questions / 3 4 8 6 1 2 5 7 / how - can - i - set - a - tag - for - view pager - fragments ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠDeleg able Caller Ġ: ĠCall er Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNullable , Ġsince Ġimpl Ġclasses Ġmay Ġbe Ġin ĠJava Ġ( and Ġin Ġfact Ġsome Ġare ) ĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġkotlin ize Ġevery Ġlast Ġmother Ġeff ing Ġlast Ġone Ġof Ġ' em ! ĊĠĠĠĠĠĠĠ Ġval Ġdelegate Caller : ĠCall er ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIde ally , Ġthis Ġwould Ġgo Ġin Ġparent Ġclass Ġbut Ġfor Ġsome Ġreason ĠI ce pick Ġserial isation Ġdoesn 't ĊĠĠĠĠ Ġ* Ġwork Ġcorrectly Ġfor Ġchildren Ġso Ġwe Ġstore Ġthis Ġin Ġboth Ġchild Ġclasses . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġ@ State ( Request Map Bund ler :: class ) ĊĠĠĠ Ġvar Ġpending Requests Ġ= ĠHashMap < Int , ĠCall er Request >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShow Ġa ĠDialog Fragment , Ġexpecting Ġback Ġa Ġresult . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshow Dialog For Result ( caller : ĠCall er , Ġview Request Code : ĠInt , Ġdialog : ĠDialog Fragment ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġglobal Request Code Ġ= Ġregister Request From Caller ( caller , Ġview Request Code ) ĊĠĠĠĠĠĠĠ Ġdialog . setTarget Fragment ( null , Ġglobal Request Code ) ĊĠĠĠĠĠĠĠ Ġdialog . show ( activity . support FragmentManager , Ġ" dialog -$ global Request Code ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ" dialog -$ global Request Code " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStart Ġan ĠActivity ĠIntent , Ġexpecting Ġback Ġa Ġresult . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠstartActivity For Result ( view : ĠCall er , Ġview Request Code : ĠInt , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġglobal Request Code Ġ= Ġregister Request From Caller ( view , Ġview Request Code ) ĊĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( intent , Ġglobal Request Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( global Request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġpending Requests [ global Request Code ] ĊĠĠĠĠĠĠĠ Ġvar Ġview Ġ= Ġfind Caller ( request , ĠCall er :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġis ĠDeleg able Caller ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view . delegate Caller Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= Ġview . delegate Caller ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpending Requests . remove ( global Request Code ) ĊĠĠĠĠĠĠĠ Ġview !!. on External Result ( request !!. view Request Code , ĠresultCode , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġregister Request From Caller ( request : ĠCall er Request , Ġglobal Request Code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpending Requests [ global Request Code ] Ġ= Ġrequest ĊĠĠĠ Ġ} Ċ }