package Ġcom . sh uy u . text util lib Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . Sp ann able String Ċ import Ġandroid . text . Sp ann able StringBuilder Ċ import Ġandroid . text . Sp anned Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . text . method . Link Movement Method Ċ import Ġandroid . text . style . Dynamic Drawable Span Ċ import Ġandroid . text . style . Style Span Ċ import Ġandroid . text . style . URL Span Ċ import Ġandroid . text . util . Link ify ĊĊ Ċ import Ġcom . sh uy u . text util lib . listener . IT ext View Show Ċ import Ġcom . sh uy u . text util lib . listener . Span At User CallBack Ċ import Ġcom . sh uy u . text util lib . listener . Span Topic CallBack Ċ import Ġcom . sh uy u . text util lib . listener . Span Url CallBack Ċ import Ġcom . sh uy u . text util lib . model . Topic Model Ċ import Ġcom . sh uy u . text util lib . model . User Model Ċ import Ġcom . sh uy u . text util lib . span . Click At User Span Ċ import Ġcom . sh uy u . text util lib . span . Click Topic Span Ċ import Ġcom . sh uy u . text util lib . span . Link Span Ċ Ċ import Ġjava . util . HashMap Ċ import Ġjava . util . regex . Matcher Ċ import Ġjava . util . regex . Pattern Ċ Ċ /** Ċ Ġ* Ġ éĢļ çĶ¨ å¤ĦçĲĨ éĹ®é¢ĺ çļĦ Ut isl Ċ Ġ* ĠCreated Ġby Ġsh uy u Ġon Ġ 2 0 1 6 / 1 1 / 1 0 . Ċ Ġ*/ Ċ Ċ object ĠText Common Utils Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åįķ çº ¯ emoji è¡¨ç¤º ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġä¸Ĭ ä¸ĭ æĸĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġtext ĠĠĠ Ġ åĮħåĲ« emoji çļĦ åŃĹç¬¦ä¸² ĊĠĠĠĠ Ġ* Ġ@ param Ġtv ĠĠĠĠĠ Ġ æĺ¾ç¤º çļĦ text view ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Emoji Text ( context : ĠContext , Ġtext : ĠString , Ġtv : ĠI TextView Show ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsp ann able Ġ= ĠSm ile Utils . unicode To Emoji Name ( context , Ġtext ) ĊĠĠĠĠĠĠĠ Ġtv . text Ġ= Ġsp ann able ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åįķ çº ¯ èİ·åıĸ emoji è¡¨ç¤º ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠĠĠ Ġä¸Ĭ ä¸ĭ æĸĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġtext ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ å¤ĦçĲĨ çļĦ æĸĩæľ¬ ĊĠĠĠĠ Ġ* Ġ@ param Ġsize ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemoji å¤§å°ı ĊĠĠĠĠ Ġ* Ġ@ param Ġvertical Alignment Ġ åŀ Ĥ çĽ´ æĸ¹å¼ı ĊĠĠĠĠ Ġ* Ġ@ return Ġè¿ĶåĽŀ æĺ¾ç¤º çļĦ span an le ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġget Emoji Text ( context : ĠContext , Ġtext : ĠString , Ġsize : ĠInt Ġ= Ġ- 1 , Ġvertical Alignment : ĠInt Ġ= ĠDynamic Drawable Span . ALIGN _ BOTTOM ): ĠSp ann able Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( TextUtils . isEmpty ( text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp ann able String ("") ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĠSm ile Utils . unicode To Emoji Name ( context , Ġtext , Ġsize , Ġvertical Alignment ) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĺ¾ç¤º emoji åĴĮ url é«ĺ äº ® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠĠĠĠ Ġä¸Ĭ ä¸ĭ æĸĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġtext ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ å¤ĦçĲĨ çļĦ æĸĩæľ¬ ĊĠĠĠĠ Ġ* Ġ@ param ĠtextView ĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ view ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ é¢ľèī² ĊĠĠĠĠ Ġ* Ġ@ param Ġneed Num ĠĠĠĠĠĠĠĠĠĠĠ Ġæĺ¯åĲ¦ éľĢè¦ģ æĺ¾ç¤º åı· çłģ ĊĠĠĠĠ Ġ* Ġ@ param Ġspan At User CallBack ĠAT æŁĲ äºº çĤ¹åĩ» çļĦ è¿ĶåĽŀ ĊĠĠĠĠ Ġ* Ġ@ param Ġspan Url CallBack ĠĠĠ Ġ éĵ¾æİ¥ çĤ¹åĩ» çļĦ è¿ĶåĽŀ ĊĠĠĠĠ Ġ* Ġ@ return Ġè¿ĶåĽŀ æĺ¾ç¤º çļĦ span an le ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetUrl Emoji Text ( context : ĠContext , Ġtext : ĠString , ĠtextView : ĠI TextView Show , Ġcolor : ĠInt , Ġneed Num : ĠBoolean , Ġspan At User CallBack : ĠSpan At User CallBack , Ġspan Url CallBack : ĠSpan Url CallBack ): ĠSp ann able Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! TextUtils . isEmpty ( text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetUrl Sm ile Text ( context , Ġtext , Ġnull , ĠtextView , Ġcolor , Ġ 0 , Ġneed Num , Ġspan At User CallBack , Ġspan Url CallBack ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp ann able String (" Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® å¸¦ é«ĺ äº ® åı¯ çĤ¹åĩ» çļĦ Url ãĢģ è¡¨ æĥħ ãĢģ at æŁĲ äººçļĦ text view æĸĩæľ¬ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠĠĠĠ Ġä¸Ĭ ä¸ĭ æĸĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġstring ĠĠĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ å¤ĦçĲĨ çļĦ æĸĩæľ¬ ĊĠĠĠĠ Ġ* Ġ@ param Ġlist User ĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ AT æŁĲ äºº ĊĠĠĠĠ Ġ* Ġ@ param ĠtextView ĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ view ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ é¢ľèī² ĊĠĠĠĠ Ġ* Ġ@ param Ġneed Num ĠĠĠĠĠĠĠĠĠĠĠ Ġæĺ¯åĲ¦ éľĢè¦ģ æĺ¾ç¤º åı· çłģ ĊĠĠĠĠ Ġ* Ġ@ param Ġspan At User CallBack ĠAT æŁĲ äºº çĤ¹åĩ» çļĦ è¿ĶåĽŀ ĊĠĠĠĠ Ġ* Ġ@ param Ġspan Url CallBack ĠĠĠ Ġ éĵ¾æİ¥ çĤ¹åĩ» çļĦ è¿ĶåĽŀ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Url Sm ile Text ( context : ĠContext , Ġstring : ĠString , Ġlist User : ĠList < User Model >, ĠtextView : ĠI TextView Show , Ġcolor : ĠInt , Ġneed Num : ĠBoolean , Ġspan At User CallBack : ĠSpan At User CallBack , Ġspan Url CallBack : ĠSpan Url CallBack ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsp ann able Ġ= ĠgetUrl Sm ile Text ( context , Ġstring , Ġlist User , ĠtextView , Ġcolor , Ġ 0 , Ġneed Num , Ġspan At User CallBack , Ġspan Url CallBack ) ĊĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġsp ann able ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAT æŁĲ äººçļĦ è·³è½¬ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠĠĠĠ Ġä¸Ĭ ä¸ĭ æĸĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġlist User ĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ AT æŁĲ äºº ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent ĠĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ å¤ĦçĲĨ çļĦ æĸĩæľ¬ ĊĠĠĠĠ Ġ* Ġ@ param ĠtextView ĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ view ĊĠĠĠĠ Ġ* Ġ@ param Ġclick able ĠĠĠĠĠĠĠĠĠ ĠAT æŁĲ äºº æĺ¯åĲ¦ åı¯ä»¥ çĤ¹åĩ» ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAT éľĢè¦ģ æĺ¾ç¤º çļĦ é¢ľèī² ĊĠĠĠĠ Ġ* Ġ@ param Ġtopic Color ĠĠĠĠĠĠĠĠ Ġtopic éľĢè¦ģ æĺ¾ç¤º çļĦ é¢ľèī² ĊĠĠĠĠ Ġ* Ġ@ param Ġspan At User CallBack ĠAT æŁĲ äºº çĤ¹åĩ» çļĦ è¿ĶåĽŀ ĊĠĠĠĠ Ġ* Ġ@ return Ġè¿ĶåĽŀ æĺ¾ç¤º çļĦ span an le ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget At Text ( context : ĠContext , Ġlist User : ĠList < User Model > ?, Ġlist Topic : ĠList < Topic Model > ?, Ġcontent : ĠString , ĠtextView : ĠI TextView Show ?, Ġclick able : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor : ĠInt , Ġtopic Color : ĠInt , Ġspan At User CallBack : ĠSpan At User CallBack , Ġspan Topic CallBack : ĠSpan Topic CallBack ?): ĠSp ann able Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġsp ann able : ĠSp ann able ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( list Topic Ġ!= Ġnull Ġ&& Ġlist Topic . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able Ġ= Ġget Topic Text ( context , Ġlist Topic , Ġcontent , ĠtextView , Ġclick able , Ġtopic Color , Ġspan Topic CallBack ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(( list User Ġ== Ġnull Ġ|| Ġlist User . isEmpty ()) Ġ&& Ġsp ann able Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Emoji Text ( context , Ġcontent , ĠtextView !!. emoji Size ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġsp ann able String Ġ= ĠSp ann able String ( if Ġ( span nable Ġ== Ġnull ) Ġcontent Ġelse Ġsp ann able ) ĊĠĠĠĠĠĠĠ Ġvar Ġindex Start Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġl enght Ġ= Ġcontent . length ĊĠĠĠĠĠĠĠ Ġvar Ġhad High Line Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġlist User !!. size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġcontent . indexOf ("@ " Ġ+ Ġlist User [ i ]. user _ name , Ġindex Start ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġ 0 Ġ&& Ġindex Start Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġcontent . indexOf ( list User [ i ]. user _ name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( map . containsKey ("" Ġ+ Ġindex )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Index Start Ġ= Ġif Ġ( index Start Ġ< Ġl enght ) ĠInteger . parseInt ( map [ "" Ġ+ Ġindex ]) Ġelse Ġl enght Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tmp Index Start Ġ!= Ġindex Start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Start Ġ= Ġtmp Index Start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put ( index . toString () Ġ+ Ġ"", Ġindex . toString () Ġ+ Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmath Start Ġ= Ġindex Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex End Ġ= Ġindex Ġ+ Ġlist User [ i ]. user _ name . length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhad At Ġ= Ġ"@ " Ġ== Ġcontent . substring ( math Start , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch End Ġ= Ġindex End Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( had At Ġ&& Ġ( match End Ġ<= Ġl enght Ġ|| Ġindex End Ġ== Ġl enght )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index End Ġ== Ġl enght Ġ|| Ġ" Ġ" Ġ== Ġcontent . substring ( index End , Ġindex End Ġ+ Ġ 1 ) Ġ|| Ġ"\ b " Ġ== Ġcontent . substring ( index End , Ġindex End Ġ+ Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index End Ġ> Ġindex Start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Start Ġ= Ġindex End ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhad High Line Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġclick At User Span : ĠClick At User Span ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( textView Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick At User Span Ġ= ĠtextView . get Custom Click At User Span ( context , Ġlist User [ i ], Ġcolor , Ġspan At User CallBack ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( click At User Span Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick At User Span Ġ= ĠClick At User Span ( context , Ġlist User [ i ], Ġcolor , Ġspan At User CallBack ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able String . set Span ( click At User Span , Ġmath Start , Ġif Ġ( index End Ġ== Ġl enght ) Ġl enght Ġelse Ġmatch End , ĠSp anned . SPAN _ MARK _ POINT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSm ile Utils . add Sm iles ( context , ĠtextView !!. emoji Size (), ĠtextView . vertical Alignment (), Ġsp ann able String ) ĊĠĠĠĠĠĠĠ Ġif Ġ( click able Ġ&& Ġhad High Line ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . set Movement Method ( Link Movement Method . getInstance ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġsp ann able String ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¯Ŀ é¢ĺ span ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠĠĠ Ġä¸Ĭ ä¸ĭ æĸĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġlist Topic ĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ çļĦè¯Ŀ é¢ĺ åĪĹè¡¨ ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent ĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ å¤ĦçĲĨ çļĦ æĸĩæľ¬ ĊĠĠĠĠ Ġ* Ġ@ param ĠtextView ĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ view ĊĠĠĠĠ Ġ* Ġ@ param Ġclick able ĠĠĠĠĠĠĠĠ Ġæĺ¯åĲ¦ åı¯ä»¥ çĤ¹åĩ» ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ é¢ľèī² ĊĠĠĠĠ Ġ* Ġ@ param Ġspan Topic CallBack Ġ çĤ¹åĩ» åĽŀè°ĥ ĊĠĠĠĠ Ġ* Ġ@ return ĠSp ann able ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Topic Text ( context : ĠContext , Ġlist Topic : ĠList < Topic Model > ?, Ġcontent : ĠString , ĠtextView : ĠI TextView Show ?, Ġclick able : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor : ĠInt , Ġspan Topic CallBack : ĠSpan Topic CallBack ?): ĠSp ann able Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( list Topic Ġ== Ġnull Ġ|| Ġlist Topic . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSp ann able String ( content ) ĊĠĠĠĠĠĠĠ Ġval Ġsp ann able String Ġ= ĠSp ann able String ( content ) ĊĠĠĠĠĠĠĠ Ġvar Ġindex Start Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġl enght Ġ= Ġcontent . length ĊĠĠĠĠĠĠĠ Ġvar Ġhad High Line Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġlist Topic . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġcontent . indexOf ("# " Ġ+ Ġlist Topic [ i ]. topic Name Ġ+ Ġ"# ", Ġindex Start ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġ 0 Ġ&& Ġindex Start Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġcontent . indexOf ( list Topic [ i ]. topic Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( map . containsKey ("" Ġ+ Ġindex )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Index Start Ġ= Ġif Ġ( index Start Ġ< Ġl enght ) ĠInteger . parseInt ( map [ "" Ġ+ Ġindex ]) Ġelse Ġl enght Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tmp Index Start Ġ!= Ġindex Start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Start Ġ= Ġtmp Index Start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put ( index . toString () Ġ+ Ġ"", Ġindex . toString () Ġ+ Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmath Start Ġ= Ġindex Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex End Ġ= Ġindex Ġ+ Ġlist Topic [ i ]. topic Name . length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhad At Ġ= Ġ"#" Ġ== Ġcontent . substring ( math Start , Ġindex ) Ġ&& Ġ"#" Ġ== Ġcontent . substring ( index End , Ġindex End Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch End Ġ= Ġindex End Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( had At Ġ&& Ġ( match End Ġ<= Ġl enght Ġ|| Ġindex End Ġ== Ġl enght )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index End Ġ> Ġindex Start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Start Ġ= Ġindex End ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhad High Line Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġclick Topic Span : ĠClick Topic Span ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( textView Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Topic Span Ġ= ĠtextView . get Custom Click Topic Span ( context , Ġlist Topic [ i ], Ġcolor , Ġspan Topic CallBack !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( click Topic Span Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Topic Span Ġ= ĠClick Topic Span ( context , Ġlist Topic [ i ], Ġcolor , Ġspan Topic CallBack ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able String . set Span ( click Topic Span , Ġmath Start , Ġif Ġ( index End Ġ== Ġl enght ) Ġl enght Ġelse Ġmatch End , ĠSp anned . SPAN _ MARK _ POINT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( click able Ġ&& Ġhad High Line ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView !!. set Movement Method ( Link Movement Method . getInstance ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġsp ann able String ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® å¸¦ é«ĺ äº ® åı¯ çĤ¹åĩ» çļĦ Url ãĢģ è¡¨ æĥħ çļĦ text view æĸĩæľ¬ ãĢģ AT æŁĲ äºº ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠĠĠĠ Ġä¸Ĭ ä¸ĭ æĸĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġstring ĠĠĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ å¤ĦçĲĨ çļĦ æĸĩæľ¬ ĊĠĠĠĠ Ġ* Ġ@ param Ġlist User ĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ AT æŁĲ äºº ĊĠĠĠĠ Ġ* Ġ@ param ĠtextView ĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ view ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor At ĠĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ é¢ľèī² ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor Link ĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ é¢ľèī² ĊĠĠĠĠ Ġ* Ġ@ param Ġneed Num ĠĠĠĠĠĠĠĠĠĠĠ Ġæĺ¯åĲ¦ éľĢè¦ģ æĺ¾ç¤º åı· çłģ ĊĠĠĠĠ Ġ* Ġ@ param Ġspan At User CallBack ĠAT æŁĲ äºº çĤ¹åĩ» çļĦ è¿ĶåĽŀ ĊĠĠĠĠ Ġ* Ġ@ param Ġspan Url CallBack ĠĠĠ Ġ éĵ¾æİ¥ çĤ¹åĩ» çļĦ è¿ĶåĽŀ ĊĠĠĠĠ Ġ* Ġ@ return Ġè¿ĶåĽŀ æĺ¾ç¤º çļĦ span an le ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetUrl Sm ile Text ( context : ĠContext , Ġstring : ĠString , Ġlist User : ĠList < User Model > ?, ĠtextView : ĠI TextView Show , Ġcolor At : ĠInt , Ġcolor Link : ĠInt , Ġneed Num : ĠBoolean , Ġspan At User CallBack : ĠSpan At User CallBack , Ġspan Url CallBack : ĠSpan Url CallBack ): ĠSp ann able Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetAll Span Text ( context , Ġstring , Ġlist User , Ġnull , ĠtextView , Ġcolor At , Ġcolor Link , Ġ 0 , Ġneed Num , Ġtrue , Ġspan At User CallBack , Ġspan Url CallBack , Ġnull ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® å¸¦ é«ĺ äº ® åı¯ çĤ¹åĩ» çļĦ Url ãĢģ è¡¨ æĥħ çļĦ text view æĸĩæľ¬ ãĢģ AT æŁĲ äºº ãĢģ è¯Ŀ é¢ĺ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠĠĠĠ Ġä¸Ĭ ä¸ĭ æĸĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġstring ĠĠĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ å¤ĦçĲĨ çļĦ æĸĩæľ¬ ĊĠĠĠĠ Ġ* Ġ@ param Ġlist User ĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ AT æŁĲ äºº ĊĠĠĠĠ Ġ* Ġ@ param Ġlist Topic ĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ çļĦè¯Ŀ é¢ĺ åĪĹè¡¨ ĊĠĠĠĠ Ġ* Ġ@ param ĠtextView ĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ view ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor At ĠĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ é¢ľèī² ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor Link ĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ é¢ľèī² ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor Topic ĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ é¢ľèī² ĊĠĠĠĠ Ġ* Ġ@ param Ġneed Num ĠĠĠĠĠĠĠĠĠĠĠ Ġæĺ¯åĲ¦ éľĢè¦ģ æĺ¾ç¤º åı· çłģ ĊĠĠĠĠ Ġ* Ġ@ param Ġneed Url ĠĠĠĠĠĠĠĠĠĠĠ Ġæĺ¯åĲ¦ éľĢè¦ģ æĺ¾ç¤º url ĊĠĠĠĠ Ġ* Ġ@ param Ġspan At User CallBack ĠAT æŁĲ äºº çĤ¹åĩ» çļĦ è¿ĶåĽŀ ĊĠĠĠĠ Ġ* Ġ@ param Ġspan Url CallBack ĠĠĠ Ġ éĵ¾æİ¥ çĤ¹åĩ» çļĦ è¿ĶåĽŀ ĊĠĠĠĠ Ġ* Ġ@ param Ġspan Topic CallBack Ġ Ġ è¯Ŀ é¢ĺ çĤ¹åĩ» çļĦ è¿ĶåĽŀ ĊĠĠĠĠ Ġ* Ġ@ return Ġè¿ĶåĽŀ æĺ¾ç¤º çļĦ span an le ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetAll Span Text ( context : ĠContext , Ġstring : ĠString , Ġlist User : ĠList < User Model > ?, Ġlist Topic : ĠList < Topic Model > ?, ĠtextView : ĠI TextView Show , Ġcolor At : ĠInt , Ġcolor Link : ĠInt , Ġcolor Topic : ĠInt , Ġneed Num : ĠBoolean , Ġneed Url : ĠBoolean , Ġspan At User CallBack : ĠSpan At User CallBack , Ġspan Url CallBack : ĠSpan Url CallBack , Ġspan Topic CallBack : ĠSpan Topic CallBack ?): ĠSp ann able Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġstring Cur Ġ= Ġstring ĊĠĠĠĠĠĠĠ Ġif Ġ( need Url Ġ|| Ġneed Num ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setAuto Link Mask ( Link ify . WEB _ URL S Ġor ĠLink ify . PHONE _ NUMBER S ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! TextUtils . isEmpty ( string Cur )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring Cur Ġ= Ġstring . replace ("\ r ". to Regex (), Ġ"\ r \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsp ann able Ġ= Ġget At Text ( context , Ġlist User , Ġlist Topic , Ġstring Cur , ĠtextView , Ġtrue , Ġcolor At , Ġcolor Topic , Ġspan At User CallBack , Ġspan Topic CallBack ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġsp ann able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( need Url Ġ|| Ġneed Num ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Url Logic ( context , ĠtextView , Ġsp ann able , Ġcolor Link , Ġneed Num , Ġneed Url , Ġspan Url CallBack ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp ann able String (" Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¤ĦçĲĨ å¸¦ URL çļĦ éĢ»è¾ĳ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠ Ġä¸Ĭ ä¸ĭ æĸĩ ĊĠĠĠĠ Ġ* Ġ@ param ĠtextView ĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ view ĊĠĠĠĠ Ġ* Ġ@ param Ġsp ann able ĠĠĠĠĠĠ Ġ æĺ¾ç¤º çļĦ span an le ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor ĠĠĠĠĠĠĠĠĠĠ ĠéľĢè¦ģ æĺ¾ç¤º çļĦ é¢ľèī² ĊĠĠĠĠ Ġ* Ġ@ param Ġneed Num ĠĠĠĠĠĠĠĠ Ġæĺ¯åĲ¦ éľĢè¦ģ æĺ¾ç¤º åı· çłģ ĊĠĠĠĠ Ġ* Ġ@ param Ġneed Url ĠĠĠĠĠĠĠĠ Ġæĺ¯åĲ¦ éľĢè¦ģ æĺ¾ç¤º url ĊĠĠĠĠ Ġ* Ġ@ param Ġspan Url CallBack Ġ éĵ¾æİ¥ çĤ¹åĩ» çļĦ è¿ĶåĽŀ ĊĠĠĠĠ Ġ* Ġ@ return Ġè¿ĶåĽŀ æĺ¾ç¤º çļĦ span an le ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġresolve Url Logic ( context : ĠContext , ĠtextView : ĠI TextView Show ?, Ġsp ann able : ĠSp ann able , Ġcolor : ĠInt , Ġneed Num : ĠBoolean , Ġneed Url : ĠBoolean , Ġspan Url CallBack : ĠSpan Url CallBack ): ĠSp ann able Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchar Sequence Ġ= ĠtextView ?. text ĊĠĠĠĠĠĠĠ Ġif Ġ( char Sequence Ġis ĠSp ann able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġchar Sequence . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠtextView . text Ġas ĠSp ann able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurls Ġ= Ġsp . get Spans < URL Span >( 0 , Ġend , ĠURL Span :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġat Span Ġ= Ġsp . get Spans < Click At User Span >( 0 , Ġend , ĠClick At User Span :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( urls . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstyle Ġ= ĠSp ann able StringBuilder ( char Sequence ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . clear Spans () // Ġshould Ġclear Ġold Ġspans ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( url Ġin Ġurls ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl String Ġ= Ġurl . url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Numeric ( url String . replace (" tel :", Ġ" "))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! need Num Ġ&& Ġ! is Mobile Simple ( url String . replace (" tel :", Ġ" "))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . set Span ( Style Span ( Type face . NORMAL ), Ġsp . get Span Start ( url ), Ġsp . get Span End ( url ), ĠSp ann able . SPAN _ EXCL USIVE _ INCL USIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlink Span : ĠLink Span ? Ġ= ĠtextView . get Custom Link Span ( context , Ġurl . url , Ġcolor , Ġspan Url CallBack ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link Span Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink Span Ġ= ĠLink Span ( context , Ġurl . url , Ġcolor , Ġspan Url CallBack ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . set Span ( link Span , Ġsp . get Span Start ( url ), Ġsp . get Span End ( url ), ĠSp ann able . SPAN _ EXCL USIVE _ INCL USIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( need Url Ġ&& Ġis Top URL ( url String . toLowerCase ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlink Span : ĠLink Span ? Ġ= ĠtextView . get Custom Link Span ( context , Ġurl . url , Ġcolor , Ġspan Url CallBack ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link Span Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink Span Ġ= ĠLink Span ( context , Ġurl . url , Ġcolor , Ġspan Url CallBack ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . set Span ( link Span , Ġsp . get Span Start ( url ), Ġsp . get Span End ( url ), ĠSp ann able . SPAN _ EXCL USIVE _ INCL USIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . set Span ( Style Span ( Type face . NORMAL ), Ġsp . get Span Start ( url ), Ġsp . get Span End ( url ), ĠSp ann able . SPAN _ EXCL USIVE _ INCL USIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( at User Span Ġin Ġat Span ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åī Ķ éĻ¤ è¯Ŀ é¢ĺ åĴĮ at æŁĲ äºº ä¸ŃçļĦ link Ġspan ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremove Urls Ġ= Ġstyle . get Spans < Link Span >( sp . get Span Start ( at User Span ), Ġsp . get Span End ( at User Span ), ĠLink Span :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( remove Urls Ġ!= Ġnull Ġ&& Ġremove Urls . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( link Span Ġin Ġremove Urls ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . remove Span ( link Span ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . set Span ( at User Span , Ġsp . get Span Start ( at User Span ), Ġsp . get Span End ( at User Span ), ĠSp anned . SPAN _ MARK _ POINT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSm ile Utils . add Sm iles ( context , ĠtextView . emoji Size (), ĠtextView . vertical Alignment (), Ġstyle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setAuto Link Mask ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstyle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsp ann able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsp ann able ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ é¡¶ çº§ åŁŁåĲį åĪ¤æĸŃ ï¼Ľ å¦Ĥæŀľ è¦ģ å¿½ çķ¥ å¤§å°ı åĨĻ ï¼Į åı¯ä»¥ çĽ´æİ¥ åľ¨ ä¼łåħ¥ åıĤæķ° çļĦæĹ¶åĢĻ toLowerCase () åĨį åģļ åĪ¤æĸŃ ĊĠĠĠĠ Ġ* Ġ å¤ĦçĲĨ 1 . Ġ 2 . Ġ 3 . è¯ĨåĪ« æĪĲ éĵ¾æİ¥ çļĦéĹ®é¢ĺ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstr ĊĠĠĠĠ Ġ* Ġ@ return Ġæĺ¯åĲ¦ ç¬¦åĲĪ url ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġis Top URL ( str : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġss Ġ= Ġstr . split ("\\ .". to Regex ()). drop Last While ({ Ġit . isEmpty () Ġ}). to Typed Array () ĊĠĠĠĠĠĠĠ Ġreturn Ġss . size Ġ>= Ġ 3 ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ æķ°åŃĹ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstr ĊĠĠĠĠ Ġ* Ġ@ return Ġæĺ¯åĲ¦ æķ°åŃĹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġis Numeric ( str : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= ĠPattern . compile ("[ 0 - 9 ]* ") ĊĠĠĠĠĠĠĠ Ġval Ġis Num Ġ= Ġpattern . matcher ( str ) ĊĠĠĠĠĠĠĠ Ġreturn Ġis Num . matches () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġstring Ġ å¾ħ éªĮè¯ģ æĸĩæľ¬ ĊĠĠĠĠ Ġ* Ġ@ return Ġæĺ¯åĲ¦ ç¬¦åĲĪ æīĭæľº åı· ï¼Ī ç®Ģåįķ ï¼ī æł¼å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġis Mobile Simple ( string : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġphone Ġ= Ġ"^ [ 1 ]\\ d { 1 0 }$ " ĊĠĠĠĠĠĠĠ Ġreturn Ġ! TextUtils . isEmpty ( string ) Ġ&& ĠPattern . matches ( phone , Ġstring ) ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ