package Ġio . go los . go los . utils Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . text . Selection Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . Sp anned Ċ import Ġandroid . text . method . Link Movement Method Ċ import Ġandroid . text . style . BackgroundColor Span Ċ import Ġandroid . text . style . Clickable Span Ċ import Ġandroid . text . style . URL Span Ċ import Ġandroid . text . util . Link ify Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . TextView Ċ import Ġio . go los . go los . screens . editor . knife . Kn ife URL Span Ċ import Ġio . go los . go los . screens . profile . UserProfile Activity Ċ import Ġio . go los . go los . screens . stories . model . Feed Type Ċ import Ġio . go los . go los . screens . story . Story Activity Ċ import Ġio . go los . go los . screens . webview . WebView Activity Ċ Ċ /** Ċ Ġ* ĠHandles ĠURL Ġclicks Ġon ĠText Views . ĠUn like Ġthe Ġdefault Ġimplementation , Ġthis : Ċ Ġ* Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠRel i ably Ġapplies Ġa Ġhighlight Ġcolor Ġon Ġlinks Ġwhen Ġthey 're Ġtouched . Ċ Ġ* Ġ Ġ* ĠLet 's Ġyou Ġhandle Ġsingle Ġand Ġlong Ġclicks Ġon ĠURLs Ċ Ġ* Ġ Ġ* ĠCorrect ly Ġidentifies Ġfocused ĠURLs Ġ( Un like Ġthe Ġdefault Ġimplementation Ġwhere Ġa Ġclick Ġis Ġregistered Ġeven Ġif Ġit 's Ċ Ġ* Ġmade Ġoutside Ġof Ġthe ĠURL 's Ġbounds Ġif Ġthere Ġis Ġno Ġmore Ġtext Ġin Ġthat Ġdirection .) Ċ Ġ* Ċ Ġ*/ Ċ class ĠGo los Movement Method Ġprotected Ġconstructor () Ġ: ĠLink Movement Method () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġon Link ClickListener : ĠOn Link ClickListener ? Ġ= Ġobject Ġ: ĠOn Link ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( textView : ĠTextView , Ġurl : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch Result Ġ= ĠGo los Link Matcher . match ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match Result Ġis ĠStory Link Match ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStory Activity . start ( textView . context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch Result . author , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch Result . blog , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch Result . per mlink , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Type . UN CLAS SI FIED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( match Result Ġis ĠUser Link Match ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Profile Activity . start ( textView . context , Ġmatch Result . user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWebView Activity . start ( textView . context , Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġon Link Long ClickListener : ĠOn Link Long ClickListener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġtouched Line Bounds Ġ= ĠRect F () ĊĠĠĠ Ġprivate Ġvar Ġis Url Highlight ed : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġclick able Span Under Touch On Action Down : ĠClick able Span ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġactive TextView Hash code : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġongoing Long Press Timer : ĠLong Press Timer ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġwas Long Press Registered : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġinterface ĠOn Link ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠtextView ĠThe ĠTextView Ġon Ġwhich Ġa Ġclick Ġwas Ġregistered . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġurl ĠĠĠĠĠ ĠThe Ġclicked ĠURL . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠTrue Ġif Ġthis Ġclick Ġwas Ġhandled . ĠFalse Ġto Ġlet ĠAndroid Ġhandle Ġthe ĠURL . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠonClick ( textView : ĠTextView , Ġurl : ĠString ): ĠBoolean ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Link Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠtextView ĠThe ĠTextView Ġon Ġwhich Ġa Ġlong - click Ġwas Ġregistered . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġurl ĠĠĠĠĠ ĠThe Ġlong - clicked ĠURL . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠTrue Ġif Ġthis Ġlong - click Ġwas Ġhandled . ĠFalse Ġto Ġlet ĠAndroid Ġhandle Ġthe ĠURL Ġ( as Ġa Ġshort - click ). ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Long Click ( textView : ĠTextView , Ġurl : ĠString ): ĠBoolean ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġa Ġlistener Ġthat Ġwill Ġget Ġcalled Ġwhenever Ġany Ġlink Ġis Ġclicked Ġon Ġthe ĠTextView . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset On Link ClickListener ( click Listener : ĠOn Link ClickListener ): ĠGo los Movement Method Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġsingle Instance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Setting Ġa Ġclick Ġlistener Ġon Ġthe Ġinstance Ġreturned Ġby ĠgetInstance () Ġis Ġnot Ġsupported Ġto Ġavoid Ġmemory Ġ" Ġ+ Ġ" le aks . ĠPlease Ġuse Ġnew Instance () Ġor Ġany Ġof Ġthe Ġlink ify () Ġmethods Ġinstead .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . on Link ClickListener Ġ= Ġclick Listener ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġa Ġlistener Ġthat Ġwill Ġget Ġcalled Ġwhenever Ġany Ġlink Ġis Ġclicked Ġon Ġthe ĠTextView . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset On Link Long ClickListener ( long ClickListener : ĠOn Link Long ClickListener ): ĠGo los Movement Method Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġsingle Instance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Setting Ġa Ġlong - click Ġlistener Ġon Ġthe Ġinstance Ġreturned Ġby ĠgetInstance () Ġis Ġnot Ġsupported Ġto Ġavoid Ġ" Ġ+ Ġ" memory Ġle aks . ĠPlease Ġuse Ġnew Instance () Ġor Ġany Ġof Ġthe Ġlink ify () Ġmethods Ġinstead .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . on Link Long ClickListener Ġ= Ġlong ClickListener ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( textView : ĠTextView , Ġtext : ĠSp ann able , Ġevent : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( active TextView Hash code Ġ!= ĠtextView . hashCode ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBug Ġworkaround : ĠTextView Ġstops Ġcalling Ġon Touch Event () Ġonce Ġany ĠURL Ġis Ġhighlighted . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA Ġhack y Ġsolution Ġis Ġto Ġreset Ġany Ġ" auto Link " Ġproperty Ġset Ġin ĠXML . ĠBut Ġwe Ġalso Ġwant ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġdo Ġthis Ġonce Ġper ĠTextView . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactive TextView Hash code Ġ= ĠtextView . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . auto Link Mask Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġclick able Span Under Touch Ġ= Ġfind Clickable Span Under Touch ( textView , Ġtext , Ġevent ) ĊĠĠĠĠĠĠĠ Ġval Ġtouch Started Over AL ink Ġ= Ġclick able Span Under Touch On Action Down Ġ!= Ġnull ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( click able Span Under Touch Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight Url ( textView , Ġclick able Span Under Touch , Ġtext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( touch Started Over AL ink Ġ&& Ġon Link Long ClickListener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlong ClickListener Ġ= Ġobject Ġ: ĠLong Press Timer . On Timer Reached Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Timer Reached () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwas Long Press Registered Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . perform H aptic Feedback ( H aptic Feedback Constants . LONG _ PRESS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Url Highlight Color ( textView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Url Long Click ( textView , Ġclick able Span Under Touch ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Timer For Register ing Long Click ( textView , Ġlong ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick able Span Under Touch On Action Down Ġ= Ġclick able Span Under Touch ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtouch Started Over AL ink ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRegister Ġa Ġclick Ġonly Ġif Ġthe Ġtouch Ġstarted Ġand Ġended Ġon Ġthe Ġsame ĠURL . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! was Long Press Registered Ġ&& Ġtouch Started Over AL ink Ġ&& Ġclick able Span Under Touch Ġ=== Ġclick able Span Under Touch On Action Down ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Url Click ( textView , Ġclick able Span Under Touch Ġ?: Ġreturn Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcleanup On Touch Up ( textView ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCons ume Ġthis Ġevent Ġeven Ġif Ġwe Ġcould Ġnot Ġfind Ġany Ġspans Ġto Ġavoid Ġletting ĠAndroid Ġhandle Ġthis Ġevent . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAndroid 's ĠTextView Ġimplementation Ġhas Ġa Ġbug Ġwhere Ġlinks Ġget Ġclicked Ġeven Ġwhen Ġthere Ġis Ġno Ġmore Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnext Ġto Ġthe Ġlink Ġand Ġthe Ġtouch Ġlies Ġoutside Ġits Ġbounds Ġin Ġthe Ġsame Ġdirection . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtouch Started Over AL ink ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ CANCEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcleanup On Touch Up ( textView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStop Ġlistening Ġfor Ġa Ġlong - press Ġas Ġsoon Ġas Ġthe Ġuser Ġw and ers Ġoff Ġto Ġunknown Ġl ands . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( click able Span Under Touch Ġ!== Ġclick able Span Under Touch On Action Down ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Long Press Callback ( textView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! was Long Press Registered ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠToggle Ġhighlight . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( click able Span Under Touch Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight Url ( textView , Ġclick able Span Under Touch , Ġtext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Url Highlight Color ( textView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtouch Started Over AL ink ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcleanup On Touch Up ( textView : ĠTextView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwas Long Press Registered Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġremove Url Highlight Color ( textView ) ĊĠĠĠĠĠĠĠ Ġremove Long Press Callback ( textView ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġthe Ġtouched Ġlocation Ġinside Ġthe ĠTextView 's Ġtext Ġand Ġreturns Ġthe ĠClick able Span Ġfound Ġunder Ġit Ġ( if Ġany ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġtouched ĠClick able Span Ġor Ġnull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġfind Clickable Span Under Touch ( textView : ĠTextView , Ġtext : ĠSp ann able , Ġevent : ĠMotion Event ): ĠClick able Span ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSo Ġwe Ġneed Ġto Ġfind Ġthe Ġlocation Ġin Ġtext Ġwhere Ġtouch Ġwas Ġmade , Ġregardless Ġof Ġwhether Ġthe ĠTextView ĊĠĠĠĠĠĠĠ Ġ// Ġhas Ġscroll able Ġtext . ĠThat Ġis , Ġnot Ġthe Ġentire Ġtext Ġis Ġcurrently Ġvisible . ĊĠĠĠĠĠĠĠ Ġvar Ġtouch X Ġ= Ġevent . x . toInt () ĊĠĠĠĠĠĠĠ Ġvar Ġtouch Y Ġ= Ġevent . y . toInt () ĊĊĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġpadding . ĊĠĠĠĠĠĠĠ Ġtouch X Ġ-= ĠtextView . total Padding Left ĊĠĠĠĠĠĠĠ Ġtouch Y Ġ-= ĠtextView . total Padding Top ĊĊĠĠĠĠĠĠĠ Ġ// ĠAccount Ġfor Ġscroll able Ġtext . ĊĠĠĠĠĠĠĠ Ġtouch X Ġ+= ĠtextView . scroll X ĊĠĠĠĠĠĠĠ Ġtouch Y Ġ+= ĠtextView . scroll Y ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= ĠtextView . layout ĊĠĠĠĠĠĠĠ Ġval Ġtouched Line Ġ= Ġlayout . getLine For Vertical ( touch Y ) ĊĠĠĠĠĠĠĠ Ġval Ġtouch Offset Ġ= Ġlayout . get Offset For Horizontal ( touched Line , Ġtouch X . toFloat ()) ĊĊĠĠĠĠĠĠĠ Ġtouched Line Bounds . left Ġ= Ġlayout . getLine Left ( touched Line ) ĊĠĠĠĠĠĠĠ Ġtouched Line Bounds . top Ġ= Ġlayout . getLine Top ( touched Line ). toFloat () ĊĠĠĠĠĠĠĠ Ġtouched Line Bounds . right Ġ= Ġlayout . get LineWidth ( touched Line ) Ġ+ Ġtouched Line Bounds . left ĊĠĠĠĠĠĠĠ Ġtouched Line Bounds . bottom Ġ= Ġlayout . getLine Bottom ( touched Line ). toFloat () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( touched Line Bounds . contains ( touch X . toFloat (), Ġtouch Y . toFloat ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFind Ġa ĠClick able Span Ġthat Ġlies Ġunder Ġthe Ġtouched Ġarea . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspans Ġ= Ġtext . get Spans ( touch Offset , Ġtouch Offset , ĠClick able Span :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( span Ġin Ġspans ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( span Ġis ĠClick able Span ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġspan ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo ĠClick able Span Ġfound Ġunder Ġthe Ġtouched Ġlocation . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTouch Ġlies Ġoutside Ġthe Ġline 's Ġhorizontal Ġbounds Ġwhere Ġno Ġspans Ġshould Ġexist . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġbackground Ġcolor Ġspan Ġat Ġ< var > click able Span </ var >' s Ġlocation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġhighlight Url ( textView : ĠTextView , Ġclick able Span : ĠClick able Span , Ġtext : ĠSp ann able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Url Highlight ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Url Highlight ed Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġval Ġspan Start Ġ= Ġtext . get Span Start ( click able Span ) ĊĠĠĠĠĠĠĠ Ġval Ġspan End Ġ= Ġtext . get Span End ( click able Span ) ĊĠĠĠĠĠĠĠ Ġtext . set Span ( BackgroundColor Span ( textView . highlight Color ), Ġspan Start , Ġspan End , ĠSp ann able . SPAN _ INCL USIVE _ INCL USIVE ) ĊĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġtext ĊĊĠĠĠĠĠĠĠ ĠSelection . setSelection ( text , Ġspan Start , Ġspan End ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġthe Ġhighlight Ġcolor Ġunder Ġthe ĠUrl . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġremove Url Highlight Color ( textView : ĠTextView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Url Highlight ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Url Highlight ed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= ĠtextView . text Ġas ĠSp ann able ĊĊĠĠĠĠĠĠĠ Ġval Ġhighlight Spans Ġ= Ġtext . get Spans ( 0 , Ġtext . length , ĠBackground Color Span :: class . java ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( highlight Span Ġin Ġhighlight Spans ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext . remove Span ( highlight Span ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġtext ĊĊĠĠĠĠĠĠĠ ĠSelection . remove Selection ( text ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġstart Timer For Register ing Long Click ( textView : ĠTextView , Ġlong ClickListener : ĠLong Press Timer . On Timer Reached Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġongoing Long Press Timer Ġ= ĠLong Press Timer () ĊĠĠĠĠĠĠĠ Ġongoing Long Press Timer !!. setOn Timer Reached Listener ( long ClickListener ) ĊĠĠĠĠĠĠĠ ĠtextView . post Delayed ( ongo ing Long Press Timer , ĠView Configuration . getLong Press Timeout (). to Long ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġthe Ġlong - press Ġdetection Ġtimer . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġremove Long Press Callback ( textView : ĠTextView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ongo ing Long Press Timer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . remove Callbacks ( ongo ing Long Press Timer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġongoing Long Press Timer Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġdispatch Url Click ( textView : ĠTextView , Ġclick able Span : ĠClick able Span ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclick able Span With Text Ġ= ĠClick able Span With Text . of Span ( textView , Ġclick able Span ) ĊĠĠĠĠĠĠĠ Ġval Ġhandled Ġ= Ġon Link ClickListener Ġ!= Ġnull Ġ&& Ġon Link ClickListener !!. onClick ( textView , Ġclick able Span With Text . text ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! handled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLet ĠAndroid Ġhandle Ġthis Ġclick . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick able Span With Text . span (). onClick ( textView ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġdispatch Url Long Click ( textView : ĠTextView , Ġclick able Span : ĠClick able Span ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclick able Span With Text Ġ= ĠClick able Span With Text . of Span ( textView , Ġclick able Span ) ĊĠĠĠĠĠĠĠ Ġval Ġhandled Ġ= Ġon Link Long ClickListener Ġ!= Ġnull Ġ&& Ġon Link Long ClickListener !!. on Long Click ( textView , Ġclick able Span With Text . text ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! handled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLet ĠAndroid Ġhandle Ġthis Ġlong Ġclick Ġas Ġa Ġshort - click . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick able Span With Text . span (). onClick ( textView ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġclass ĠLong Press Timer Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġon Timer Reached Listener : ĠOn Timer Reached Listener ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġinterface ĠOn Timer Reached Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġon Timer Reached () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Timer Reached Listener !!. on Timer Reached () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset On Timer Reached Listener ( listener : ĠOn Timer Reached Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Timer Reached Listener Ġ= Ġlistener ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġwrapper Ġto Ġsupport Ġall Ġ[ Clickable Span ] s Ġthat Ġmay Ġor Ġmay Ġnot Ġprovide ĠURLs . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġclass ĠClick able Span With Text Ġprivate Ġconstructor ( private Ġval Ġspan : ĠClick able Span , Ġprivate Ġval Ġtext : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġspan (): ĠClick able Span Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġspan ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġtext (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtext ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġof Span ( textView : ĠTextView , Ġspan : ĠClick able Span ?): ĠClick able Span With Text Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= ĠtextView . text Ġas ĠSp anned ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( span Ġis ĠURL Span ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġspan . url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( span Ġis ĠKn ife URL Span ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġspan . url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġs . get Span Start ( span ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġs . get Span End ( span ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġs . sub Sequence ( start , Ġend ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠClick able Span With Text ( span !! , Ġtext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġsingle Instance : ĠGo los Movement Method ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLINK IFY _ NONE Ġ= Ġ- 2 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturn Ġa Ġnew Ġinstance Ġof ĠBetter Link Movement Method . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠGo los Movement Method Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGo los Movement Method () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġlink ify Mask ĠOne Ġof Ġ[ Link ify . ALL ], Ġ[ Link ify . PHONE _ NUMBER S ], Ġ[ Link ify . MAP _ ADD RES SES ], ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Link ify . WEB _ URL S ] Ġand Ġ[ Link ify . EMAIL _ ADD RES SES ]. ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġtext Views ĠĠ ĠThe ĠText Views Ġon Ġwhich Ġa Ġ[ Go los Movement Method ] Ġshould Ġbe Ġregistered . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠThe Ġregistered Ġ[ Go los Movement Method ] Ġon Ġthe ĠText Views . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġlink ify ( link ify Mask : ĠInt , Ġvar arg Ġtext Views : ĠTextView ): ĠGo los Movement Method Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovement Method Ġ= Ġnew Instance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( textView Ġin Ġtext Views ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Links ( link ify Mask , Ġmovement Method , ĠtextView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmovement Method ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠLike Ġ[. link ify ], Ġbut Ġcan Ġbe Ġused Ġfor ĠText Views Ġwith ĠHTML Ġlinks . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġtext Views ĠThe ĠText Views Ġon Ġwhich Ġa Ġ[ Go los Movement Method ] Ġshould Ġbe Ġregistered . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠThe Ġregistered Ġ[ Go los Movement Method ] Ġon Ġthe ĠText Views . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġlink ify Html ( var arg Ġtext Views : ĠTextView ): ĠGo los Movement Method Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlink ify ( LINK IFY _ NONE , Ġ* text Views ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRe cursively Ġregister Ġa Ġ[ Go los Movement Method ] Ġon Ġevery ĠTextView Ġinside Ġa Ġlayout . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġlink ify Mask ĠOne Ġof Ġ[ Link ify . ALL ], Ġ[ Link ify . PHONE _ NUMBER S ], Ġ[ Link ify . MAP _ ADD RES SES ], ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Link ify . WEB _ URL S ] Ġand Ġ[ Link ify . EMAIL _ ADD RES SES ]. ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠThe Ġregistered Ġ[ Go los Movement Method ] Ġon Ġthe ĠText Views . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġlink ify ( link ify Mask : ĠInt , Ġview Group : ĠViewGroup ): ĠGo los Movement Method Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovement Method Ġ= Ġnew Instance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr Add Links ( link ify Mask , Ġview Group , Ġmovement Method ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmovement Method ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠLike Ġ[. link ify ], Ġbut Ġcan Ġbe Ġused Ġfor ĠText Views Ġwith ĠHTML Ġlinks . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠThe Ġregistered Ġ[ Go los Movement Method ] Ġon Ġthe ĠText Views . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġlink ify Html ( view Group : ĠViewGroup ): ĠGo los Movement Method Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlink ify ( LINK IFY _ NONE , Ġview Group ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRe cursively Ġregister Ġa Ġ[ Go los Movement Method ] Ġon Ġevery ĠTextView Ġinside Ġa Ġlayout . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġlink ify Mask ĠOne Ġof Ġ[ Link ify . ALL ], Ġ[ Link ify . PHONE _ NUMBER S ], Ġ[ Link ify . MAP _ ADD RES SES ], ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Link ify . WEB _ URL S ] Ġand Ġ[ Link ify . EMAIL _ ADD RES SES ]. ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠThe Ġregistered Ġ[ Go los Movement Method ] Ġon Ġthe ĠText Views . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġlink ify ( link ify Mask : ĠInt , Ġactivity : ĠActivity ): ĠGo los Movement Method Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFind Ġthe Ġlayout Ġpassed Ġto ĠsetContentView (). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Layout Ġ= Ġ( activity . findViewById < View >( Window . ID _ ANDROID _ CONTENT ) Ġas ĠViewGroup ). getChild At ( 0 ) Ġas ĠViewGroup ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovement Method Ġ= Ġnew Instance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr Add Links ( link ify Mask , Ġactivity Layout , Ġmovement Method ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmovement Method ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠLike Ġ[. link ify ], Ġbut Ġcan Ġbe Ġused Ġfor ĠText Views Ġwith ĠHTML Ġlinks . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠThe Ġregistered Ġ[ Go los Movement Method ] Ġon Ġthe ĠText Views . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġlink ify Html ( activity : ĠActivity ): ĠGo los Movement Method Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlink ify ( LINK IFY _ NONE , Ġactivity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġa Ġstatic Ġinstance Ġof ĠBetter Link Movement Method . ĠDo Ġnote Ġthat Ġregistering Ġa Ġclick Ġlistener Ġon Ġthe Ġreturned ĊĠĠĠĠĠĠĠĠ Ġ* Ġinstance Ġis Ġnot Ġsupported Ġbecause Ġit Ġwill Ġpotentially Ġbe Ġshared Ġon Ġmultiple ĠText Views . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġinstance : ĠGo los Movement Method ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( single Instance Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Instance Ġ= ĠGo los Movement Method () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsingle Instance !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ======== ĠPUBLIC ĠAPIs ĠEND Ġ======== Ġ// ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġr Add Links ( link ify Mask : ĠInt , Ġview Group : ĠViewGroup , Ġmovement Method : ĠGo los Movement Method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġview Group . child Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġview Group . getChild At ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠViewGroup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRe cursively Ġfind Ġchild ĠText Views . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr Add Links ( link ify Mask , Ġchild , Ġmovement Method ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( child Ġis ĠTextView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Links ( link ify Mask , Ġmovement Method , Ġchild ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġadd Links ( link ify Mask : ĠInt , Ġmovement Method : ĠGo los Movement Method , ĠtextView : ĠTextView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . movement Method Ġ= Ġmovement Method ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link ify Mask Ġ!= ĠLINK IFY _ NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLink ify . add Links ( textView , Ġlink ify Mask ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }