/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 6 ĠN ish ant ĠS riv ast ava Ċ Ġ* Ċ Ġ* Ġ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 . github . nis r ul z . sense ys ample Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Switch Compat Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . Scale Gesture Detector Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Compound Button Ċ import Ġandroid . widget . TextView Ċ import Ġcom . github . nis r ul z . sense y . Pin ch Scale Detector Ċ import Ġcom . github . nis r ul z . sense y . Sense y Ċ import Ġcom . github . nis r ul z . sense y . Touch Type Detector Ċ import Ġkotlinx . android . synt hetic . main . activity _ main . linear layout _ controls Ċ import Ġkotlinx . android . synt hetic . main . activity _ touch . textView _ result Ċ Ċ class ĠTouch Activity Ġ: ĠAppCompatActivity (), ĠCompound Button . On Checked ChangeListener Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠLOG TAG Ġ= Ġjava Class . canonical Name ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġhandler : ĠHandler ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ touch ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInit ĠUI Ġcontrols , views Ġand Ġhandler ĊĠĠĠĠĠĠĠ Ġhandler Ġ= ĠHandler () ĊĊĠĠĠĠĠĠĠ Ġ// Setup ĠSw itches ĊĠĠĠĠĠĠĠ Ġset On Checked ChangeListener ForAll Sw itches () ĊĠĠĠĠĠĠĠ Ġset All Sw itches To False State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĊĠĠĠĠĠĠĠ Ġ// ĠStop ĠDet e ctions ĊĠĠĠĠĠĠĠ Ġstop All Detector s () ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġall Ġswitches Ġto Ġoff Ġposition ĊĠĠĠĠĠĠĠ Ġset All Sw itches To False State () ĊĊĠĠĠĠĠĠĠ Ġreset Result In View ( textView _ result ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ*** ĠIMPORT ANT Ġ*** ĊĠĠĠĠĠĠĠ Ġ// ĠStop ĠS ense y Ġand Ġrelease Ġthe Ġcontext Ġheld Ġby Ġit ĊĠĠĠĠĠĠĠ ĠS ense y . getInstance (). stop () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġ// ĠInit ĠS ense y ĊĠĠĠĠĠĠĠ ĠS ense y . getInstance (). init ( this ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġset All Sw itches To False State () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġv : ĠView ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlinear layout _ controls . child Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Ġ= Ġlinear layout _ controls . getChild At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// do Ġsomething Ġwith Ġyour Ġchild Ġelement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v Ġis ĠSwitch Compat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset On Checked ChangeListener ForAll Sw itches () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġv : ĠView ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlinear layout _ controls . child Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Ġ= Ġlinear layout _ controls . getChild At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// do Ġsomething Ġwith Ġyour Ġchild Ġelement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v Ġis ĠSwitch Compat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . setOn Checked ChangeListener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġstop All Detector s () Ġ{ ĊĠĠĠĠĠĠĠ ĠS ense y . getInstance ()?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Touch Type Detection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Pin ch Scale Detection () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSetup Ġon Touch Event Ġfor Ġdetect ing Ġtype Ġof Ġtouch Ġgesture ĊĠĠĠĠĠĠĠ ĠS ense y . getInstance (). setup Dispatch Touch Event ( event ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . dispatch Touch Event ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon CheckedChanged ( switch btn : ĠCompound Button , Ġis Checked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( switch btn . text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . touch _ detection ) Ġ-> Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Touch Type Detection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS ense y . getInstance (). stop Touch Type Detection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . pin ch _ scale _ detection ) Ġ-> Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Pin ch Detection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS ense y . getInstance (). stop Pin ch Scale Detection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Result In View ( txt : ĠTextView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . post Delayed ({ Ġtxt . text Ġ= ĠgetString ( R . string . results _ show _ here ) Ġ}, Ġ 3 0 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Result TextView ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( textView _ result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView _ result . text Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Result In View ( textView _ result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( LOG TAG , Ġtext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Pin ch Detection () Ġ{ ĊĠĠĠĠĠĠĠ ĠS ense y . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start Pin ch Scale Detection ( this @ Touch Activity , Ġobject Ġ: ĠPin ch Scale Detector . Pin ch Scale Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scale ( scale Gesture Detector : ĠScale Gesture Detector , Ġis Scaling Out : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Scaling Out ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result TextView (" Scaling ĠOut ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result TextView (" Scaling ĠIn ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scale End ( scale Gesture Detector : ĠScale Gesture Detector ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result TextView (" Scaling Ġ: ĠSto pped ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scale Start ( scale Gesture Detector : ĠScale Gesture Detector ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result TextView (" Scaling Ġ: ĠStarted ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Touch Type Detection () Ġ{ ĊĠĠĠĠĠĠĠ ĠS ense y . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start Touch Type Detection ( this , Ġobject Ġ: ĠTouch Type Detector . Touch Typ Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Double Tap () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result TextView (" Double ĠT ap ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Long Press () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result TextView (" Long Ġpress ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scroll ( scroll Direction : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( scroll Direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTouch Type Detector . SCROLL _ DIR _ UP Ġ-> Ġset Result TextView (" Scrolling ĠUp ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTouch Type Detector . SCROLL _ DIR _ DOWN Ġ-> Ġset Result TextView (" Scrolling ĠDown ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTouch Type Detector . SCROLL _ DIR _ LEFT Ġ-> Ġset Result TextView (" Scrolling ĠLeft ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTouch Type Detector . SCROLL _ DIR _ RIGHT Ġ-> Ġset Result TextView (" Scrolling ĠRight ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}// ĠDo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Single Tap () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result TextView (" Single ĠT ap ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Swipe ( swipe Direction : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( swipe Direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTouch Type Detector . SW I PE _ DIR _ UP Ġ-> Ġset Result TextView (" Swipe ĠUp ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTouch Type Detector . SW I PE _ DIR _ DOWN Ġ-> Ġset Result TextView (" Swipe ĠDown ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTouch Type Detector . SW I PE _ DIR _ LEFT Ġ-> Ġset Result TextView (" Swipe ĠLeft ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTouch Type Detector . SW I PE _ DIR _ RIGHT Ġ-> Ġset Result TextView (" Swipe ĠRight ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}// do Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Three F inger Single Tap () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result TextView (" Three ĠF inger ĠT ap ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Two F inger Single Tap () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result TextView (" Two ĠF inger ĠT ap ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ