package Ġcom . project _ ch ristopher . projects . bib liot he ca . GUI . Custom Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Gradient Drawable Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . Relative Layout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . card view . widget . Card View Ċ import Ġandroidx . core . view . margin End Ċ import Ġandroidx . core . view . margin Start Ċ import Ġcom . project _ ch ristopher . projects . bib liot he ca . R Ċ import Ġkotlin . math . abs ĊĊ Ċ class ĠAttribute Ġ: ĠRelative Layout Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠmContext : ĠContext ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcard View : ĠCard View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlinear Layout : ĠLinearLayout ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠtextView : ĠTextView ĊĊĠĠĠ Ġprivate Ġval Ġm Colors Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġ- 0 x 1 a 8 c 8 d , ĊĠĠĠĠĠĠĠ Ġ- 0 xf 9 d 6 e , ĊĠĠĠĠĠĠĠ Ġ- 0 x 4 5 9 7 3 8 , ĊĠĠĠĠĠĠĠ Ġ- 0 x 6 a 8 a 3 3 , ĊĠĠĠĠĠĠĠ Ġ- 0 x 8 6 7 9 3 5 , ĊĠĠĠĠĠĠĠ Ġ- 0 x 9 b 4 a 0 a , ĊĠĠĠĠĠĠĠ Ġ- 0 xb 0 3 c 0 9 , ĊĠĠĠĠĠĠĠ Ġ- 0 xb 2 2 f 1 f , ĊĠĠĠĠĠĠĠ Ġ- 0 xb 2 4 9 5 4 , ĊĠĠĠĠĠĠĠ Ġ- 0 x 7 e 3 8 7 c , ĊĠĠĠĠĠĠĠ Ġ- 0 x 5 1 2 a 7 f , ĊĠĠĠĠĠĠĠ Ġ- 0 x 7 5 9 b , ĊĠĠĠĠĠĠĠ Ġ- 0 x 2 b 1 ea 9 , ĊĠĠĠĠĠĠĠ Ġ- 0 x 2 ab 1 , ĊĠĠĠĠĠĠĠ Ġ- 0 x 4 8 b 3 , ĊĠĠĠĠĠĠĠ Ġ- 0 x 5 e 7 7 8 1 , ĊĠĠĠĠĠĠĠ Ġ- 0 x 6 f 5 b 5 2 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġlateinit Ġvar Ġtext : ĠString ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġtext Size Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar ĠtextColor Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġtext Style Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġvar ĠstrokeWidth Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġstroke Color Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġvar Ġradius Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġbg Color Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġvar Ġstroke Color Based On Text Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar ĠtextColor Based On Text Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġvar Ġm Width Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Height Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġm Padding Start Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Padding Top Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Padding End Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Padding Bottom Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġtext End Margin Start Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġvar Ġis Bu il ded Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mContext Ġ= Ġcontext ĊĠĠĠĠĠĠĠ ĠsetDefault Values () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mContext Ġ= Ġcontext ĊĠĠĠĠĠĠĠ ĠsetDefault Values () ĊĠĠĠĠĠĠĠ Ġinit Attributes ( attrs ) ĊĠĠĠĠĠĠĠ Ġbuild () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mContext Ġ= Ġcontext ĊĠĠĠĠĠĠĠ ĠsetDefault Values () ĊĠĠĠĠĠĠĠ Ġinit Attributes ( attrs ) ĊĠĠĠĠĠĠĠ Ġbuild () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetDefault Values () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m Width Ġ= ĠLayout Params . WRAP _ CONTENT ĊĠĠĠĠĠĠĠ Ġthis . m Height Ġ= ĠLayout Params . WRAP _ CONTENT ĊĊĠĠĠĠĠĠĠ Ġthis . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġthis . text Size Ġ= Ġ 1 2 f ĊĠĠĠĠĠĠĠ Ġthis . textColor Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠ Ġthis . text Style Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġthis . stroke Width Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġthis . stroke Color Ġ= ĠColor . BLACK ĊĊĠĠĠĠĠĠĠ Ġthis . radius Ġ= Ġdp To Pixels ( 3 0 ) ĊĊĠĠĠĠĠĠĠ Ġthis . bgColor Ġ= ĠColor . WHITE ĊĊĠĠĠĠĠĠĠ Ġthis . stroke Color Based On Text Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġthis . textColor Based On Text Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġthis . m Padding Start Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġthis . m Padding Top Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġthis . m Padding End Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġthis . m Padding Bottom Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Custom View Style able ") ĊĠĠĠ Ġprivate Ġfun Ġinit Attributes ( attrs : ĠAttributeSet ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġthis . mContext . obtain Styled Attributes ( attrs , ĠR . style able . Attribute ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Width Ġ= Ġa . getInt ( R . style able . Attribute _ android _ layout _ width , ĠLayout Params . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Width Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . get Dimension ( R . style able . Attribute _ android _ layout _ width , ĠLayout Params . WRAP _ CONTENT . toFloat ()). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Height Ġ= Ġa . getInt ( R . style able . Attribute _ android _ layout _ height , ĠLayout Params . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Height Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . get Dimension ( R . style able . Attribute _ android _ layout _ height , ĠLayout Params . WRAP _ CONTENT . toFloat ()). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . text Ġ= Ġa . getString ( R . style able . Attribute _ android _ text ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġthis . text Size Ġ= Ġa . get Dimension ( R . style able . Attribute _ android _ text Size , Ġ 1 2 f ) ĊĠĠĠĠĠĠĠ Ġthis . textColor Ġ= Ġa . getColor ( R . style able . Attribute _ android _ textColor , ĠColor . WHITE ) ĊĠĠĠĠĠĠĠ Ġthis . text Style Ġ= Ġa . getInt ( R . style able . Attribute _ android _ text Style , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġthis . stroke Width Ġ= Ġa . get Dimension ( R . style able . Attribute _ stroke Width , Ġ 0 f ). toInt () ĊĠĠĠĠĠĠĠ Ġthis . stroke Color Ġ= Ġa . getInt ( R . style able . Attribute _ stroke Color , ĠColor . BLACK ) ĊĊĠĠĠĠĠĠĠ Ġthis . radius Ġ= Ġa . get Dimension ( R . style able . Attribute _ radius , Ġdp To Pixels ( 3 0 ). toFloat ()). toInt () ĊĊĠĠĠĠĠĠĠ Ġthis . bgColor Ġ= Ġa . getInt ( R . style able . Attribute _ backgroundColor , ĠColor . WHITE ) ĊĊĠĠĠĠĠĠĠ Ġthis . stroke Color Based On Text Ġ= Ġa . getBoolean ( R . style able . Attribute _ stroke Color Based On Text , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġthis . textColor Based On Text Ġ= Ġa . getBoolean ( R . style able . Attribute _ textColor Based On Text , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpadding Ġ= Ġa . get Dimension ( R . style able . Attribute _ android _ padding , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġif Ġ( padding Ġ== Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Padding Start Ġ= Ġa . get Dimension ( R . style able . Attribute _ android _ padding Start , Ġ 0 f ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Padding Top Ġ= Ġa . get Dimension ( R . style able . Attribute _ android _ padding Top , Ġ 0 f ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Padding End Ġ= Ġa . get Dimension ( R . style able . Attribute _ android _ padding End , Ġ 0 f ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Padding Bottom Ġ= Ġa . get Dimension ( R . style able . Attribute _ android _ padding Bottom , Ġ 0 f ). toInt () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Padding Start Ġ= Ġpadding . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Padding Top Ġ= Ġpadding . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Padding End Ġ= Ġpadding . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Padding Bottom Ġ= Ġpadding . toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild (): ĠAttribute Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Bu il ded ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" build () Ġcannot Ġbe Ġcalled Ġtwice ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . textColor Based On Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . textColor Ġ= Ġthis . m Colors [ abs ( this . text . hashCode ()) Ġ% Ġthis . m Colors . size ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . stroke Color Based On Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . stroke Color Ġ= Ġthis . m Colors [ abs ( this . text . hashCode ()) Ġ% Ġthis . m Colors . size ] ĊĊĊĠĠĠĠĠĠĠ Ġ// ĠTextView Ġ- ĠContainer ĊĠĠĠĠĠĠĠ Ġthis . textView Ġ= ĠTextView ( this . mContext ) ĊĠĠĠĠĠĠĠ Ġval Ġtv P Ġ= ĠLinearLayout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . WRAP _ CONTENT , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtv P . set Margins ( dp To Pixels ( 1 5 ), Ġ 0 , Ġdp To Pixels ( 1 5 ), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġthis . textView . layout Params Ġ= Ġtv P ĊĠĠĠĠĠĠĠ Ġthis . textView . text Ġ= Ġthis . text ĊĠĠĠĠĠĠĠ Ġthis . textView . setText Size ( Typed Value . COMPLEX _ UNIT _ PX , Ġthis . text Size ) ĊĠĠĠĠĠĠĠ Ġthis . textView . setTextColor ( this . textColor ) ĊĠĠĠĠĠĠĠ Ġthis . textView . setType face ( this . textView . type face , Ġthis . text Style ) ĊĠĠĠĠĠĠĠ Ġthis . textView . el lip size Ġ= ĠText Utils . Truncate At . END ĊĠĠĠĠĠĠĠ Ġthis . textView . set Single Line () ĊĊĠĠĠĠĠĠĠ Ġ// ĠLinearLayout Ġ- ĠContainer ĊĠĠĠĠĠĠĠ Ġthis . linear Layout Ġ= ĠLinearLayout ( this . mContext ) ĊĠĠĠĠĠĠĠ Ġthis . linear Layout . layout Params Ġ= ĠLinearLayout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġthis . linear Layout . orientation Ġ= ĠLinearLayout . HORIZONTAL ĊĠĠĠĠĠĠĠ Ġthis . linear Layout . gravity Ġ= ĠGr avity . CENTER _ VERTICAL ĊĊĠĠĠĠĠĠĠ Ġval Ġshape Ġ= ĠGradient Drawable () ĊĠĠĠĠĠĠĠ Ġshape . shape Ġ= ĠGradient Drawable . RECT ANGLE ĊĠĠĠĠĠĠĠ Ġval Ġrad Ġ= Ġthis . radius . toFloat () ĊĠĠĠĠĠĠĠ Ġshape . corner Rad ii Ġ= Ġfloat ArrayOf ( rad , Ġrad , Ġrad , Ġrad , Ġrad , Ġrad , Ġrad , Ġrad ) ĊĠĠĠĠĠĠĠ Ġshape . setColor ( this . bgColor ) ĊĠĠĠĠĠĠĠ Ġif Ġ( this . stroke Width Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape . set Stroke ( this . stroke Width , Ġthis . stroke Color ) ĊĊĠĠĠĠĠĠĠ Ġthis . linear Layout . background Ġ= Ġshape ĊĠĠĠĠĠĠĠ Ġthis . linear Layout . set Padding ( this . m Padding Start , Ġthis . m Padding Top , Ġthis . m Padding End , Ġthis . m Padding Bottom ) ĊĠĠĠĠĠĠĠ Ġthis . linear Layout . addView ( this . textView ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCard View ĊĠĠĠĠĠĠĠ Ġthis . card View Ġ= ĠCard View ( this . mContext ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . stroke Width Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . card View . set BackgroundColor ( this . bgColor ) ĊĊĠĠĠĠĠĠĠ Ġthis . card View . set Card BackgroundColor ( Color . TRANSP ARENT ) ĊĠĠĠĠĠĠĠ Ġthis . card View . layout Params Ġ= ĠFrame Layout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . m Width Ġ== Ġ- 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFrame Layout . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFrame Layout . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFrame Layout . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġthis . card View . radius Ġ= Ġthis . radius . toFloat () ĊĠĠĠĠĠĠĠ Ġthis . card View . addView ( this . linear Layout ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthis ĊĠĠĠĠĠĠĠ Ġthis . layout Params Ġ= ĠLayout Params ( this . m Width , Ġthis . m Height ) ĊĠĠĠĠĠĠĠ Ġsuper . set Padding ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġthis . addView ( this . card View ) ĊĊĠĠĠĠĠĠĠ Ġset Text End Margin Start () ĊĊĠĠĠĠĠĠĠ Ġthis . is Bu il ded Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset LayoutParams ( params : ĠViewGroup . LayoutParams ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setLayout Params ( params ) ĊĠĠĠĠĠĠĠ Ġthis . m Width Ġ= Ġparams . width ĊĠĠĠĠĠĠĠ Ġthis . m Height Ġ= Ġparams . height ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Bu il ded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġthis . card View . layout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . width Ġ= Ġif Ġ( this . m Width Ġ== Ġ- 2 ) ĠFrame Layout . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠFrame Layout . LayoutParams . MATCH _ PARENT ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . card View . layout Params Ġ= Ġp ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Text End Margin Start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate LayoutParams () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġthis . layout Params ĊĠĠĠĠĠĠĠ Ġp . width Ġ= Ġthis . m Width ĊĠĠĠĠĠĠĠ Ġp . height Ġ= Ġthis . m Height ĊĠĠĠĠĠĠĠ Ġthis . layout Params Ġ= Ġp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Padding ( left : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . linear Layout . set Padding ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Padding Start (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . linear Layout . padding Start ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Padding Top (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . linear Layout . padding Top ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Padding End (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . linear Layout . padding End ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Padding Bottom (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . linear Layout . padding Bottom ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Text End Margin Start () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . text End Margin Start Ġ= Ġthis . padding Start ĊĊĠĠĠĠĠĠĠ Ġthis . textView . measure ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġthis . text End Margin Start Ġ+= Ġthis . textView . margin Start Ġ+ Ġthis . textView . meas ured Width Ġ+ Ġthis . textView . margin End ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Text ( text : ĠString ): ĠAttribute Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . text Ġ= Ġtext ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Bu il ded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . textView . text Ġ= Ġthis . text ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Text Size ( text Size : ĠFloat ): ĠAttribute Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . text Size Ġ= Ġtext Size ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Bu il ded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . textView . setText Size ( Typed Value . COMPLEX _ UNIT _ PX , Ġthis . text Size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset TextColor ( textColor : ĠInt ): ĠAttribute Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . textColor Ġ= ĠtextColor ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Bu il ded ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . textView . setTextColor ( this . textColor ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset TextStyle ( text Style : ĠInt ): ĠAttribute Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . text Style Ġ= Ġtext Style ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Bu il ded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . textView . setType face ( this . textView . type face , Ġthis . text Style ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Stroke Color Based On Text ( stroke Color Based On Text : ĠBoolean ): ĠAttribute Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . stroke Color Based On Text Ġ= Ġstroke Color Based On Text ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Bu il ded Ġ&& Ġthis . stroke Color Based On Text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . stroke Color Ġ= Ġthis . m Colors [ abs ( this . text . hashCode ()) Ġ% Ġthis . m Colors . size ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . stroke Width Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshape Ġ= ĠGradient Drawable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape . shape Ġ= ĠGradient Drawable . RECT ANGLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrad Ġ= Ġthis . radius . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape . corner Rad ii Ġ= Ġfloat ArrayOf ( rad , Ġrad , Ġrad , Ġrad , Ġrad , Ġrad , Ġrad , Ġrad ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape . setColor ( this . bgColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape . set Stroke ( this . stroke Width , Ġthis . stroke Color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . linear Layout . background Ġ= Ġshape ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset TextColor Based On Text ( textColor Based On Text : ĠBoolean ): ĠAttribute Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . textColor Based On Text Ġ= ĠtextColor Based On Text ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Bu il ded Ġ&& Ġthis . textColor Based On Text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . textColor Ġ= Ġthis . m Colors [ abs ( this . text . hashCode ()) Ġ% Ġthis . m Colors . size ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . textView . setTextColor ( this . textColor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Stroke ( width : ĠInt , Ġcolor : ĠInt Ġ= Ġ- 1 ): ĠAttribute Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . stroke Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġif Ġ( color Ġ!= Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . stroke Color Ġ= Ġcolor ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Bu il ded Ġ&& Ġthis . stroke Width Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshape Ġ= ĠGradient Drawable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape . shape Ġ= ĠGradient Drawable . RECT ANGLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrad Ġ= Ġthis . radius . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape . corner Rad ii Ġ= Ġfloat ArrayOf ( rad , Ġrad , Ġrad , Ġrad , Ġrad , Ġrad , Ġrad , Ġrad ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape . setColor ( this . bgColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape . set Stroke ( this . stroke Width , Ġthis . stroke Color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . linear Layout . background Ġ= Ġshape ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Radius ( radius : ĠInt ): ĠAttribute Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . radius Ġ= Ġradius ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Bu il ded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . card View . radius Ġ= Ġthis . radius . toFloat () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . stroke Width Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshape Ġ= ĠGradient Drawable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape . shape Ġ= ĠGradient Drawable . RECT ANGLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrad Ġ= Ġthis . radius . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape . corner Rad ii Ġ= Ġfloat ArrayOf ( rad , Ġrad , Ġrad , Ġrad , Ġrad , Ġrad , Ġrad , Ġrad ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape . setColor ( this . bgColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape . set Stroke ( this . stroke Width , Ġthis . stroke Color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . linear Layout . background Ġ= Ġshape ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Bg Color ( bgColor : ĠInt ): ĠAttribute Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . bgColor Ġ= Ġbg Color ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Bu il ded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshape Ġ= ĠGradient Drawable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape . shape Ġ= ĠGradient Drawable . RECT ANGLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrad Ġ= Ġthis . radius . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape . corner Rad ii Ġ= Ġfloat ArrayOf ( rad , Ġrad , Ġrad , Ġrad , Ġrad , Ġrad , Ġrad , Ġrad ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape . setColor ( this . bgColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . stroke Width Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape . set Stroke ( this . stroke Width , Ġthis . stroke Color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . linear Layout . background Ġ= Ġshape ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Size ( width : ĠInt , Ġheight : ĠInt ): ĠAttribute Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! this . is Bu il ded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdp To Pixels ( dp : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscale Ġ= ĠmContext . resources . display Metrics . density ĊĠĠĠĠĠĠĠ Ġreturn Ġ( dp Ġ* Ġscale Ġ+ Ġ 0 . 5 f ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpixels To Dp ( px : ĠFloat ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscale Ġ= ĠmContext . resources . display Metrics . density ĊĠĠĠĠĠĠĠ Ġreturn Ġ( px Ġ/ Ġscale Ġ+ Ġ 0 . 5 f ). toInt () ĊĠĠĠ Ġ} Ċ Ċ }