/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠCl iff ord ĠLi u Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . mad ness . collision . main Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . Parcelable Ċ import Ġandroidx . activity . On Back Pressed Callback Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġcom . mad ness . collision . util . Id Ċ import Ġcom . mad ness . collision . util . Tagged Fragment Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . full . create Instance Ċ Ċ class ĠBack ward Operation ( val Ġoperation Flags : ĠBoolean Array ): ĠParcel able Ġ{ ĊĊĠĠĠ Ġclass ĠPage ( private Ġval Ġuid : ĠString , Ġprivate Ġval Ġclazz : ĠK Class < *> ?): ĠParcel able Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġargs : ĠBundle ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġref : ĠWeak Reference < Tagged Fragment ?> Ġ= ĠWeak Reference ( null ) ĊĊĠĠĠĠĠĠĠ Ġval Ġhas Ref : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġref . get () Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġfragment : ĠTag ged Fragment ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġref . get () Ġ?: Ġnew Fragment ĊĠĠĠĠĠĠĠ Ġval Ġref Fragment : ĠTag ged Fragment ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġref . get () ĊĠĠĠĠĠĠĠ Ġval Ġnew Fragment : ĠTag ged Fragment ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclazz Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclazz . create Instance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( f Ġas ĠTag ged Fragment ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconstructor ( fragment : ĠTag ged Fragment ): Ġthis ( fragment . uid , Ġfragment :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġref Ġ= ĠWeak Reference ( fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs Ġ= Ġfragment . arguments ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġtry To Ensure ( fragment Manager : ĠFragment Manager ): ĠPage Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Ref ) Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry To Find ( fragment Manager ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġtry To Find ( fragment Manager : ĠFragment Manager ): ĠPage Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf Ġ= Ġfragment Manager . find Fragment By Tag ( uid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfragments Ġmanaged Ġby Ġnavigation Ġcomponent Ġhave Ġno Ġtag Ġset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfragment Manager . fragments . find Ġ{ Ġit Ġis ĠId Ġ&& Ġit . uid Ġ== Ġuid Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġref Ġ= ĠWeak Reference ( f Ġas ĠTag ged Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconstructor ( parcel : ĠParcel ) Ġ: Ġthis ( parcel . readString () Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass . forName ( parcel . readString () Ġ?: Ġ""). kotlin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClass NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs Ġ= Ġparcel . read Bundle ( java Class . class Loader ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( parcel : ĠParcel , Ġflags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel . writeString ( uid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel . writeString ( clazz ?. qualified Name Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel . write Bundle ( args ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdescribe Contents (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject ĠCRE ATOR Ġ: ĠParcel able . Creator < Page > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel ( parcel : ĠParcel ): ĠPage Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPage ( parcel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Page ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf Null s ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ forward Page : ĠPage ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ backward Page : ĠPage ĊĠĠĠ Ġval Ġforward Page : ĠPage ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ forward Page ĊĠĠĠ Ġval Ġbackward Page : ĠPage ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ backward Page ĊĊĠĠĠ Ġvar Ġcached Callback : ĠOn Back Pressed Callback ? Ġ= Ġnull ĊĊĠĠĠ Ġconstructor ( forward Fragment : ĠTag ged Fragment , Ġbackward Fragment : ĠTag ged Fragment , Ġoperation Flags : ĠBoolean Array ): Ġthis ( operation Flags ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ forward Page Ġ= ĠPage ( forward Fragment ) ĊĠĠĠĠĠĠĠ Ġ_ backward Page Ġ= ĠPage ( backward Fragment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtry To Ensure ( fragment Manager : ĠFragment Manager ): ĠBack ward Operation Ġ{ ĊĠĠĠĠĠĠĠ Ġforward Page . try To Ensure ( fragment Manager ) ĊĠĠĠĠĠĠĠ Ġbackward Page . try To Ensure ( fragment Manager ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( parcel : ĠParcel ) Ġ: Ġthis ( parcel . create Boolean Array () Ġ?: Ġboolean ArrayOf ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcl Ġ= Ġjava Class . class Loader ĊĠĠĠĠĠĠĠ Ġ_ forward Page Ġ= Ġparcel . read Parcelable ( cl ) !! ĊĠĠĠĠĠĠĠ Ġ_ backward Page Ġ= Ġparcel . read Parcelable ( cl ) !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( parcel : ĠParcel , Ġflags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġparcel . write Boolean Array ( operation Flags ) ĊĠĠĠĠĠĠĠ Ġparcel . write Parcelable ( forward Page , Ġflags ) ĊĠĠĠĠĠĠĠ Ġparcel . write Parcelable ( backward Page , Ġflags ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdescribe Contents (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠCRE ATOR Ġ: ĠParcel able . Creator < Backward Operation > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel ( parcel : ĠParcel ): ĠBack ward Operation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBack ward Operation ( parcel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Backward Operation ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf Null s ( size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ