package Ġandroidx . fragment . app Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Inflater Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Typed Array Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . github . frag ivity . R Ċ import Ġcom . github . frag ivity . swipe back . Swipe Back Layout Ċ import Ġjava . lang . reflect . Constructor Ċ Ċ internal Ġclass ĠReport Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ vm : ĠFragment ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġprivate Ġval ĠclassName Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire NotNull ( arguments ?. getString ( REAL _ FRAGMENT )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ real : ĠClass < out ĠFragment > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠClass . forName ( className ) Ġas ĠClass < out ĠFragment > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġval Ġ_ real Fragment : ĠFragment ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ_ vm . fragment Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrag Ġ= ĠFragment Provider Map [ className ]?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĠFragment Provider Map . remove ( className ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstructor Ġ= Ġfind Matching Constructor (_ real ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror ("${ _ real . simple Name } Ġneed Ġa Ġempty Ġconstructor , Ġotherwise Ġit Ġcannot Ġbe Ġre built Ġafter Ġprocess Ġkilled ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrag . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretain Instance Ġ= ĠFR AG MENT _ RE TAIN _ INSTANCE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. also Ġ{ Ġ_ vm . fragment Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġ_ swipe Back Layout : ĠSw ipe Back Layout ĊĊĠĠĠ Ġ// fix Ġhttps :// github . com / vit av iva / frag ivity / issues / 7 ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġinternal Ġvar Ġdisable Anim Once Ġ= Ġfalse ĊĊĠĠĠ Ġ@ Published Api ĊĠĠĠ Ġinternal Ġvar ĠisIn Foreground : ĠBoolean ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ vm . is Showing Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ_ vm . is Showing ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Child FragmentManager Ġ= ĠReport FragmentManager () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġif Ġ(!_ vm . is Re creating ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Real Fragment () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ vm . is Re creating Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Real Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( m Child FragmentManager . fragments . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Report FragmentManager Ġcan 't Ġhold Ġfragment Ġmore Ġthan Ġone Ġ" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Child FragmentManager . beginTransaction (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ real Fragment . arguments Ġ= Ġrequire NotNull ( arguments ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ real Fragment . arguments Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput All (_ real Fragment . arguments ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( R . id . container , Ġ_ real Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommit Now () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ swipe Back Layout Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSw ipe Back Layout ( require Context ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattach To Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Report Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinflater . inflate ( R . layout . report _ layout , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġappend Background () Ġ} Ġ// Ġadd Ġa Ġdefault Ġbackground Ġcolor Ġto Ġmake Ġit Ġopaque ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Enable Gesture ( false ) Ġ// default Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshared Element Enter Transition Ġ= Ġ_ real Fragment . shared Element Enter Transition ĊĠĠĠĠĠĠĠ Ġshared Element Return Transition Ġ= Ġ_ real Fragment . shared Element Return Transition ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ swipe Back Layout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ swipe Back Layout . internal Call On Destroy View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġhttps :// github . com / vit av iva / frag ivity / issues / 4 ĊĠĠĠĠĠĠĠĠ Ġ* Ġthis Ġflag Ġused Ġto Ġavoid Ġ[_ real Fragment ] Ġto Ġperform ĠonCreate Ġas Ġconfiguration Ġchanged ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ_ vm . is Re creating Ġ= Ġrequire Activity (). is Changing Configurations ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠView . append Background () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa : ĠTyped Array Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). theme . obtain Styled Attributes ( int ArrayOf ( android . R . attr . window Background )) ĊĠĠĠĠĠĠĠ Ġval Ġbackground Ġ= Ġa . getResource Id ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠĠĠĠĠ Ġset Background Resource ( background ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Animator ( transit : ĠInt , Ġenter : ĠBoolean , Ġnext Anim : ĠInt ): ĠAn imator ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( next Anim Ġ== Ġ 0 ) Ġreturn Ġsuper . onCreate Animator ( transit , Ġenter , Ġnext Anim ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( disable Anim Once ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Anim Once Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim ator Ġ= ĠAn imator Inflater . load Animator ( context , ĠR . anim ator . no _ anim ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anim ator Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġanim ator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Animator ( transit , Ġenter , Ġnext Anim ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠFragment ViewModel ( ĊĠĠĠĠĠĠĠ Ġvar Ġfragment : ĠFragment ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġis Re creating : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġvar Ġis Showing : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ) Ġ: ĠViewModel () ĊĊĠĠĠ Ġinternal Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREAL _ FRAGMENT Ġ= Ġ" real " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFR AG MENT _ RE TAIN _ INSTANCE Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ Ċ private Ġfun Ġ< T > Ġfind Matching Constructor ( ĊĠĠĠ Ġmodel Class : ĠClass < T > Ċ ): ĠConstructor < T >? Ġ{ ĊĠĠĠ Ġfor Ġ( constructor Ġin Ġmodel Class . construct ors ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparameter Types Ġ= Ġconstructor . parameter Types ĊĠĠĠĠĠĠĠ Ġif Ġ( parameter Types . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconstructor Ġas ĠConstructor < T > ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ }