/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 . Ċ Ġ* ĠJo Ã£o ĠP au lo ĠS ena Ġ< jo aop au lo 7 6 1 @ gmail . com > Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof Ġthe ĠUN ES ĠOpen ĠSource ĠProject . Ċ Ġ* Ċ Ġ* ĠUN ES Ġis Ġlicensed Ġunder Ġthe ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . for c et ower . ue fs . core . util Ċ Ċ import Ġ` in `. un cod . android . bypass . style . Touchable Url Span Ċ import Ġandroid . text . Selection Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . method . Link Movement Method Ċ import Ġandroid . text . method . Movement Method Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . widget . TextView Ċ Ċ class ĠLink Touch Movement Method Ġ: ĠLink Movement Method () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġpressed Span : ĠTouch able Url Span ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( textView : ĠTextView , Ġsp ann able : ĠSp ann able , Ġevent : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhandled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpressed Span Ġ= Ġget Pressed Span ( textView , Ġsp ann able , Ġevent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pressed Span Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpressed Span !!. set Pressed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSelection . setSelection ( span nable , Ġsp ann able . get Span Start ( pressed Span ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able . get Span End ( pressed Span )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ MOVE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtouched Span Ġ= Ġget Pressed Span ( textView , Ġsp ann able , Ġevent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pressed Span Ġ!= Ġnull Ġ&& Ġtouched Span Ġ!= Ġpressed Span ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpressed Span !!. set Pressed ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpressed Span Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSelection . remove Selection ( span nable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pressed Span Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpressed Span !!. set Pressed ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Touch Event ( textView , Ġsp ann able , Ġevent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpressed Span Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSelection . remove Selection ( span nable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġhandled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Pressed Span ( textView : ĠTextView , Ġsp ann able : ĠSp ann able , Ġevent : ĠMotion Event ): ĠTouch able Url Span ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġevent . x . toInt () ĊĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġevent . y . toInt () ĊĊĠĠĠĠĠĠĠ Ġx Ġ-= ĠtextView . total Padding Left ĊĠĠĠĠĠĠĠ Ġy Ġ-= ĠtextView . total Padding Top ĊĊĠĠĠĠĠĠĠ Ġx Ġ+= ĠtextView . scroll X ĊĠĠĠĠĠĠĠ Ġy Ġ+= ĠtextView . scroll Y ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= ĠtextView . layout ĊĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġlayout . getLine For Vertical ( y ) ĊĠĠĠĠĠĠĠ Ġval Ġoff Ġ= Ġlayout . get Offset For Horizontal ( line , Ġx . toFloat ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġsp ann able . get Spans ( off , Ġoff , ĠTouch able Url Span :: class . java ) ĊĠĠĠĠĠĠĠ Ġvar Ġtouched Span : ĠTouch able Url Span ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( link . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtouched Span Ġ= Ġlink [ 0 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtouched Span ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance : ĠLink Touch Movement Method ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance (): ĠMovement Method Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instance Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= ĠLink Touch Movement Method () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }