/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠP ablo ĠGuard i ola ĠS Ã¡n che z . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . pg u ard i ola . ui gesture gen . dsl Ċ Ċ import Ġandroid . support . test . uia utom ator . Configurator Ċ import Ġandroid . support . test . uia utom ator . Ui Object Ċ import Ġk ategory .* Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ fun Ġsafe Interpreter ( view : ĠUi Object ): ĠFunction K < Gest ures DSL HK , ĠValid ated Kind Partial < Non Empty List < Gesture Error >>> Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠFunction K < Gest ures DSL HK , ĠValid ated Kind Partial < Non Empty List < Gesture Error >>> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< A > Ġinvoke ( fa : ĠGest ures DSL Kind < A >): ĠValid ated Kind < Non Empty List < Gesture Error >, ĠA > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg Ġ= Ġfa . ev () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( g ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . With View Ġ-> ĠTry Ġ{ Ġg . f ( view ) Ġ}. fold ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠGest ure Error . Unknown Error ( it ). invalid N el < Gesture Error , ĠA >() Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġit . valid N el () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Combine Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Result Ġ= Ġg . a . validate ( view ). map Ġ{ Ġ_ Ġ-> ĠUnit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Result Ġ= Ġg . b . validate ( view ). map Ġ{ Ġ_ Ġ-> ĠUnit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Result . combine K ( b Result , ĠNon Empty List . sem ig roup < Gesture Error >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Click Ġ-> Ġview . click (). validate ({ ĠGest ure Error . Click Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Double Tap Ġ-> ĠTry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdouble Tap Impl ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. fold ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠGest ure Error . Double Tap Error ( view ). invalid N el < Gesture Error , ĠUnit >() Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġit . valid N el () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Pin ch In Ġ-> Ġview . pin ch In ( g . percent , Ġg . steps ). validate ({ ĠGest ure Error . Pin ch In Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Pin ch Out Ġ-> Ġview . pin ch Out ( g . percent , Ġg . steps ). validate ({ ĠGest ure Error . Pin ch Out Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Swipe Left Ġ-> Ġview . swipe Left ( g . steps ). validate ({ ĠGest ure Error . Swipe Left Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Swipe Right Ġ-> Ġview . swipe Right ( g . steps ). validate ({ ĠGest ure Error . Swipe Right Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Swipe Up Ġ-> Ġview . swipe Up ( g . steps ). validate ({ ĠGest ure Error . Swipe Up Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Swipe Down Ġ-> Ġview . swipe Down ( g . steps ). validate ({ ĠGest ure Error . Swipe Down Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Multi Touch Ġ-> Ġview . perform Multi Pointer Gesture (*( g . to uches . to Typed Array ())). validate ({ ĠGest ure Error . Multi Touch Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Two Pointer Ġ-> Ġview . perform Two Pointer Gesture ( g . first Start , Ġg . second Start , Ġg . first End , Ġg . second End , Ġg . steps ). validate ({ ĠGest ure Error . Two Pointer Error ( view ) Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġas ĠValid ated Kind < Non Empty List < Gesture Error >, ĠA > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ private Ġfun Ġdouble Tap Impl ( view : ĠUi Object ) Ġ{ ĊĠĠĠ Ġval Ġconfigur ator Ġ= ĠConfigurator . getInstance () ĊĠĠĠ Ġconfigur ator . action Ack nowled gment Timeout Ġ= Ġ 4 0 ĊĠĠĠ Ġview . click () ĊĠĠĠ Ġview . click () ĊĠĠĠ Ġconfigur ator . action Ack nowled gment Timeout Ġ= Ġ 3 0 0 0 Ċ } Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ fun Ġsafe Interpreter Either ( view : ĠUi Object ): ĠFunction K < Gest ures DSL HK , ĠEither Kind Partial < Gesture Error >> Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠFunction K < Gest ures DSL HK , ĠEither Kind Partial < Gesture Error >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< A > Ġinvoke ( fa : ĠGest ures DSL Kind < A >): ĠEither Kind < Gesture Error , ĠA > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg Ġ= Ġfa . ev () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( g ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . With View Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEither . mon ad Error < Gesture Error >(). catch ({ Ġg . f ( view ) Ġ}, Ġ{ ĠGest ure Error . Unknown Error ( it ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Combine Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Result Ġ= Ġg . a . fail Fast ( view ). map Ġ{ Ġ_ Ġ-> ĠUnit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Result Ġ= Ġg . b . fail Fast ( view ). map Ġ{ Ġ_ Ġ-> ĠUnit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Result . combine K ( b Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Click Ġ-> Ġview . click (). either ({ ĠGest ure Error . Click Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Double Tap Ġ-> ĠEither . mon ad Error < Gesture Error >(). catch ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdouble Tap Impl ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĠGest ure Error . Double Tap Error ( view ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Pin ch In Ġ-> Ġview . pin ch In ( g . percent , Ġg . steps ). either ({ ĠGest ure Error . Pin ch In Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Pin ch Out Ġ-> Ġview . pin ch Out ( g . percent , Ġg . steps ). either ({ ĠGest ure Error . Pin ch Out Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Swipe Left Ġ-> Ġview . swipe Left ( g . steps ). either ({ ĠGest ure Error . Swipe Left Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Swipe Right Ġ-> Ġview . swipe Right ( g . steps ). either ({ ĠGest ure Error . Swipe Right Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Swipe Up Ġ-> Ġview . swipe Up ( g . steps ). either ({ ĠGest ure Error . Swipe Up Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Swipe Down Ġ-> Ġview . swipe Down ( g . steps ). either ({ ĠGest ure Error . Swipe Down Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Multi Touch Ġ-> Ġview . perform Multi Pointer Gesture (*( g . to uches . to Typed Array ())). either ({ ĠGest ure Error . Multi Touch Error ( view ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGest ures DSL . Two Pointer Ġ-> Ġview . perform Two Pointer Gesture ( g . first Start , Ġg . second Start , Ġg . first End , Ġg . second End , Ġg . steps ). either ({ ĠGest ure Error . Two Pointer Error ( view ) Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġas ĠEither Kind < Gesture Error , ĠA > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ fun Ġlogging Interpreter ( view : ĠUi Object ): ĠFunction K < Gest ures DSL HK , ĠEither Kind Partial < Gesture Error >> Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠFunction K < Gest ures DSL HK , ĠEither Kind Partial < Gesture Error >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< A > Ġinvoke ( fa : ĠGest ures DSL Kind < A >): ĠEither Kind < Gesture Error , ĠA > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( fa ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsafe Interpreter Either ( view ) Ġas ĠEither Kind < Gesture Error , ĠA > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ fun ĠBoolean . validate ( if Invalid : Ġ() Ġ-> ĠGest ure Error ): ĠValid ated N el < Gesture Error , ĠUnit > Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( true ) ĠUnit . valid N el () ĊĠĠĠĠĠĠĠ Ġelse Ġif Invalid (). invalid N el () Ċ Ċ fun ĠBoolean . invalidate ( if Invalid : Ġ() Ġ-> ĠGest ure Error ): ĠValid ated N el < Gesture Error , ĠUnit > Ġ= ĊĠĠĠĠĠĠĠ Ġif Invalid (). invalid N el () Ċ Ċ fun ĠBoolean . either ( if Invalid : Ġ() Ġ-> ĠGest ure Error ): ĠEither < Gesture Error , ĠUnit > Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( true ) ĠUnit . right () ĊĠĠĠĠĠĠĠ Ġelse Ġif Invalid (). left () Ċ