/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 Ġgo at bytes . io Ċ Ġ* Ċ Ġ* Ġ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 Ġio . go at bytes . android . extension . widget Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Sp ann able StringBuilder Ċ import Ġandroid . text . Sp anned Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . text . method . Link Movement Method Ċ import Ġandroid . text . style . Clickable Span Ċ import Ġandroid . text . style . URL Span Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . Int Range Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . core . text . Html Compat Ċ import Ġio . go at bytes . android . globals . context Ċ Ċ // Ġregion ĠTextView Ċ Ċ /** Ċ Ġ* Ġ@ return Ġthe Ġtext Ġthat ĠTextView Ġis Ġdisplaying Ġas Ġa Ġstring Ċ Ġ*/ Ċ val ĠTextView . value Ġget () Ġ= Ġtext . toString () Ċ Ċ /** Ċ Ġ* ĠConvert Ġa Ġstring Ġto Ġa ĠSp ann able Ġthat Ġformats Ġit Ġinto ĠHTML Ġand Ġset Ġthe ĠSp ann able Ġon Ġa ĠTextView Ċ Ġ* Ċ Ġ* Ġ@ param Ġres id ĠThe Ġstring Ġresource Ġthat Ġis Ġformatted Ġwith Ġsupported ĠHTML Ġtags Ċ Ġ*/ Ċ fun ĠTextView . set Html (@ String Res Ġres id : ĠInt , Ġflag : ĠInt Ġ= ĠHtml Compat . FROM _ HTML _ MODE _ LEG ACY ) Ġ{ ĊĠĠĠ Ġtext Ġ= ĠHtml Compat . from Html ( context (). getString ( res id ), Ġflag ) Ċ } Ċ Ċ /** Ċ Ġ* ĠConvert Ġa Ġstring Ġto Ġa ĠSp ann able Ġthat Ġformats Ġit Ġinto ĠHTML Ġand Ġset Ġthe ĠSp ann able Ġon Ġa ĠTextView Ċ Ġ* Ċ Ġ* Ġ@ param Ġhtml ĠThe Ġstring Ġthat Ġis Ġformatted Ġwith Ġsupported ĠHTML Ġtags Ċ Ġ*/ Ċ fun ĠTextView . set Html ( html : ĠString , Ġflag : ĠInt Ġ= ĠHtml Compat . FROM _ HTML _ MODE _ LEG ACY ) Ġ{ ĊĠĠĠ Ġtext Ġ= ĠHtml Compat . from Html ( html , Ġflag ) Ċ } Ċ Ċ fun ĠTextView . set Html ( html : ĠString , ĠonClick : Ġ( url : ĠString ) Ġ-> ĠUnit ) Ġ= ĊĠĠĠ Ġset Html ( Html Compat . from Html ( html , ĠHtml Compat . FROM _ HTML _ MODE _ LEG ACY ), ĠonClick ) Ċ Ċ fun ĠTextView . set Html ( html : ĠSp anned , ĠonClick : Ġ( url : ĠString ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġfun Ġmake Clickable ( sb : ĠSp ann able StringBuilder , Ġurl Span : ĠURL Span ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġsb . get Span Start ( url Span ) ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġsb . get Span End ( url Span ) ĊĠĠĠĠĠĠĠ Ġval Ġflags Ġ= Ġsb . get Span Flags ( url Span ) ĊĠĠĠĠĠĠĠ Ġval Ġclick able Ġ= Ġobject Ġ: ĠClick able Span () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick ( url Span . url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsb . set Span ( click able , Ġstart , Ġend , Ġflags ) ĊĠĠĠĠĠĠĠ Ġsb . remove Span ( url Span ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsb Ġ= ĠSp ann able StringBuilder ( html ) ĊĠĠĠ Ġval Ġurls Ġ= Ġsb . get Spans ( 0 , Ġhtml . length , ĠURL Span :: class . java ) ĊĠĠĠ Ġfor Ġ( url Span Ġin Ġurls ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmake Clickable ( sb , Ġurl Span ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġtext Ġ= Ġsb ĊĠĠĠ Ġmovement Method Ġ= ĠLink Movement Method . getInstance () Ċ } Ċ Ċ /** Ċ Ġ* ĠConvert Ġa Ġstring Ġto Ġa ĠSp ann able Ġthat Ġformats Ġit Ġinto ĠHTML Ġand Ġset Ġthe ĠSp ann able Ġon Ġa ĠTextView Ċ Ġ*/ Ċ var ĠTextView . html : ĠString ĊĠĠĠ Ġget () Ġ= Ġtext . toString () ĊĠĠĠ Ġset ( value ) Ġ= Ġset Html ( value ) ĊĊ Ċ private Ġfun ĠTextView . set Compound Draw ables With Intr insic Bounds ( ĊĠĠĠ Ġdrawable : ĠDrawable ?, Ġ@ Int Range ( from Ġ= Ġ 0 , Ġto Ġ= Ġ 3 ) Ġindex : ĠInt Ċ ) Ġ{ ĊĠĠĠ Ġval Ġdraw ables Ġ= Ġcompound Draw ables ĊĠĠĠ Ġdraw ables [ index ] Ġ= Ġdrawable ĊĠĠĠ Ġset Compound Draw ables With Intr insic Bounds ( draw ables [ 0 ], Ġdraw ables [ 1 ], Ġdraw ables [ 2 ], Ġdraw ables [ 3 ]) Ċ } Ċ Ċ var ĠTextView . drawable Left : ĠDrawable ? ĊĠĠĠ Ġget () Ġ= Ġcompound Draw ables [ 0 ] ĊĠĠĠ Ġset ( value ) Ġ= Ġset Compound Draw ables With Intr insic Bounds ( value , Ġ 0 ) Ċ Ċ var ĠTextView . drawable Top : ĠDrawable ? ĊĠĠĠ Ġget () Ġ= Ġcompound Draw ables [ 1 ] ĊĠĠĠ Ġset ( value ) Ġ= Ġset Compound Draw ables With Intr insic Bounds ( value , Ġ 1 ) Ċ Ċ var ĠTextView . drawable Right : ĠDrawable ? ĊĠĠĠ Ġget () Ġ= Ġcompound Draw ables [ 2 ] ĊĠĠĠ Ġset ( value ) Ġ= Ġset Compound Draw ables With Intr insic Bounds ( value , Ġ 2 ) Ċ Ċ var ĠTextView . drawable Bottom : ĠDrawable ? ĊĠĠĠ Ġget () Ġ= Ġcompound Draw ables [ 3 ] ĊĠĠĠ Ġset ( value ) Ġ= Ġset Compound Draw ables With Intr insic Bounds ( value , Ġ 3 ) Ċ Ċ /** Ċ Ġ* ĠAdd Ġan Ġaction Ġwhich Ġwill Ġbe Ġinvoked Ġbefore Ġthe Ġtext Ġchanged . Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġ[ Text Watcher ] Ġadded Ġto Ġthe ĠTextView Ċ Ġ*/ Ċ inline Ġfun ĠTextView . do Before TextChanged ( ĊĠĠĠ Ġcross inline Ġaction : Ġ( ĊĠĠĠĠĠĠĠ Ġtext : ĠCharSequence , ĊĠĠĠĠĠĠĠ Ġstart : ĠInt , ĊĠĠĠĠĠĠĠ Ġcount : ĠInt , ĊĠĠĠĠĠĠĠ Ġafter : ĠInt ĊĠĠĠ Ġ) Ġ-> ĠUnit Ċ ) Ġ= Ġadd TextChanged Listener ( before TextChanged Ġ= Ġaction ) Ċ Ċ /** Ċ Ġ* ĠAdd Ġan Ġaction Ġwhich Ġwill Ġbe Ġinvoked Ġwhen Ġthe Ġtext Ġis Ġchanging . Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġ[ Text Watcher ] Ġadded Ġto Ġthe ĠTextView Ċ Ġ*/ Ċ inline Ġfun ĠTextView . do On TextChanged ( ĊĠĠĠ Ġcross inline Ġaction : Ġ( ĊĠĠĠĠĠĠĠ Ġtext : ĠCharSequence , ĊĠĠĠĠĠĠĠ Ġstart : ĠInt , ĊĠĠĠĠĠĠĠ Ġcount : ĠInt , ĊĠĠĠĠĠĠĠ Ġafter : ĠInt ĊĠĠĠ Ġ) Ġ-> ĠUnit Ċ ) Ġ= Ġadd TextChanged Listener ( on TextChanged Ġ= Ġaction ) Ċ Ċ /** Ċ Ġ* ĠAdd Ġan Ġaction Ġwhich Ġwill Ġbe Ġinvoked Ġafter Ġthe Ġtext Ġchanged . Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġ[ Text Watcher ] Ġadded Ġto Ġthe ĠTextView Ċ Ġ*/ Ċ inline Ġfun ĠTextView . do After TextChanged ( ĊĠĠĠ Ġcross inline Ġaction : Ġ( text : ĠEdit able ) Ġ-> ĠUnit Ċ ) Ġ= Ġadd TextChanged Listener ( after TextChanged Ġ= Ġaction ) Ċ Ċ /** Ċ Ġ* ĠAdd Ġa Ġtext Ġchanged Ġlistener Ġto Ġthis ĠTextView Ġusing Ġthe Ġprovided Ġactions Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġ[ Text Watcher ] Ġadded Ġto Ġthe ĠTextView Ċ Ġ*/ Ċ inline Ġfun ĠTextView . add TextChanged Listener ( ĊĠĠĠ Ġcross inline Ġbefore TextChanged : Ġ( ĊĠĠĠĠĠĠĠ Ġtext : ĠCharSequence , ĊĠĠĠĠĠĠĠ Ġstart : ĠInt , ĊĠĠĠĠĠĠĠ Ġcount : ĠInt , ĊĠĠĠĠĠĠĠ Ġafter : ĠInt ĊĠĠĠ Ġ) Ġ-> ĠUnit Ġ= Ġ{ Ġ_, Ġ_, Ġ_, Ġ_ Ġ-> Ġ}, ĊĠĠĠ Ġcross inline Ġon TextChanged : Ġ( ĊĠĠĠĠĠĠĠ Ġtext : ĠCharSequence , ĊĠĠĠĠĠĠĠ Ġstart : ĠInt , ĊĠĠĠĠĠĠĠ Ġcount : ĠInt , ĊĠĠĠĠĠĠĠ Ġafter : ĠInt ĊĠĠĠ Ġ) Ġ-> ĠUnit Ġ= Ġ{ Ġ_, Ġ_, Ġ_, Ġ_ Ġ-> Ġ}, ĊĠĠĠ Ġcross inline Ġafter TextChanged : Ġ( text : ĠEdit able ) Ġ-> ĠUnit Ġ= Ġ{} Ċ ): ĠText Watcher Ġ{ ĊĠĠĠ Ġval Ġtext Watcher Ġ= Ġobject Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter TextChanged . invoke ( s ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( text : ĠCharSequence , Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore TextChanged . invoke ( text , Ġstart , Ġcount , Ġafter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( text : ĠCharSequence , Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon TextChanged . invoke ( text , Ġstart , Ġbefore , Ġcount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġadd TextChanged Listener ( text Watcher ) ĊĊĠĠĠ Ġreturn Ġtext Watcher Ċ } Ċ Ċ // Ġend region Ċ Ċ // Ġregion ĠToast s ĊĊ Ċ private Ġval ĠString . duration : ĠInt Ġget () Ġ= Ġif Ġ( length Ġ>= Ġ 5 0 ) ĠToast . LENGTH _ LONG Ġelse ĠToast . LENGTH _ SHORT Ċ Ċ /** Ċ Ġ* ĠConvenience Ġfunction Ġto Ġshow Ġthe Ġstring Ġas Ġa Ġtoast Ġmessage . Ċ Ġ* Ċ Ġ* Ġ@ param Ġduration ĠEither Ġ[ Toast . LENGTH _ SHORT ] Ġor Ġ[ Toast . LENGTH _ LONG ]. Ċ Ġ* ĠDefault Ġvalue Ġis Ġ[ Toast . LENGTH _ SHORT ] Ġif Ġthe Ġmessage Ġis Ġless Ġthan Ġ 5 0 Ġcharacters Ċ Ġ*/ Ċ fun ĠString . show Toast ( duration : ĠInt Ġ= Ġthis . duration ): ĠUnit Ġ= ĊĠĠĠ ĠToast . makeText ( context (), Ġthis , Ġduration ). show () Ċ Ċ /** ĠShow Ġa Ġ[ Toast ] Ġmessage Ġwith Ġthe Ġduration Ġof Ġ[ Toast . LENGTH _ SHORT ] Ġ*/ Ċ fun ĠString . show Short Toast (): ĠUnit Ġ= ĊĠĠĠ ĠToast . makeText ( context (), Ġthis , ĠToast . LENGTH _ SHORT ). show () Ċ Ċ /** ĠShow Ġa Ġ[ Toast ] Ġmessage Ġwith Ġthe Ġduration Ġof Ġ[ Toast . LENGTH _ LONG ] Ġ*/ Ċ fun ĠString . show Long Toast (): ĠUnit Ġ= ĠToast . makeText ( context (), Ġthis , ĠToast . LENGTH _ LONG ). show () Ċ Ċ /** ĠMake Ġa Ġ[ Toast ] Ġmessage Ġwith Ġthe Ġduration Ġof Ġ[ Toast . LENGTH _ SHORT ] Ġ*/ Ċ fun ĠString . make Short Toast (): ĠToast Ġ= ĊĠĠĠ ĠToast . makeText ( context (), Ġthis , ĠToast . LENGTH _ SHORT ) Ċ Ċ /** ĠMake Ġa Ġ[ Toast ] Ġmessage Ġwith Ġthe Ġduration Ġof Ġ[ Toast . LENGTH _ LONG ] Ġ*/ Ċ fun ĠString . make Long Toast (): ĠToast Ġ= ĊĠĠĠ ĠToast . makeText ( context (), Ġthis , ĠToast . LENGTH _ LONG ) Ċ Ċ /** Ċ Ġ* ĠConvenience Ġfunction Ġto Ġmake Ġa Ġtoast Ġmessage . Ċ Ġ* Ċ Ġ* Ġ@ param Ġduration ĠEither Ġ[ Toast . LENGTH _ SHORT ] Ġor Ġ[ Toast . LENGTH _ LONG ]. Ċ Ġ* ĠDefault Ġvalue Ġis Ġ[ Toast . LENGTH _ SHORT ] Ġif Ġthe Ġmessage Ġis Ġless Ġthan Ġ 5 0 Ġcharacters Ċ Ġ*/ Ċ fun ĠString . make Toast ( duration : ĠInt Ġ= Ġthis . duration ): ĠToast Ġ= ĊĠĠĠ ĠToast . makeText ( context (), Ġthis , Ġduration ) Ċ Ċ /** Ċ Ġ* ĠConvenience Ġfunction Ġto Ġshow Ġthe Ġstring Ġas Ġa Ġtoast Ġmessage . Ċ Ġ* Ċ Ġ* Ġ@ param Ġduration ĠEither Ġ[ Toast . LENGTH _ SHORT ] Ġor Ġ[ Toast . LENGTH _ LONG ]. Ċ Ġ* ĠDefault Ġvalue Ġis Ġ[ Toast . LENGTH _ SHORT ] Ġif Ġthe Ġmessage Ġis Ġless Ġthan Ġ 5 0 Ġcharacters Ċ Ġ*/ Ċ fun Ġ@ receiver : String Res ĠInt . show Toast ( duration : ĠInt Ġ= Ġcontext (). getString ( this ). duration ): ĠUnit Ġ= ĊĠĠĠ ĠToast . makeText ( context (), Ġthis , Ġduration ). show () Ċ Ċ /** ĠShow Ġa Ġ[ Toast ] Ġmessage Ġwith Ġthe Ġduration Ġof Ġ[ Toast . LENGTH _ LONG ] Ġ*/ Ċ fun Ġ@ receiver : String Res ĠInt . show Long Toast (): ĠUnit Ġ= ĊĠĠĠ ĠToast . makeText ( context (), Ġthis , ĠToast . LENGTH _ SHORT ). show () Ċ Ċ /** ĠShow Ġa Ġ[ Toast ] Ġmessage Ġwith Ġthe Ġduration Ġof Ġ[ Toast . LENGTH _ SHORT ] Ġ*/ Ċ fun Ġ@ receiver : String Res ĠInt . show Short Toast (): ĠUnit Ġ= ĊĠĠĠ ĠToast . makeText ( context (), Ġthis , ĠToast . LENGTH _ LONG ). show () Ċ Ċ /** Ċ Ġ* ĠConvenience Ġfunction Ġto Ġshow Ġthe Ġstring Ġas Ġa Ġtoast Ġmessage . Ċ Ġ* Ċ Ġ* Ġ@ param Ġduration ĠEither Ġ[ Toast . LENGTH _ SHORT ] Ġor Ġ[ Toast . LENGTH _ LONG ]. Ċ Ġ* ĠDefault Ġvalue Ġis Ġ[ Toast . LENGTH _ SHORT ] Ġif Ġthe Ġmessage Ġis Ġless Ġthan Ġ 5 0 Ġcharacters Ċ Ġ*/ Ċ fun ĠContext . show Toast ( ĊĠĠĠ Ġtext : ĠString , Ġduration : ĠInt Ġ= Ġif Ġ( text . length Ġ>= Ġ 5 0 ) ĠToast . LENGTH _ LONG Ġelse ĠToast . LENGTH _ SHORT Ċ ): ĠUnit Ġ= ĠToast . makeText ( this , Ġtext , Ġduration ). show () Ċ Ċ // Ġend region Ċ