package Ġcom . sub 6 resources . utilities Ċ Ċ import Ġandroidx . annotation . Anim Res Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ class ĠFragment Transaction ( private Ġval Ġfragment : ĠFragment , Ġprivate Ġval Ġmanager : ĠFragment Manager ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġtwo Way Animation : ĠTwo Way Fragment Animation ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġone Way Animation : ĠOne Way Fragment Animation ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtransition Type : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtransition Resource : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġback stack _ tag : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtag : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcontainer : ĠInt Ġby ĠDeleg ates . notNull () ĊĠĠĠ Ġprivate Ġvar Ġextra Logic : Ġ( android x . fragment . app . Fragment Transaction ) Ġ-> Ġandroidx . fragment . app . Fragment Transaction Ġ= Ġ{ Ġit Ġ} ĊĊĠĠĠ Ġfun Ġinto ( container : ĠInt ): ĠFragment Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . container Ġ= Ġcontainer ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġextra Logic ( extra Logic : Ġ( android x . fragment . app . Fragment Transaction ) Ġ-> Ġandroidx . fragment . app . Fragment Transaction ): ĠFragment Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . extra Logic Ġ= Ġextra Logic ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Animation ( animation : ĠTwo Way Fragment Animation ): ĠFragment Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġone Way Animation Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtwo Way Animation Ġ= Ġanimation ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Transition ( transition : ĠInt ): ĠFragment Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition Resource Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtransition Type Ġ= Ġtransition ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Transition Style ( transition : ĠInt ): ĠFragment Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition Resource Ġ= Ġtransition ĊĠĠĠĠĠĠĠ Ġtransition Type Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Animation ( animation : ĠOne Way Fragment Animation ): ĠFragment Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġtwo Way Animation Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġone Way Animation Ġ= Ġanimation ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġandroidx . fragment . app . Fragment Transaction . extra Logic (): Ġandroidx . fragment . app . Fragment Transaction Ġ= Ġextra Logic ( this ) ĊĊĠĠĠ Ġfun Ġadd Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġmanager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. extra Logic () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. hide ( manager . find Fragment ById ( container ) !! ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag Ġ!= Ġnull ) Ġ{ Ġadd ( container , Ġfragment , Ġtag ) Ġ} Ġelse Ġ{ Ġadd ( container , Ġfragment ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtwo Way Animation ?. let Ġ{ Ġset Custom Animations ( it . enter , Ġit . exit , Ġit . pop Enter , Ġit . pop Exit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġone Way Animation ?. let Ġ{ Ġset Custom Animations ( it . enter , Ġit . exit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Type ?. let Ġ{ Ġset Transition ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Resource ?. let Ġ{ Ġset Transition Style ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}. addTo Back Stack ( back stack _ tag ). commit Allow ing State Loss () ĊĊĠĠĠĠĠĠĠ Ġmanager . execute Pending Transactions () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġswitch Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġmanager . pop Back Stack ( null , ĠFragment Manager . POP _ BACK _ STACK _ INCL USIVE ) ĊĠĠĠĠĠĠĠ Ġmanager . beginTransaction (). replace ( container , Ġfragment ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag Ġ!= Ġnull ) Ġreplace ( container , Ġfragment , Ġtag ) Ġelse Ġreplace ( container , Ġfragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtwo Way Animation ?. let Ġ{ Ġset Custom Animations ( it . enter , Ġit . exit , Ġit . pop Enter , Ġit . pop Exit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġone Way Animation ?. let Ġ{ Ġset Custom Animations ( it . enter , Ġit . exit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Type ?. let Ġ{ Ġset Transition ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Resource ?. let Ġ{ Ġset Transition Style ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}. commit () ĊĠĠĠĠĠĠĠ Ġmanager . execute Pending Transactions () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġmanager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. extra Logic () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( manager . find Fragment ById ( container ) !! ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag Ġ!= Ġnull ) Ġ{ Ġadd ( container , Ġfragment , Ġtag ) Ġ} Ġelse Ġ{ Ġadd ( container , Ġfragment ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtwo Way Animation ?. let Ġ{ Ġset Custom Animations ( it . enter , Ġit . exit , Ġit . pop Enter , Ġit . pop Exit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġone Way Animation ?. let Ġ{ Ġset Custom Animations ( it . enter , Ġit . exit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Type ?. let Ġ{ Ġset Transition ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Resource ?. let Ġ{ Ġset Transition Style ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}. commit () ĊĠĠĠĠĠĠĠ Ġmanager . execute Pending Transactions () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġmanager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. extra Logic () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. hide ( manager . find Fragment ById ( container ) !! ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag Ġ!= Ġnull ) Ġ{ Ġadd ( container , Ġfragment , Ġtag ) Ġ} Ġelse Ġ{ Ġadd ( container , Ġfragment ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtwo Way Animation ?. let Ġ{ Ġset Custom Animations ( it . enter , Ġit . exit , Ġit . pop Enter , Ġit . pop Exit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġone Way Animation ?. let Ġ{ Ġset Custom Animations ( it . enter , Ġit . exit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Type ?. let Ġ{ Ġset Transition ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Resource ?. let Ġ{ Ġset Transition Style ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}. commit () ĊĠĠĠĠĠĠĠ Ġmanager . execute Pending Transactions () ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠTwo Way Fragment Animation (@ Anim Res Ġval Ġenter : ĠInt , Ġ@ Anim Res Ġval Ġexit : ĠInt , Ġ@ Anim Res Ġval Ġpop Enter : ĠInt , Ġ@ Anim Res Ġval Ġpop Exit : ĠInt ) Ċ data Ġclass ĠOne Way Fragment Animation (@ Anim Res Ġval Ġenter : ĠInt , Ġ@ Anim Res Ġval Ġexit : ĠInt )