package Ġcom . one hook . on hook library kotlin . view controller . host Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Gesture Detector Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . core . view . Gesture Detector Compat Ċ import Ġcom . one hook . on hook library kotlin . app . OH Activity Ċ import Ġcom . one hook . on hook library kotlin . utils . Animation End Listener Ċ import Ġcom . one hook . on hook library kotlin . utils . weak Ċ import Ġcom . one hook . on hook library kotlin . view . EX ACT LY Ċ import Ġcom . one hook . on hook library kotlin . view controller . controller . Navigation Controller Ċ import Ġcom . one hook . on hook library kotlin . view controller . controller . ViewController Ċ import Ġcom . one hook . on hook library kotlin . view controller . host . transition . Bottom To Top Controller Transition Ċ Ċ open Ġclass ĠController Host ( activity : ĠO H Activity ) Ġ: ĠFrame Layout ( activity ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġdim Cover s Ġ= ĠArrayList < Dim View >() ĊĠĠĠ Ġprivate Ġvar Ġcontrollers Ġ= ĠArrayList < ViewController >() ĊĊĠĠĠ Ġvar Ġactivity : ĠO H Activity ? Ġby Ġweak () ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . activity Ġ= Ġactivity ĊĠĠĠĠĠĠĠ Ġset BackgroundColor ( Color . TRANSP ARENT ) ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠLayout Params ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout Params . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout Params . MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġpop All () ĊĠĠĠĠĠĠĠ Ġactivity Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtop ViewController : ĠView Controller ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcontrollers . last OrNull () ĊĊĠĠĠ Ġ@ Suppress ĊĠĠĠ Ġval Ġview Controllers : ĠList < ViewController > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcontrollers ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrue Ġif Ġthere Ġis Ġa Ġtransaction Ġin Ġprogress , Ġpush / pop / etc Ġwill Ġnot Ġwork Ġuntil ĊĠĠĠĠ Ġ* Ġtransaction Ġis Ġdone . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtransaction InProgress : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġto Ġthe Ġbottom Ġof Ġview Ġcontroller Ġstack . ĠNO Ġanimation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Bottom ( view Controller : ĠView Controller , Ġactivity : ĠO H Activity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Controllers . any Ġ{ Ġit . tag Ġ== Ġview Controller . tag Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġonly Ġallow Ġunique Ġtag Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview Controller . do Create View ( container Ġ= Ġthis , Ġactivity Ġ= Ġactivity ) ĊĠĠĠĠĠĠĠ Ġview Controller . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . view . layout Params Ġ= ĠLayout Params ( view Controller . view . layout Params ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠLayout Params . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠLayout Params . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . presentation Style . transition Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . presentation Style . transition Ġ= ĠBottom To Top Controller Transition () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontrollers . add ( 0 , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( it . view , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Child ( view Controller . view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . view . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠDim View ( context Ġ= Ġcontext ). also Ġ{ Ġcover Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdim Cover s . add ( 0 , Ġcover ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( cover , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprint Stack () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPush Ġa Ġnew Ġview Ġcontroller Ġto Ġthe Ġtop Ġof Ġcontroller Ġstack . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpush ( ĊĠĠĠĠĠĠĠ Ġview Controller : ĠView Controller , ĊĠĠĠĠĠĠĠ Ġactivity : ĠO H Activity , ĊĠĠĠĠĠĠĠ Ġanimated : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ(() Ġ-> ĠUnit )? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( transaction InProgress ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( view Controllers . any Ġ{ Ġit . tag Ġ== Ġview Controller . tag Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġonly Ġallow Ġunique Ġtag Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprint Stack () ĊĠĠĠĠĠĠĠ Ġtransaction InProgress Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġview Controller . do Create View ( container Ġ= Ġthis , Ġactivity Ġ= Ġactivity ) ĊĠĠĠĠĠĠĠ Ġview Controller . view . layout Params Ġ= ĠLayout Params ( view Controller . view . layout Params ) ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Top Ġ= Ġtop ViewController ĊĠĠĠĠĠĠĠ Ġval Ġcover Ġ= ĠDim View ( context Ġ= Ġcontext ). also Ġ{ Ġcover Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdim Cover s . add ( cover ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( cover ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd View ( view Controller . view ) ĊĠĠĠĠĠĠĠ Ġmeasure Child ( view Controller . view ) ĊĠĠĠĠĠĠĠ Ġview Controller . view Will Ap pear ( animated ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! view Controller . presentation Style . over Current Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Top ?. view Will Dis appear ( animated ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( view Controller . presentation Style . transition Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Controller . presentation Style . transition Ġ= ĠBottom To Top Controller Transition () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtransition Ġ= Ġview Controller . presentation Style . transition !! ĊĠĠĠĠĠĠĠ Ġval Ġtransition Context Ġ= ĠController Transition . Transition Context ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Controller Ġ= Ġcurrent Top , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Controller Ġ= Ġview Controller , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcover Ġ= Ġcover , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Ġ= ĠRect ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( animated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition . on Exit ing Animation Finished ( transition Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition . create Enter ing Animation ( transition Context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠAnimation End Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbring Child To Front ( cover ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbring Child To Front ( view Controller . view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Controller . view Did Ap pear ( animated ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! view Controller . presentation Style . over Current Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Top ?. view Did Dis appear ( animated ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Top ?. view ?. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction InProgress Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition . on Enter ing Animation Finished ( transition Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint Stack () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition . on Enter ing Animation Finished ( transition Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Controller . view Did Ap pear ( animated ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! view Controller . presentation Style . over Current Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Top ?. view Did Dis appear ( animated ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction InProgress Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Stack () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion ?. invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontrollers . add ( view Controller ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPop Ġevery Ġsingle Ġcontrollers Ġin Ġthe Ġstack . ĠNO ĠAN IM ATION . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpop All () Ġ{ ĊĠĠĠĠĠĠĠ Ġtop ViewController ?. view Will Dis appear ( animated Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġtop ViewController ?. view Did Dis appear ( animated Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġcontrollers . reversed (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . navigation Controller Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . do Destroy View ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdim Cover s . reversed (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove View ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontrollers . clear () ĊĠĠĠĠĠĠĠ Ġdim Cover s . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPop Ġto Ġroot Ġview Ġcontroller . ĠNO ĠAN IM ATION . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpop To Root () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( controllers . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpop ( animated Ġ= Ġfalse , Ġcompletion Ġ= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprint Stack () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPop Ġall Ġview Ġcontroller Ġexcept Ġthe Ġtop Ġone . ĠNO ĠAN IM ATION . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpop All But Top () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( controllers . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġcontrollers . size Ġ- Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Pop Ġ= Ġcontrollers . remove At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Pop . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Pop . view Will Dis appear ( animated Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Pop . view Did Dis appear ( animated Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Pop . do Destroy View ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcover ToRemove Ġ= Ġdim Cover s . remove At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove View ( cover ToRemove ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprint Stack () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPop Ġthe Ġtop Ġview Ġcontroller Ġif Ġthere Ġis Ġmore Ġthan Ġone Ġview Ġcontroller Ġin Ġstack . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpop ( animated : ĠBoolean , Ġcompletion : Ġ(() Ġ-> ĠUnit )? ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġprint Stack () ĊĠĠĠĠĠĠĠ Ġif Ġ( transaction InProgress ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( controllers . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtransaction InProgress Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġto Pop Ġ= Ġcontrollers . remove At ( controllers . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġcover Ġ= Ġdim Cover s . remove At ( dim Cover s . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġnew Top Ġ= Ġtop ViewController ĊĠĠĠĠĠĠĠ Ġnew Top ?. view ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġif Ġ(! to Pop . presentation Style . over Current Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Top ?. view Will Ap pear ( animated ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( to Pop . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Pop . view Will Dis appear ( animated ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtransition Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Pop . presentation Style . transition Ġ?: ĠBottom To Top Controller Transition () ĊĠĠĠĠĠĠĠ Ġval Ġtransition Context Ġ= ĠController Transition . Transition Context ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Controller Ġ= Ġnew Top , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Controller Ġ= Ġto Pop , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcover Ġ= Ġcover , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Ġ= ĠRect ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( animated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition . create Exit ing Animation ( transition Context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠAnimation End Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition . on Exit ing Animation Finished ( transition Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove View ( cover ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Top Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbring Child To Front ( new Top . view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! to Pop . presentation Style . over Current Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Top ?. view Did Ap pear ( animated ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Pop . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Pop . view Did Dis appear ( animated ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Pop . do Destroy View ( this @ Controller Host ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction InProgress Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint Stack () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! to Pop . presentation Style . over Current Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Top ?. view Did Ap pear ( animated Ġ= Ġanimated ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition . on Exit ing Animation Finished ( transition Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Pop . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Pop . view Did Dis appear ( animated ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove View ( cover ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Pop . do Destroy View ( this @ Controller Host ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction InProgress Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Stack () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion ?. invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġon Back Pressed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( top ViewController ?. on Back Pressed () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( top ViewController ?. presentation Style ?. allow Dismiss By Back Button Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( controllers . size Ġ<= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpop ( animated Ġ= Ġtrue , Ġcompletion Ġ= Ġnull ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmeasure Child ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . measure ( EX ACT LY ( meas ured Width ), ĠEX ACT LY ( meas ured Height )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprint Stack () Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" ========== =") ĊĠĠĠĠĠĠĠ Ġlog ("${ controllers . size } ĠIn ĠStack , Ġ${ dim Cover s . size } Ġcovers Ġand Ġ${ child Count } Ġsub Views ") ĊĠĠĠĠĠĠĠ Ġlog (" Stack ĠĠĠĠ Ġ: ", Ġcontrollers ) ĊĠĠĠĠĠĠĠ Ġlog (" Dim ĠCover s :", Ġdim Cover s ) ĊĠĠĠĠĠĠĠ Ġlog (" ========== =") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdetector Ġ= ĊĠĠĠĠĠĠĠ ĠGest ure Detector Compat ( context , Ġobject Ġ: ĠGest ure Detector . Simple On Gesture Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Down ( e : ĠMotion Event ?): ĠBoolean Ġ= Ġhandle Interactive Gesture ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Single Tap Up ( e : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Point . x Ġ= Ġe . x . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Point . y Ġ= Ġe . y . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop ViewController ?. also Ġ{ Ġcurrent Top Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Top . presentation Style . allow Dismiss By Tap Outside Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Top . interactive Gesture Delegate ?. is Touch Outside ( point Ġ= Ġtemp Point ) Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop ( animated Ġ= Ġtrue , Ġcompletion Ġ= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scroll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe 1 : ĠMotion Event ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe 2 : ĠMotion Event ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance X : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Y : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e 1 Ġ== Ġnull Ġ|| Ġe 2 Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Point . x Ġ= Ġe 1 . x . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Point . y Ġ= Ġe 1 . y . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Point . x Ġ= Ġe 2 . x . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Point . y Ġ= Ġe 2 . y . toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( interactive Dismiss Context Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Interactive Dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Interactive Dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġprivate Ġvar Ġtemp Point Ġ= ĠPoint () ĊĠĠĠ Ġprivate Ġvar Ġstart Point Ġ= ĠPoint () ĊĠĠĠ Ġprivate Ġvar Ġcurrent Point Ġ= ĠPoint () ĊĠĠĠ Ġprivate Ġvar Ġhandle Interactive Gesture : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġinteractive Dismiss Context : ĠController Transition . Transition Context ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch Touch Event ( ev : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ== Ġ 0 Ġ|| Ġev Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠAlways Ġdispatch Ġto Ġthe Ġtop Ġview Ġcontroller Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Top Ġ= Ġtop ViewController ĊĠĠĠĠĠĠĠ Ġcurrent Top ?. view ?. dispatch Touch Event ( ev ) ĊĠĠĠĠĠĠĠ Ġ/* Ġif Ġtop Ġis Ġnavigation Ġcontroller , Ġlet Ġit ĊĠĠĠĠĠĠĠĠĠĠ Ġhandle Ġinteractive Ġgesture ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġif Ġ( current Top Ġis ĠNavigation Controller ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtemp Point . x Ġ= Ġev . x . toInt () ĊĠĠĠĠĠĠĠ Ġtemp Point . y Ġ= Ġev . y . toInt () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( ev . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Touch ing Outside Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Top ?. interactive Gesture Delegate ?. is Touch Outside ( point Ġ= Ġtemp Point ) Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcan Start Interactive Dismiss Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontrollers . size Ġ> Ġ 1 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Top ?. interactive Gesture Delegate ?. can Start Interactive Dismiss ( point Ġ= Ġtemp Point ) Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Interactive Gesture Ġ= Ġis Touch ing Outside Ġ|| Ġcan Start Interactive Dismiss ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( handle Interactive Gesture ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetector . on Touch Event ( ev ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( handle Interactive Gesture ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetector . on Touch Event ( ev ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ CANCEL , ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( handle Interactive Gesture ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetector . on Touch Event ( ev ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( interactive Dismiss Context Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Interactive Dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Interactive Gesture Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Interactive Dismiss () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( controllers . size Ġ<= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfrom Controller Ġ= Ġcontrollers [ controllers . size Ġ- Ġ 2 ]. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcover Ġ= Ġdim Cover s [ dim Cover s . size Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġto Controller Ġ= Ġcontrollers [ controllers . size Ġ- Ġ 1 ] ĊĊĠĠĠĠĠĠĠ ĠController Transition . Transition Context ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Controller Ġ= Ġfrom Controller , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Controller Ġ= Ġto Controller , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcover Ġ= Ġcover , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Ġ= ĠRect ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinteractive Dismiss Context Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Controller . presentation Style . transition ?. update Interactive Dismiss ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġstart Point , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġcurrent Point ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Interactive Dismiss () Ġ{ ĊĠĠĠĠĠĠĠ Ġinteractive Dismiss Context ?. also Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . to Controller . presentation Style . transition ?. update Interactive Dismiss ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġstart Point , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġcurrent Point ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġend Interactive Dismiss () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfrom Controller Ġ= Ġcontrollers [ controllers . size Ġ- Ġ 2 ] ĊĠĠĠĠĠĠĠ Ġval Ġto Controller Ġ= Ġcontrollers [ controllers . size Ġ- Ġ 1 ] ĊĊĠĠĠĠĠĠĠ Ġinteractive Dismiss Context ?. also Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Dismiss Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . to Controller . presentation Style . transition ?. finish Interactive Dismiss ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġstart Point , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġcurrent Point ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ== Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Dismiss ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop ( animated Ġ= Ġtrue , Ġcompletion Ġ= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Controller . presentation Style . transition ?. create Enter ing Animation ( context )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠAnimation End Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Controller . presentation Style . over Current Context . not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Controller . view . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinteractive Dismiss Context Ġ= Ġnull ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ /** Ċ Ġ* ĠCover Ġview Ġin Ġbetween Ġview Ġcontrollers . Ċ Ġ*/ Ċ private Ġclass ĠDim View ( context : ĠContext ) Ġ: ĠView ( context ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFrame Layout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFrame Layout . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFrame Layout . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġset BackgroundColor ( Color . BLACK ) ĊĠĠĠĠĠĠĠ Ġalpha Ġ= Ġ 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġlog ( var arg Ġargs : ĠAny ) Ġ{ ĊĠĠĠ ĠLog . d (" one Hook ", Ġargs . join ToString (" Ġ")) Ċ }