package Ġdev . en ro . master detail Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . Id Res Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Event Observer Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġdev . en ro . core . Navigation Key Ċ import Ġdev . en ro . core . add Open Instruction Ċ import Ġdev . en ro . core . activity Ċ import Ġdev . en ro . core . fragment Ċ import Ġdev . en ro . core . controller . Navigation Controller Ċ import Ġdev . en ro . core . activity . Default Activity Executor Ċ import Ġdev . en ro . core . Executor Args Ċ import Ġdev . en ro . core . controller . navigation Controller Ċ import Ġdev . en ro . core . create Override Ċ import Ġdev . en ro . core . forward Ċ import Ġdev . en ro . core . get Navigation Handle Ċ import Ġkotlin . properties . ReadOnly Property Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Property Ċ Ċ class ĠMaster Detail Controller Ċ Ċ class ĠMaster Detail Property ( ĊĠĠĠ Ġprivate Ġval Ġlifecycle Owner : ĠLifecycle Owner , ĊĠĠĠ Ġprivate Ġval Ġow ning Type : ĠK Class < out ĠFragment Activity >, ĊĠĠĠ Ġ@ Id Res Ġprivate Ġval Ġmaster Container : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġmaster Key : ĠK Class < out ĠNavigation Key >, ĊĠĠĠ Ġ@ Id Res Ġprivate Ġval Ġdetail Container : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġdetail Key : ĠK Class < out ĠNavigation Key >, ĊĠĠĠ Ġprivate Ġval Ġinitial Master Key : Ġ() Ġ-> ĠNavigation Key Ċ ) Ġ: ĠReadOnly Property < Any , ĠMaster Detail Controller > Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmaster Detail Controller : ĠMaster Detail Controller ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnavigation Controller : ĠNavigation Controller ĊĊĠĠĠ Ġprivate Ġval Ġmaster Override Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmaster Type Ġ= Ġnavigation Controller . navigator ForKey Type ( master Key ) !!. context Type Ġas ĠK Class < out ĠFragment > ĊĠĠĠĠĠĠĠ Ġcreate Override ( own ing Type , Ġmaster Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopened Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġit . from Context . child FragmentManager . fragment Factory . instantiate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaster Type . java . class Loader !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaster Type . java . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). add Open Instruction ( it . instruction ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . from Context . child FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( master Container , Ġfragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Primary Navigation Fragment ( fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit Now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclosed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . activity . finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdetail Override Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdetail Type Ġ= Ġnavigation Controller . navigator ForKey Type ( detail Key ) !!. context Type Ġas ĠK Class < out ĠFragment > ĊĠĠĠĠĠĠĠ Ġcreate Override ( own ing Type , Ġdetail Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopened Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Fragment :: class . java . isAssignableFrom ( it . navigator . context Type . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" En ro ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" At tempted Ġto Ġopen Ġ${ detail Key :: class . java } Ġas Ġa ĠDetail Ġin Ġ${ it . from Context . context Reference }, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" but Ġ${ detail Key :: class . java }' s ĠNavigation Destination Ġis Ġnot Ġa ĠFragment ! ĠDefault ing Ġto Ġstandard Ġnavigation " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Activity Executor . open ( it Ġas ĠExecutor Args < out ĠAny , Ġout ĠFragment Activity , Ġout ĠNavigation Key >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ opened ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġit . from Context . child FragmentManager . fragment Factory . instantiate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetail Type . java . class Loader !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetail Type . java . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). add Open Instruction ( it . instruction ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . from Context . child FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( detail Container , Ġfragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Primary Navigation Fragment ( fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit Now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclosed Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . fragment . parent FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove ( context . fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Primary Navigation Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . activity . support FragmentManager . find Fragment ById ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaster Container ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit Now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Owner . lifecycle . add Observer ( object Ġ: ĠLifecycle Event Observer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon StateChanged ( source : ĠLifecycle Owner , Ġevent : ĠLifecycle . Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( event Ġ== ĠLifecycle . Event . ON _ CREATE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Controller Ġ= Ġwhen ( lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFragment Activity Ġ-> Ġlifecycle Owner . application . navigation Controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFragment Ġ-> Ġlifecycle Owner . require Activity (). application . navigation Controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" The ĠMaster Detail Property Ġrequires Ġthat Ġit 's Ġlifecycle Ġowner Ġis Ġa ĠFragment Activity Ġor ĠFragment ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Controller . add Override ( master Override ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Controller . add Override ( detail Override ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġlifecycle Owner Ġas ĠFragment Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmaster Fragment Ġ= Ġactivity . support FragmentManager . find Fragment ById ( master Container ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( master Fragment Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . get Navigation Handle (). forward ( initial Master Key ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( event Ġ== ĠLifecycle . Event . ON _ START ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Controller . add Override ( master Override ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Controller . add Override ( detail Override ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( event Ġ== ĠLifecycle . Event . ON _ STOP ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Controller . remove Override ( master Override ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Controller . remove Override ( detail Override ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠAny , Ġproperty : ĠK Property < *> ): ĠMaster Detail Controller Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmaster Detail Controller ĊĠĠĠ Ġ} Ċ }