package Ġre net ik . android . controller . base Ċ Ċ import Ġandroid . view . Gravity .* Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . ViewGroup . LayoutParams . MATCH _ PARENT Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . Frame Layout . LayoutParams Ċ import Ġandroidx . core . view . update LayoutParams Ċ import Ġre net ik . android . content . color Ċ import Ġre net ik . android . content . dp To Pixel Ċ import Ġre net ik . android . content . dp To Pixel F Ċ import Ġre net ik . android . controller . R Ċ import Ġre net ik . android . controller . base . Dialog Animation .* Ċ import Ġre net ik . android . controller . base . Dialog Popup Side . Bottom Ċ import Ġre net ik . android . controller . base . Dialog Popup Side . Right Ċ import Ġre net ik . android . controller . common . CS Navigation Animation .* Ċ import Ġre net ik . android . controller . common . CS Navigation Animation . None Ċ import Ġre net ik . android . controller . common . CS Navigation Item Ċ import Ġre net ik . android . framework . event .* Ċ import Ġre net ik . android . framework . event . C SE vent . Companion . event Ċ import Ġre net ik . android . framework . event . property . C SE vent Property Functions . property Ċ import Ġre net ik . android . framework . lang . CS Layout Res Ċ import Ġre net ik . android . framework . lang . CS Layout Res . Companion . layout Ċ import Ġre net ik . android . framework . lang . property . set False Ċ import Ġre net ik . android . framework . lang . property . set True Ċ import Ġre net ik . android . view .* Ċ Ċ enum Ġclass ĠDialog Animation Ġ{ ĊĠĠĠ ĠNone , ĠSlide , ĠF ade , ĠSlide Fade Ċ } Ċ Ċ enum Ġclass ĠDialog Popup Side Ġ{ ĊĠĠĠ ĠBottom , ĠRight Ċ } Ċ Ċ open Ġclass ĠCS Navigation Dialog < ViewType Ġ: ĠView >( parent : ĠCS Activity View < out ĠViewGroup >) ĊĠĠĠ Ġ: ĠCS Activity View < Frame Layout >( parent . navigation !! , Ġlayout ( R . layout . cs _ frame _ match )), ĊĠĠĠ ĠCS Navigation Item Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġdialog Content : ĠView Type ĊĊĠĠĠ Ġconstructor ( parent : ĠCS Activity View < out ĠViewGroup >, Ġlayout : ĠCS Layout Res ) Ġ: Ġthis ( parent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog Content Ġ= Ġinf late < ViewType >( layout . id ). also Ġ{ Ġit . is Clickable Ġ= Ġtrue Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġis Fullscreen Navigation Item Ġ= Ġproperty ( false ) ĊĠĠĠ Ġvar Ġanimation Ġ= ĠSlide ĊĠĠĠ Ġprivate Ġval Ġmargin Dp Ġ= Ġ 7 ĊĊĠĠĠ Ġprivate Ġval Ġevent On Dismiss Ġ= Ġevent < Unit >() ĊĠĠĠ Ġfun Ġon Dismiss ( function : Ġ() Ġ-> ĠUnit ) Ġ= Ġevent On Dismiss . listen Ġ{ Ġfunction () Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcancel On Touch Out Ġ= Ġtrue ĊĠĠĠ Ġfun Ġcancel On Touch Out ( cancel : ĠBoolean Ġ= Ġtrue ) Ġ= Ġapply Ġ{ Ġcancel On Touch Out Ġ= Ġcancel Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Ready () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Ready () ĊĠĠĠĠĠĠĠ Ġview . background ( color ( R . color . cs _ dialog _ background )). onClick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cancel On Touch Out ) Ġdismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview . add ( dialog Content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Removed From Parent () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Removed From Parent () ĊĠĠĠĠĠĠĠ Ġevent On Dismiss . fire () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġpush Animation ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( animation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSlide , Slide Fade Ġ-> ĠSlide In Right ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ade Ġ-> ĠF ade In ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Animation . None Ġ-> ĠNone ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġpop Animation ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( animation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSlide Ġ-> ĠSlide Out Left ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ade , Slide Fade Ġ-> ĠF ade Out ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Animation . None Ġ-> ĠNone ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdismiss () Ġ= ĊĠĠĠĠĠĠĠ Ġnavigation !!. pop ( this ) ĊĊĠĠĠ Ġfun Ġshow ( animation : ĠDialog Animation ? Ġ= Ġnull ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġanimation ?. let Ġ{ Ġthis . animation Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġnavigation !!. push ( this ) ĊĠĠĠĠĠĠĠ Ġupdate Visibility () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfrom ( from View : ĠView , Ġside : ĠDialog Popup Side Ġ= ĠBottom ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġpressed ( from View ) ĊĠĠĠĠĠĠĠ Ġis Fullscreen Navigation Item . set False () ĊĠĠĠĠĠĠĠ Ġanimation Ġ= ĠF ade ĊĊĠĠĠĠĠĠĠ Ġdialog Content . update LayoutParams < LayoutParams > Ġ{ Ġgravity Ġ= ĠSTART Ġor ĠTOP Ġ} ĊĠĠĠĠĠĠĠ Ġregister ( dialog Content . has Size Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( side Ġ== ĠBottom ) Ġposition Dialog Content From View Bottom ( from View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( side Ġ== ĠRight ) Ġposition Dialog Content From View Right ( from View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcorrect Height () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġview . background ( color ( R . color . cs _ dialog _ popup _ background )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġstatus Bar Height Ġ= Ġactivity (). activity View !!. view . location On Screen . y ĊĊĠĠĠ Ġprivate Ġfun Ġposition Dialog Content From View Bottom ( from View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfrom View Location Ġ= Ġfrom View . location On Screen ĊĠĠĠĠĠĠĠ Ġval Ġfrom View Top Center X Ġ= Ġfrom View Location . x Ġ+ Ġ( from View . width Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġvar Ġdesired X Ġ= Ġfrom View Top Center X . toFloat () Ġ- Ġ( dialog Content . width Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( desired X Ġ+ Ġdialog Content . width Ġ> Ġdisplay Width Ġ- Ġdp To Pixel F ( margin Dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesired X Ġ-= Ġ( desired X Ġ+ Ġdialog Content . width ) Ġ- Ġ( display Width Ġ- Ġdp To Pixel F ( margin Dp )) ĊĠĠĠĠĠĠĠ Ġif Ġ( desired X Ġ< Ġdp To Pixel F ( margin Dp )) Ġdesired X Ġ= Ġdp To Pixel F ( margin Dp ) ĊĠĠĠĠĠĠĠ Ġdialog Content . x Ġ= Ġdesired X ĊĊĠĠĠĠĠĠĠ Ġdialog Content . y Ġ= Ġfrom View Location . y . toFloat () Ġ+ Ġfrom View . height Ġ- Ġstatus Bar Height ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcorrect Height () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( dialog Content . y Ġ+ Ġdialog Content . height Ġ> Ġdisplay Height Ġ- Ġdp To Pixel F ( margin Dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Content . height ( display Height Ġ- Ġstatus Bar Height Ġ- Ġdp To Pixel F ( margin Dp ) Ġ- Ġdialog Content . y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġposition Dialog Content From View Right ( from View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfrom View Location Ġ= Ġfrom View . location On Screen ĊĠĠĠĠĠĠĠ Ġval Ġfrom View Left Center Y Ġ= Ġfrom View Location . y Ġ+ Ġ( from View . height Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġvar Ġdesired Y Ġ= Ġfrom View Left Center Y . toFloat () Ġ- Ġ( dialog Content . height Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( desired Y Ġ+ Ġdialog Content . height Ġ> Ġdisplay Height Ġ- Ġdp To Pixel F ( margin Dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Y Ġ-= Ġ( desired Y Ġ+ Ġdialog Content . height ) Ġ- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( display Height Ġ- Ġdp To Pixel F ( margin Dp ) Ġ- Ġstatus Bar Height ) ĊĠĠĠĠĠĠĠ Ġif Ġ( desired Y Ġ< Ġdp To Pixel F ( margin Dp )) Ġdesired Y Ġ= Ġdp To Pixel F ( margin Dp ) ĊĠĠĠĠĠĠĠ Ġdialog Content . x Ġ= Ġfrom View Location . x . toFloat () Ġ+ Ġfrom View . width ĊĠĠĠĠĠĠĠ Ġdialog Content . y Ġ= Ġdesired Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcenter () Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġis Fullscreen Navigation Item . set False () ĊĠĠĠĠĠĠĠ Ġanimation Ġ= ĠF ade ĊĠĠĠĠĠĠĠ Ġdialog Content . update LayoutParams < LayoutParams > Ġ{ Ġgravity Ġ= ĠC ENTER Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO Ġnot Ġused Ġ.. Ġuseful Ġ? Ġnot Ġ? Ġremove . ĊĠĠĠ Ġfun Ġmargin ( margin : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog Content . update LayoutParams < LayoutParams > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Margin Ġ= Ġdp To Pixel ( margin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Margin Ġ= Ġdp To Pixel ( margin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Margin Ġ= Ġdp To Pixel ( margin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Margin Ġ= Ġdp To Pixel ( margin ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfull Screen () Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġis Fullscreen Navigation Item . set True () ĊĠĠĠĠĠĠĠ Ġanimation Ġ= ĠSlide ĊĠĠĠĠĠĠĠ Ġdialog Content . update LayoutParams < LayoutParams > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠMATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠMATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠCS Navigation Dialog <* >. pressed ( button : ĠView ) Ġ= Ġapply Ġ{ ĊĠĠĠ Ġbutton . is Pressed Ġ= Ġtrue ĊĠĠĠ Ġafter Global Layout Ġ{ Ġbutton . is Pressed Ġ= Ġtrue Ġ} ĊĠĠĠ Ġon Dismiss Ġ{ Ġbutton . is Pressed Ġ= Ġfalse Ġ} Ċ }