/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠH M ĠRe venue Ġ& ĠCustom s Ċ Ġ* Ċ Ġ* Ġ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 Ġuk . gov . hm rc . components . extensions Ċ Ċ import Ġandroid . os . Build Ċ import Ġandroid . text . Html Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . Sp ann able String Ċ import Ġandroid . text . Sp anned Ċ import Ġandroid . text . Text Paint Ċ import Ġandroid . text . method . Link Movement Method Ċ import Ġandroid . text . style . Clickable Span Ċ import Ġandroid . text . style . URL Span Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Color Res Ċ import Ġandroidx . annotation . Style Res Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġuk . gov . hm rc . components . R Ċ import Ġjava . util . regex . Matcher Ċ import Ġjava . util . regex . Pattern Ċ Ċ class ĠCustom Link Movement Method ( private Ġval Ġclick Handler : Ġ( String ) Ġ-> ĠUnit Ġ= Ġ{}) Ġ: ĠLink Movement Method () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( widget : ĠTextView ?, Ġbuffer : ĠSp ann able ?, Ġevent : ĠMotion Event ?): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġargs Are NotNull Ġ= Ġwidget Ġ!= Ġnull Ġ&& Ġbuffer Ġ!= Ġnull Ġ&& Ġevent Ġ!= Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( args Are NotNull Ġ&& Ġevent !!. action Ġ== ĠMotion Event . ACTION _ UP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġevent . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġevent . y ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ-= Ġwidget !!. total Padding Left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ-= Ġwidget . total Padding Top ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+= Ġwidget . scroll X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+= Ġwidget . scroll Y ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= Ġwidget . layout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġlayout . getLine For Vertical ( y . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoff Ġ= Ġlayout . get Offset For Horizontal ( line , Ġx ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġbuffer !!. get Spans ( off , Ġoff , ĠURL Span :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Handler . invoke ( link [ 0 ]. url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Touch Event ( widget , Ġbuffer , Ġevent ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠMakes Ġthe Ġgiven Ġtext Ġclick able Ġvia ĠHTML Ġor Ġa Ġgiven Ġpattern Ġto Ġmatch Ġwith . Ċ Ġ* ĠDefault ĠHTML Ġlink Ġcolor Ġwill Ġbe Ġapplied Ġunless Ġa Ġcolor Ġis Ġpassed Ġin . Ċ Ġ* Ċ Ġ* Ġ@ param Ġtext Ġyou Ġwish Ġto Ġmake Ġclick able Ċ Ġ* Ġ@ param Ġclick Handler Ġthat Ġyou Ġwant Ġto Ġtrigger Ġwhen Ġa Ġurl Ġor Ġtext Ġmatching Ġthe Ġpattern Ġis Ġclicked Ċ Ġ* Ġ@ param Ġpattern Ġto Ġidentify Ġurls Ġin Ġthe Ġtext Ġ( optional ) Ċ Ġ* Ġ@ param Ġcolor Ġthat Ġyou Ġwish Ġlinks Ġto Ġbe . ĠBy Ġdefault Ġno Ġcolor Ġis Ġset Ġ( optional ) Ċ Ġ*/ Ċ @ Jvm Over loads Ċ fun ĠTextView . set Clickable Url ( ĊĠĠĠ Ġtext : ĠString , ĊĠĠĠ Ġclick Handler : Ġ( String ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġpattern : ĠPattern ? Ġ= Ġnull , ĊĠĠĠ Ġ@ Color Res Ġcolor : ĠInt Ġ= ĠR . color . hm rc _ link _ text Ċ ) Ġ{ ĊĠĠĠ Ġval Ġlink Color Ġ= ĠContext Compat . getColor ( context , Ġcolor ) ĊĊĠĠĠ Ġthis . is Clickable Ġ= Ġtrue ĊĠĠĠ Ġthis . movement Method Ġ= ĠCustom Link Movement Method ( click Handler ) ĊĠĠĠ Ġthis . set Link TextColor ( link Color ) ĊĊĠĠĠ Ġval Ġset Handler : Ġ( String ) Ġ-> ĠUnit Ġ= Ġ{ Ġmatched Ġ-> ĊĠĠĠĠĠĠĠ Ġval ĠstartIndex Ġ= Ġtext . indexOf ( matched ) ĊĠĠĠĠĠĠĠ Ġval Ġcustom Sp ann able Ġ= ĠSp ann able String ( text ) ĊĠĠĠĠĠĠĠ Ġcustom Sp ann able . set Span ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠClick able Span () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ) Ġ= Ġclick Handler . invoke ( matched ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġupdate Draw State ( ds : ĠText Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġds . is Underline Text Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġds . color Ġ= Ġlink Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartIndex , ĠstartIndex Ġ+ Ġmatched . length , ĠSp anned . SPAN _ EXCL USIVE _ EXCL USIVE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġthis . text Ġ= Ġcustom Sp ann able ĊĊĠĠĠĠĠĠĠ Ġif Ġ( context . is Accessibility Enabled ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ Ġclick Handler . invoke ( matched ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpattern ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatcher : ĠMatcher Ġ= Ġit . matcher ( text ) ĊĠĠĠĠĠĠĠ Ġif Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatched Ġ= Ġmatcher . group ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatched ?. let Ġ{ Ġset Handler ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġthis . text Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠ ĠHtml . from Html ( text . toString (), ĠHtml . FROM _ HTML _ MODE _ LEG ACY ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠHtml . from Html ( text . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsp ann able Ġ= ĠSp ann able String ( getText ()) ĊĊĠĠĠ Ġfor Ġ( span Ġin Ġsp ann able . get Spans ( 0 , Ġsp ann able . length , ĠURL Span :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġsp ann able . get Span Start ( span ) ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġsp ann able . get Span End ( span ) ĊĠĠĠĠĠĠĠ Ġsp ann able . remove Span ( span ) ĊĠĠĠĠĠĠĠ Ġval Ġspan No Underline Ġ= ĠURL Span No Underline ( span . url , Ġclick Handler , Ġlink Color ) ĊĠĠĠĠĠĠĠ Ġsp ann able . set Span ( span No Underline , Ġstart , Ġend , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġthis . text Ġ= Ġsp ann able Ċ } Ċ Ċ class ĠURL Span No Underline ( ĊĠĠĠ Ġprivate Ġval Ġurl : ĠString , ĊĠĠĠ Ġprivate Ġval Ġclick Handler : Ġ( String ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġ@ Color Int Ġprivate Ġval Ġurl Color : ĠInt Ċ ) Ġ: ĠURL Span ( url ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonClick ( widget : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onClick ( widget ) ĊĠĠĠĠĠĠĠ Ġclick Handler . invoke ( url ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Draw State ( ds : ĠText Paint ) Ġ{ ĊĠĠĠĠĠĠĠ Ġds . is Underline Text Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġds . color Ġ= Ġurl Color ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠTextView . setStyle (@ Style Res Ġstyle : ĠInt ) Ġ{ ĊĠĠĠ Ġset TextAppearance ( style ) Ċ } Ċ