package Ġru . mg ts . navigation Ċ Ċ import Ġandroid . util . Log Ċ import Ġru . ant on ov . cats . Build Config Ċ import Ġru . ter r ak ok . c icer one . Router Ċ import Ġru . ter r ak ok . c icer one . Screen Ċ import Ġjava . util .* Ċ Ċ class ĠRouter Ġ: ĠRouter () Ġ{ ĊĠĠĠ Ġval Ġhistory Ġ: ĠStack < Screen > Ġ= ĠStack () ĊĊĠĠĠ Ġoverride Ġfun Ġexit () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . dump Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . exit () ĊĠĠĠĠĠĠĠ Ġif ( history . size Ġ> Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhistory . pop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlast () Ġ: ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġif ( history . size Ġ> Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhistory [ history . size Ġ- Ġ 1 ]. screen Key ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnavigate To ( screen : ĠScreen ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . navigate To ( screen ) ĊĠĠĠĠĠĠĠ ĠLog . d (" Router ", Ġ" navigate To : Ġ$ screen ") ĊĠĠĠĠĠĠĠ Ġhistory . push ( screen ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnew Root Screen ( screen : ĠScreen ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . new Root Screen ( screen ) ĊĠĠĠĠĠĠĠ ĠLog . d (" Router ", Ġ" new Root Screen : Ġ$ screen ") ĊĠĠĠĠĠĠĠ Ġhistory . clear () ĊĠĠĠĠĠĠĠ Ġhistory . push ( screen ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreplace Screen ( screen : ĠScreen ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . replace Screen ( screen ) ĊĠĠĠĠĠĠĠ Ġif ( history . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhistory . pop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhistory . push ( screen ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġappend Screen ( screen Key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġappend Screen ( screen Key , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġappend Screen ( screen Key : ĠString , Ġdata : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . dump Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġexecute Commands ( Forward Append ( screen Key , Ġdata )) ĊĠĠĠĠĠĠĠ ĠLog . d (" Router ", Ġ" replace Screen : Ġ$ screen Key ") ĊĠĠĠĠĠĠĠ Ġ// history . push ( Screen Item ( screen Key , Ġ 0 )) ĊĠĠĠ Ġ} Ċ } Ċ