package Ġcom . react nat iven avigation . hierarchy . root Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . animation . Animator Set Ċ import Ġandroid . view . View Ċ import Ġcom . react nat iven avigation . options . Transition Animation Options Ċ import Ġcom . react nat iven avigation . view controllers . view controller . ViewController Ċ Ċ open Ġclass ĠRoot Animator Ġ{ ĊĊĠĠĠ Ġopen Ġfun Ġset Root ( appear ing : ĠView Controller <* >, Ġdis appear ing : ĠView Controller < *> ?, Ġset Root : ĠTransition Animation Options , Ġon Animation End : Ġ() -> Unit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġappearing . view . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! set Root . hasValue () Ġ|| Ġ(! set Root . enter . has Animation () Ġ&& Ġ! set Root . exit . has Animation ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Animation End () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġanimation Set Ġ= Ġcreate Animator ( on Animation End ) ĊĊĠĠĠĠĠĠĠ Ġval Ġappearing Animation Ġ= Ġif Ġ( set Root . enter . has Animation ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Root . enter . get Animation ( appear ing . view ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġdis appear ing Animation Ġ= Ġif Ġ( dis appear ing Ġ!= Ġnull Ġ&& Ġset Root . exit . has Animation ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Root . exit . get Animation ( dis appear ing . view ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappearing Animation Ġ!= Ġnull Ġ&& Ġdis appear ing Animation Ġ!= Ġnull Ġ-> Ġanimation Set . play To gether ( appear ing Animation , Ġdis appear ing Animation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappearing Animation Ġ!= Ġnull Ġ-> Ġanimation Set . play ( appear ing Animation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis appear ing Animation Ġ!= Ġnull Ġ-> Ġanimation Set . play ( dis appear ing Animation ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġanimation Set . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Animator ( on Animation End : Ġ() Ġ-> ĠUnit ): ĠAn imator Set Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġset Ġ= ĠAn imator Set () ĊĠĠĠĠĠĠĠ Ġset . addListener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Cancelled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Cancelled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Animation End () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Cancelled ) Ġon Animation End () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġset ĊĠĠĠ Ġ} Ċ Ċ }