package Ġcz . se zn am . di . tree Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Application Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġcz . se zn am . di . K odi Ċ import Ġcz . se zn am . di . scope . Scope Ċ import Ġcz . se zn am . di . scope . Scope Parameters Ċ Ċ /** Ċ Ġ* Ġ@ author ĠJ ak ub ĠJ anda Ċ Ġ*/ Ċ class ĠApplication Scope Tree Builder ( app : ĠApplication , Ġprivate Ġval Ġapp Scope : ĠScope ?) Ġ: ĊĠ ĠApplication . Activity Lifecycle Callbacks , ĊĠ ĠFragment Manager . Fragment Lifecycle Callbacks () Ġ{ ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġapp . register Activity Lifecycle Callbacks ( this ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Activity Created ( activity : ĠActivity , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġif Ġ( activity Ġis ĠAppCompatActivity ) Ġ{ ĊĠĠĠĠĠ Ġval Ġkey Ġ= Ġactivity . hashCode (). toString () ĊĠĠĠĠĠ ĠLog . d (" K odi ", Ġ" Create Ġactivity : Ġ$ key ") ĊĊĠĠĠĠĠ Ġactivity . support FragmentManager . register Fragment Lifecycle Callbacks ( this , Ġtrue ) ĊĊĠĠĠĠĠ Ġval Ġscope Definition Ġ= ĠK odi . find Scope Definition ( activity :: class . java . name ) ĊĊĠĠĠĠĠ Ġif Ġ( scope Definition Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠK odi . create Scope ( scope Definition , Ġapp Scope , ĠScope Parameters ( activity )) ĊĠĠĠĠĠĠĠ ĠK odi . scopes [ key ] Ġ= Ġscope ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġapp Scope ?. apply Ġ{ ĠK odi . scopes [ key ] Ġ= Ġthis Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Activity Destroyed ( activity : ĠActivity ) Ġ{ ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Activity Post Destroyed ( activity : ĠActivity ) Ġ{ ĊĠĠĠ Ġif Ġ( activity Ġis ĠAppCompatActivity ) Ġ{ ĊĠĠĠĠĠ Ġval Ġkey Ġ= Ġactivity . hashCode (). toString () ĊĠĠĠĠĠ ĠLog . d (" K odi ", Ġ" Destroy Ġactivity : Ġ$ key ") ĊĠĠĠĠĠ Ġactivity . support FragmentManager . unregister Fragment Lifecycle Callbacks ( this ) ĊĊĠĠĠĠĠ Ġif Ġ( K odi . scopes . remove ( key ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" K odi ", Ġ" Activity Ġscope Ġnot Ġfound !") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Fragment Pre Created ( ĊĠĠĠ Ġfm : ĠFragment Manager , ĊĠĠĠ Ġf : ĠFragment , ĊĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġsuper . on Fragment Created ( fm , Ġf , ĠsavedInstanceState ) ĊĠĠĠ Ġval Ġkey Ġ= Ġf . hashCode (). toString () ĊĠĠĠ ĠLog . d (" K odi ", Ġ" Create Ġfragment : Ġ${ f . java Class . simple Name } Ġ- Ġ$ key ") ĊĊĠĠĠ Ġval Ġscope Definition Ġ= ĠK odi . find Scope Definition ( f :: class . java . name ) ĊĊĠĠĠ Ġif Ġ( scope Definition Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġscope Ġ= ĠK odi . create Scope ( scope Definition , Ġfind Parent Scope ( f ), ĠScope Parameters ( f )) ĊĠĠĠĠĠ ĠK odi . scopes [ key ] Ġ= Ġscope ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġval Ġscope Ġ= Ġfind Parent Scope ( f ) ĊĠĠĠĠĠ Ġif Ġ( scope Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ ĠK odi . scopes [ key ] Ġ= Ġscope ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Fragment Destroyed ( fm : ĠFragment Manager , Ġf : ĠFragment ) Ġ{ ĊĠĠĠ Ġsuper . on Fragment Destroyed ( fm , Ġf ) ĊĊĠĠĠ Ġval Ġkey Ġ= Ġf . hashCode (). toString () ĊĠĠĠ ĠLog . d (" K odi ", Ġ" Destroy Ġfragment : Ġ${ f . java Class . simple Name } Ġ- Ġ$ key ") ĊĊĠĠĠ Ġif Ġ( K odi . scopes . remove ( key ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ ĠLog . d (" K odi ", Ġ" Fragment Ġscope Ġnot Ġfound !") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġfind Parent Scope ( fragment : ĠFragment ): ĠScope ? Ġ{ ĊĠĠĠ Ġval Ġparent Ġ= Ġfragment . parent Fragment ĊĠĠĠ Ġval Ġactivity Ġ= Ġfragment . activity ĊĊĠĠĠ Ġif Ġ( parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠK odi . scopes [ parent . hashCode (). toString ()] Ġ?: Ġfind Parent Scope ( parent ) ĊĠĠĠ Ġ} Ġelse Ġif Ġ( activity Ġis ĠAppCompatActivity ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠK odi . scopes [ activity . hashCode (). toString ()] Ġ?: Ġapp Scope ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġnull ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Activity Paused ( activity : ĠActivity ) Ġ= ĠUnit ĊĊĠ Ġoverride Ġfun Ġon Activity Res umed ( activity : ĠActivity ) Ġ= ĠUnit ĊĊĠ Ġoverride Ġfun Ġon Activity Started ( activity : ĠActivity ) Ġ= ĠUnit ĊĊĠ Ġoverride Ġfun Ġon Activity Save InstanceState ( activity : ĠActivity , Ġout State : ĠBundle ) Ġ= ĠUnit ĊĊĠ Ġoverride Ġfun Ġon Activity Stopped ( activity : ĠActivity ) Ġ= ĠUnit Ċ }