package Ġcom . c int ory . hyper ion . core . internal Ċ Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . hardware . Sensor Ċ import Ġandroid . hardware . Sensor Manager Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 4 . graphics . drawable . Drawable Compat Ċ import Ġandroid . support . v 4 . view . Margin LayoutParams Compat Ċ import Ġandroid . support . v 4 . view . View Compat Ċ import Ġandroid . support . v 4 . view . View Property Animator Listener Adapter Ċ import Ġandroid . support . v 4 . view . animation . Fast Out Slow In Interpolator Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Frame Layout Ċ import Ġcom . c int ory . hyper ion . core . R Ċ import Ġcom . c int ory . hyper ion . plugin . v 1 . Hyper ion Menu Ċ import Ġcom . c int ory . hyper ion . plugin . v 1 . Menu State Ċ import Ġcom . c int ory . hyper ion . plugin . v 1 . On Menu StateChanged Listener Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠC int ory Ġon Ġ 2 0 1 8 / 9 / 3 Ġ 1 5 : 4 5 Ċ Ġ* ĠEmail ï¼ļ C int ory @ gmail . com Ċ Ġ*/ Ċ class ĠHyper ion Menu Layout ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style ), ĊĠĠĠ ĠSh ake Detector . On Sh ake Listener , ĊĠĠĠ ĠHyper ion Menu Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsensor Manager : ĠSensor Manager ĊĠĠĠ Ġprivate Ġval Ġaccel erometer : ĠSensor ĊĠĠĠ Ġprivate Ġval Ġsh ake Detector : ĠSh ake Detector ĊĠĠĠ Ġprivate Ġval Ġlisteners Ġ= ĠArrayList < On Menu StateChanged Listener >( 4 ) ĊĊĠĠĠ Ġprivate Ġvar Ġplugin View : ĠHyper ion Plugin View ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġoverlay View : ĠView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmenu State Ġ= ĠMenu State . CLOSE ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġsensor Manager Ġ= ĠgetContext (). getSystem Service ( Context . SENSOR _ SERVICE ) Ġas ĠSensor Manager ĊĠĠĠĠĠĠĠ Ġaccel erometer Ġ= Ġsensor Manager . getDefault Sensor ( Sensor . TYPE _ AC CEL ERO METER ) ĊĠĠĠĠĠĠĠ Ġsh ake Detector Ġ= ĠSh ake Detector () ĊĠĠĠĠĠĠĠ Ġsh ake Detector . setOn Sh ake Listener ( this ) ĊĠĠĠĠĠĠĠ Ġset BackgroundColor ( Context Compat . getColor ( context , ĠR . color . h ype _ menu _ background )) ĊĠĠĠĠĠĠĠ Ġbackground . alpha Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġis Focus able Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġis Focus able In Touch Mode Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġid Ġ= ĠR . id . hyper ion _ menu ĊĠĠĠĠĠĠĠ ĠView Compat . set Important For Accessibility ( this , ĠView Compat . IMPORTANT _ FOR _ ACC ES SI B ILITY _ NO ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġplugin View Ġ= Ġget Plugin View () ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġplugin View . layout Params Ġas ĠMargin LayoutParams ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġ(( meas ured Width Ġ* Ġ 0 . 8 f ) Ġ/ Ġ 3 f ). toInt () ĊĠĠĠĠĠĠĠ ĠMargin LayoutParams Compat . set Margin Start ( params , Ġoffset ) ĊĠĠĠĠĠĠĠ Ġplugin View . layout Params Ġ= Ġparams ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To Window () ĊĠĠĠĠĠĠĠ Ġsensor Manager . register Listener ( shake Detector , Ġaccel erometer , ĠSensor Manager . SENSOR _ DELAY _ UI ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠĠĠĠĠ Ġsensor Manager . unregister Listener ( shake Detector ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Sh ake Gesture Sensitivity ( s ensitivity : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsh ake Detector . set Sh ake Gesture Sensitivity ( s ensitivity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon KeyUp ( keyCode : ĠInt , Ġevent : ĠKeyEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ BACK Ġ&& Ġis Menu Open ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollapse () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on KeyUp ( keyCode , Ġevent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Intercept Touch Event ( ev : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġ(( meas ured Width Ġ* Ġ 0 . 8 f ) Ġ/ Ġ 3 f ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġev !!. x ĊĠĠĠĠĠĠĠ Ġ// Ġmenu Ġis Ġopen Ġand Ġthe Ġuser Ġis Ġpressing Ġthe Ġapp Ġcontent Ġarea ĊĠĠĠĠĠĠĠ Ġreturn Ġ( x Ġ< Ġoffset Ġ&& Ġis Menu Open ()) Ġ|| Ġsuper . on Intercept Touch Event ( ev ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event !!. action Ġ== ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollapse () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Touch Event ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Sh ake () Ġ{ ĊĠĠĠĠĠĠĠ Ġexpand () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexpand () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Menu Open ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Menu State ( Menu State . OPEN ING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplugin view Ġ= Ġget Plugin View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoverlay View Ġ= Ġget Overlay View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugin view . translation X Ġ= Ġ 1 6 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġmeasured Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoffset Ġ= Ġwidth Ġ- Ġ( width Ġ/ Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . animate ( overlay View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation X (- offset . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale X ( 0 . 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale Y ( 0 . 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation Z ( 1 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( EXPAND _ COLL AP SE _ INTER POL ATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠView Property Animator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( view : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġrequest Ġfocus Ġso Ġwe Ġcan Ġrespond Ġto Ġkey Ġp resses . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Focus able Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Focus able In Touch Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Menu State ( Menu State . OPEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . animate ( plugin view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Layer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation X ( 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( EXPAND _ COLL AP SE _ INTER POL ATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġalpha Ġ= ĠObject Animator . of Int ( this , ĠBACK GROUND _ ALPHA , Ġ 2 5 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalpha . set Interpolator ( EXPAND _ COLL AP SE _ INTER POL ATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalpha . start () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġallows Ġapp Ġwho Ġhave Ġbackground s Ġset Ġon Ġthe Ġwindow Ġto Ġlook Ġcorrect Ġwhen Ġwe Ġpush ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtheir Ġcontent Ġaway . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBasic ally , Ġwe Ġ' fake ' Ġtheir Ġwindow Ġbackground Ġonto Ġour Ġoverlay Ġcontainer Ġbefore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġanim ating Ġit Ġout Ġto Ġthe Ġleft , Ġso Ġit Ġappears Ġthe Ġwindow Ġbackground Ġhas Ġremain ed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwith Ġthe Ġcontent . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen Ġwe Ġanimate Ġin Ġour Ġplugin Ġmenu Ġbackground Ġover Ġtop Ġof Ġtheir ĠACT UAL Ġwindow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbackground . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġactivity Ġ= ĠActivity Util . find Activity ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwindow Ġ= Ġactivity . window ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdecor Ġ= Ġwindow . decor View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . setBackground ( overlay View , Ġdecor . background ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġcollapse () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Menu Open ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Menu State ( Menu State . CLO SING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplugin View Ġ= Ġget Plugin View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoverlay View Ġ= Ġget Overlay View () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . animate ( overlay View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation X ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale X ( 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale Y ( 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation Z ( 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( EXPAND _ COLL AP SE _ INTER POL ATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠView Property Animator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( view : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . setBackground ( overlay View , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġdon 't Ġneed Ġto Ġrespond Ġto Ġkey Ġp resses Ġwhile Ġwe 're Ġclosed , Ġso Ġclear Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Focus able Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Focus able In Touch Mode Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Menu State ( Menu State . CLOSE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . animate ( plugin View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Layer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation X ( 1 6 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( EXPAND _ COLL AP SE _ INTER POL ATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġalpha Ġ= ĠObject Animator . of Int ( this , ĠBACK GROUND _ ALPHA , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalpha . interpol ator Ġ= ĠEXP AND _ COLL AP SE _ INTER POL ATOR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalpha . start () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Plugin View (): ĠHyper ion Plugin View Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġplugin View Ġ?: ĠfindViewById ( R . id . hyper ion _ plugins ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Overlay View (): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġoverlay View Ġ?: ĠfindViewById ( R . id . hyper ion _ overlay ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Menu Open (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmenu State Ġ== ĠMenu State . OPEN ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Menu State (): ĠMenu State Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmenu State ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Menu State ( menu State : ĠMenu State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . menu State Ġ!= Ġmenu State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . menu State Ġ= Ġmenu State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Plugin View (). set Menu State ( menu State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ Ġit . on Menu StateChanged ( menu State ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd On Menu StateChanged Listener ( listener : ĠOn Menu StateChanged Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠEXP AND _ COLL AP SE _ INTER POL ATOR Ġ= ĠFast Out Slow In Interpolator () ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠBACK GROUND _ ALPHA Ġ= Ġobject Ġ: ĠInt Property < Hyper ion Menu Layout >(" Background Alpha ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠsetValue ( layout : ĠHyper ion Menu Layout , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . background . alpha Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget ( layout : ĠHyper ion Menu Layout ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDrawable Compat . get Alpha ( layout !!. background ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }