/* Ċ Ġ* ĠĠĠĠ ĠThis Ġfile Ġis Ġpart Ġof ĠL awn ch air ĠLaunch er . Ċ Ġ* Ċ Ġ* ĠĠĠĠ ĠL awn ch air ĠLaunch er Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ċ Ġ* ĠĠĠĠ Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby Ċ Ġ* ĠĠĠĠ Ġthe ĠFree ĠSoftware ĠFoundation , Ġeither Ġversion Ġ 3 Ġof Ġthe ĠLicense , Ġor Ċ Ġ* ĠĠĠĠ Ġ( at Ġyour Ġoption ) Ġany Ġlater Ġversion . Ċ Ġ* Ċ Ġ* ĠĠĠĠ ĠL awn ch air ĠLaunch er Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ċ Ġ* ĠĠĠĠ Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof Ċ Ġ* ĠĠĠĠ ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe Ċ Ġ* ĠĠĠĠ ĠGNU ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* ĠĠĠĠ ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ċ Ġ* ĠĠĠĠ Ġalong Ġwith ĠL awn ch air ĠLaunch er . Ġ ĠIf Ġnot , Ġsee Ġ< https :// www . gnu . org / licenses />. Ċ Ġ*/ Ċ Ċ package Ġorg . zim mob . zim lx . gest ures Ċ Ċ import Ġandroid . accessibility service . Accessibility Service Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . graphics . PointF Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . media . Audio Manager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . view .* Ċ import Ġandroidx . annotation . Keep Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . android . launcher 3 . Launcher AppState Ċ import Ġcom . android . launcher 3 . R Ċ import Ġcom . android . quick step . Overview Interaction State Ċ import Ġcom . android . quick step . Touch Consumer Ċ import Ġcom . android . system ui . shared . system . WindowManager Wrapper Ċ import Ġorg . json . JSONObject Ċ import Ġorg . zim mob . zim lx . Z im Launcher Ċ import Ġorg . zim mob . zim lx . util . NavigationBar Compat Ċ import Ġorg . zim mob . zim lx . util . zim Prefs Ċ import Ġorg . zim mob . zim lx . zim App Ċ import Ġkotlin . math . abs Ċ Ċ @ Target Api ( Build . VERSION _ CODES . P ) Ċ class ĠNavigation Bar Gesture Consumer ( private Ġval Ġcontext : ĠContext , Ġtarget : ĠTouch Consumer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ NavigationBar Compat . Hit Target Ġprivate Ġval Ġdown Target : ĠInt ) Ġ: ĊĠĠĠĠĠĠĠ ĠPass Through Touch Consumer ( target ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlauncher Ġget () Ġ= ĠLaunch er AppState . getInstance ( context ). launcher Ġas ? ĠZ im Launcher ĊĠĠĠ Ġprivate Ġval Ġcontroller Ġget () Ġ= Ġlauncher ?. gesture Controller ĊĠĠĠ Ġprivate Ġvar Ġdisplay Rotation Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġstable Insets Ġ= ĠRect () ĊĠĠĠ Ġprivate Ġval Ġtmp Point Ġ= ĠPoint () ĊĠĠĠ Ġprivate Ġval Ġdown Pos Ġ= ĠPoint F () ĊĠĠĠ Ġprivate Ġval Ġlast Pos Ġ= ĠPoint F () ĊĠĠĠ Ġprivate Ġvar Ġnav Bar Size Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġdown Fraction Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġdown Time : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġgesture Handler : ĠGest ure Handler ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġin Quick Sc rub Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġvar Ġpass Through Enabled : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġin Quick Sc rub Ġ|| Ġgesture Handler Ġ== Ġnull Ġ|| Ġ! passed Initial S lop ĊĠĠĠĠĠĠĠ Ġset (_) Ġ{} ĊĊĠĠĠ Ġprivate Ġvar Ġpassed Initial S lop Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġquick Step Drag S lop Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġquick Sc rub Drag S lop Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġactive Pointer Id Ġ= ĠMotion Event . INVALID _ POINTER _ ID ĊĠĠĠ Ġprivate Ġval Ġis R tl Ġ= Ġcontext . resources . configuration . layout Direction Ġ== ĠView . LAYOUT _ DIRECTION _ RTL ĊĠĠĠ Ġprivate Ġval Ġswipe For Back Ġ= Ġlauncher Ġ!= Ġnull Ġ&& Ġcontext . zim Prefs . swipe Left To Go Back ĊĊĠĠĠ Ġoverride Ġfun Ġaccept ( ev : ĠMotion Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( ev . action Mask ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgesture Handler Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( controller Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . accept ( ev ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Pointer Id Ġ= Ġev . get Pointer Id ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassed Initial S lop Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquick Step Drag S lop Ġ= ĠNavigation Bar Compat . get Quick Step Drag S lop Px () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquick Sc rub Drag S lop Ġ= ĠNavigation Bar Compat . get Quick Sc rub Touch S lop Px () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown Time Ġ= ĠSystem Clock . uptime Millis () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown Pos . set ( ev . x , Ġev . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Pos . set ( down Pos ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġcontext . getSystem Service ( WindowManager :: class . java ) !!. default Display ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay . getSize ( tmp Point ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Rotation Ġ= Ġdisplay . rotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager Wrapper . getInstance (). get Stable Insets ( stable Insets ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Bar Size Ġ= Ġif Ġ( is NavBar Vertical ) Ġtmp Point . y Ġelse Ġtmp Point . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdown Position Ġ= Ġif Ġ( is NavBar Vertical ) Ġev . y Ġelse Ġev . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown Fraction Ġ= Ġdown Position Ġ/ Ġnav Bar Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is NavBar On Right ) Ġdown Fraction Ġ= Ġ 1 Ġ- Ġdown Fraction ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgesture Handler Ġ= Ġget Gesture Handler () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpointer Index Ġ= Ġev . find Pointer Index ( active Pointer Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pointer Index Ġ== ĠMotion Event . INVALID _ POINTER _ ID ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Pos . set ( ev . getX ( pointer Index ), Ġev . getY ( pointer Index )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! passed Initial S lop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( abs ( get Vertical Dis placement ( ev )) Ġ> Ġquick Step Drag S lop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassed Initial S lop Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! in Quick Sc rub Ġ&& Ġgesture Handler Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgesture Handler ?. on Gesture Trigger ( controller !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( swipe For Back Ġ&& Ġget Horizontal Dis placement ( ev ) Ġ> Ġquick Sc rub Drag S lop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassed Initial S lop Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! in Quick Sc rub ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( perform Back Press ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Click Effect () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . accept ( ev ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġperform Back Press (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* if Ġ( Root Helper Manager . is Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoot Helper Manager . getInstance ( context ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . send KeyEvent ( KeyEvent . KEYCODE _ BACK , ĠKeyEvent . ACTION _ DOWN , Ġ 0 , Ġdown Time , ĠSystem Clock . uptime Millis ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . send KeyEvent ( KeyEvent . KEYCODE _ BACK , ĠKeyEvent . ACTION _ UP , Ġ 0 , Ġdown Time , ĠSystem Clock . uptime Millis ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ}*/ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . zim App . perform Global Action ( Accessibility Service . GLOBAL _ ACTION _ BACK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġplay Click Effect () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaudio Manager Ġ= ĠContext Compat . getSystem Service ( context , ĠAudio Manager :: class . java ) ĊĠĠĠĠĠĠĠ Ġaudio Manager ?. play Sound Effect ( Sound Effect Constants . CLICK ) ĊĠĠĠĠĠĠĠ Ġlauncher ?. root View ?. perform H aptic Feedback ( H aptic Feedback Constants . VIRTUAL _ KEY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠH aptic Feedback Constants . FLAG _ IGNORE _ VIEW _ SETTING ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Vertical Dis placement ( ev : ĠMotion Event ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis NavBar On Right Ġ-> Ġev . x Ġ- Ġdown Pos . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis NavBar On Left Ġ-> Ġdown Pos . x Ġ- Ġev . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġev . y Ġ- Ġdown Pos . y ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Horizontal Dis placement ( ev : ĠMotion Event ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis NavBar On Right Ġ-> Ġev . y Ġ- Ġdown Pos . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis NavBar On Left Ġ-> Ġdown Pos . y Ġ- Ġev . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdown Pos . x Ġ- Ġev . x ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġif Ġ( is R tl ) Ġ- it Ġelse Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Gesture Handler (): ĠGest ure Handler ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontroller Ġ= Ġcontroller Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= Ġcontroller . nav Swipe Up Gesture . get Handler For Down Fraction ( down Fraction ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( handler Ġis ĠSwitch Apps Gesture Handler ) Ġnull Ġelse Ġhandler ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġis NavBar Vertical Ġget () Ġ= Ġis NavBar On Left Ġ|| Ġis NavBar On Right ĊĊĠĠĠ Ġprivate Ġval Ġis NavBar On Right Ġget () Ġ= Ġdisplay Rotation Ġ== ĠSurface . ROT ATION _ 9 0 Ġ&& Ġstable Insets . right Ġ> Ġ 0 ĊĊĠĠĠ Ġprivate Ġval Ġis NavBar On Left Ġget () Ġ= Ġdisplay Rotation Ġ== ĠSurface . ROT ATION _ 2 7 0 Ġ&& Ġstable Insets . left Ġ> Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Touch Tracking ( interaction Type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . update Touch Tracking ( interaction Type ) ĊĠĠĠĠĠĠĠ Ġin Quick Sc rub Ġ= Ġinteraction Type Ġ== ĠTouch Consumer . INTER ACTION _ QU ICK _ SCR UB ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Keep Ċ class ĠNav Swipe Up Gesture ( controller : ĠGest ure Controller ) Ġ: ĠGest ure ( controller ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġis Enabled Ġ= ĠOverview Interaction State . INSTANCE . get ( controller . launcher ). is Swipe Up Gesture Enabled ĊĊĠĠĠ Ġprivate Ġval Ġdefault Handler Ġ= ĠSwitch Apps Gesture Handler ( controller . launcher , Ġnull ) ĊĠĠĠ Ġprivate Ġval Ġleft Handler Ġby Ġcontroller . create Handler Pref (" pref _ gesture _ nav _ swipe _ up _ left ", Ġdefault Handler ) ĊĠĠĠ Ġprivate Ġval Ġcenter Handler Ġby Ġcontroller . create Handler Pref (" pref _ gesture _ nav _ swipe _ up _ center ", Ġdefault Handler ) ĊĠĠĠ Ġprivate Ġval Ġright Handler Ġby Ġcontroller . create Handler Pref (" pref _ gesture _ nav _ swipe _ up _ right ", Ġdefault Handler ) ĊĊĠĠĠ Ġfun Ġget Handler For Down Fraction ( down Fraction : ĠFloat ): ĠGest ure Handler Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( down Fraction Ġ< Ġ 0 . 2 5 f ) Ġreturn Ġleft Handler ĊĠĠĠĠĠĠĠ Ġif Ġ( down Fraction Ġ> Ġ 0 . 7 5 f ) Ġreturn Ġright Handler ĊĠĠĠĠĠĠĠ Ġreturn Ġcenter Handler ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Keep Ċ class ĠSwitch Apps Gesture Handler ( context : ĠContext , Ġconfig : ĠJSONObject ?) Ġ: ĠGest ure Handler ( context , Ġconfig ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval ĠdisplayName : ĠString Ġ= Ġcontext . getString ( R . string . action _ switch _ apps ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Gesture Trigger ( controller : ĠGest ure Controller , Ġview : ĠView ?) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Available For Swipe Up ( is Swipe Up : ĠBoolean ) Ġ= Ġis Swipe Up Ċ } Ċ