package Ġio . mu un . apollo . presentation . ui . activity . extension Ċ Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . Fragment Transaction Ċ import Ġio . mu un . apollo . presentation . ui . base . Activity Extension Ċ import Ġio . mu un . apollo . presentation . ui . base . Ext ensible Activity Ċ import Ġio . mu un . apollo . presentation . ui . base . Single Fragment Activity Ċ import Ġio . mu un . apollo . presentation . ui . base . di . Per Activity Ċ import Ġio . mu un . apollo . presentation . ui . fragments . error . Error Fragment Ċ import Ġio . mu un . apollo . presentation . ui . fragments . error . Error Fragment Delegate Ċ import Ġio . mu un . apollo . presentation . ui . fragments . error . Error ViewModel Ċ import Ġio . mu un . common . utils . Collection Utils Ċ import Ġio . mu un . common . utils . Preconditions Ċ import Ġjavax . inject . Inject Ċ Ċ // ĠCurrently Ġneeds Ġactivities Ġmaking Ġuse Ġof Ġit Ġto Ġextend ĠSingle Fragment Activity Ġ( a Ġlimitation Ġof Ċ // ĠError Fragment Ġ( extends ĠSingle Fragments ) Ġthat Ġasks Ġparent Ġactivity Ġto Ġbe Ġa ĠSingle Fragment Activity ) Ċ // ĠTODO Ġremove Ġthis Ġlimitation Ġ( make Ġevery Ġactivity ĠSingle Fragment Activity Ġor Ġrelax Ġlimitation ) Ċ @ Per Activity Ċ class ĠError Fragment Extension Ġ@ Inject Ġconstructor () Ġ: ĠActivity Extension () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG : ĠString Ġ= Ġ" Mu un ĠError ĠFragment " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Activity ( activity : ĠExt ensible Activity ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPreconditions . check Argument ( activity Ġis ĠSingle Fragment Activity <* >) ĊĠĠĠĠĠĠĠ Ġsuper . set Activity ( activity ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfragments Ġ= Ġactivity . support FragmentManager . fragments ĊĠĠĠĠĠĠĠ Ġif Ġ( fragments . isNotEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Fragments : ĠList < Fragment > Ġ= ĠCollection Utils ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter List ( fragments ) Ġ{ Ġf : ĠFragment Ġ-> Ġf Ġis ĠError Fragment Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Fragments . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPreconditions . check State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Fragments . size Ġ== Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Only Ġ 1 ĠError Fragment Ġallowed . ĠCurrent : Ġ" Ġ+ Ġerror Fragments . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Ġis ĠError Fragment Delegate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Fragment Ġ= Ġerror Fragments [ 0 ] Ġas ĠError Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Fragment . set Delegate (( activity Ġas ĠError Fragment Delegate )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Error ( vm : ĠError ViewModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Error Fragment Delegate Ġ= Ġactivity Ġis ĠError Fragment Delegate ĊĠĠĠĠĠĠĠ Ġval Ġerror Fragment Ġ= ĠError Fragment . create ( vm , Ġdescription Clickable Ġ= Ġis Error Fragment Delegate ) ĊĠĠĠĠĠĠĠ Ġshow ( error Fragment ) ĊĠĠĠĠĠĠĠ Ġif Ġ( isError Fragment Delegate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Fragment . set Delegate ( activity Ġas ĠError Fragment Delegate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Fragment Ġ= Ġactivity . support FragmentManager . find Fragment By Tag ( TAG ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( error Fragment Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . support FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove ( error Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. saf ely Commit Now ( activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity . support FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( android . R . id . content , Ġfragment , ĠTAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. saf ely Commit Now ( activity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Transaction . saf ely Commit Now ( activity : ĠExt ensible Activity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! activity . is Finish ing Ġ&& Ġ! activity . is Destroyed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Manager Ġ= Ġactivity . support FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! fragment Manager . is Destroyed Ġ&& Ġ! fragment Manager . is State Saved ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommit Now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }