package Ġcom . mo sp oly tech . mo sp oly helper . utils Ċ Ċ import Ġandroid . graphics .* Ċ import Ġandroid . text . style . Line Height Span Ċ import Ġandroid . text . style . Replacement Span Ċ import Ġcom . mo sp oly tech . mo sp oly helper . App Ċ import Ġcom . mo sp oly tech . mo sp oly helper . R Ċ import Ġkotlin . math . round ToInt ĊĊ Ċ class ĠRo unded Background Span ( ĊĠĠĠ Ġprivate Ġval ĠbackgroundColor : ĠInt , ĊĠĠĠ Ġprivate Ġval ĠtextColor : ĠInt ? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġval Ġheight : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġtext : ĠString Ċ ) Ġ: ĠRe placement Span (), ĠLine Height Span Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġrelative Text Size Ġ= Ġ 0 . 7 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġtop Grow th Rate Ġ= Ġ 0 . 2 1 f // 0 . 2 7 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġbottom Grow th Rate Ġ= Ġ 0 . 1 4 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġhorizontal Grow th Rate Ġ= Ġ 1 . 4 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġcorner Radius Percentage Ġ= Ġ 0 . 2 7 5 f Ġ// Ġ 0 . 2 7 5 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġbottom Spacing Ġ= Ġ 1 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert Color To Night ( color : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġh sv Ġ= ĠFloat Array ( 3 ) ĊĠĠĠĠĠĠĠ ĠColor . RGB To H SV ( Color . red ( color ), ĠColor . green ( color ), ĠColor . blue ( color ), Ġh sv ) ĊĠĠĠĠĠĠĠ Ġh sv [ 2 ] Ġ= Ġh sv [ 2 ] Ġ* Ġ 0 . 4 f ĊĠĠĠĠĠĠĠ Ġh sv [ 1 ] Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġreturn ĠColor . H SV To Color ( h sv ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw ( ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġtext : ĠCharSequence , ĊĠĠĠĠĠĠĠ Ġstart : ĠInt , ĊĠĠĠĠĠĠĠ Ġend : ĠInt , ĊĠĠĠĠĠĠĠ Ġx : ĠFloat , ĊĠĠĠĠĠĠĠ Ġtop Of Line : ĠInt , ĊĠĠĠĠĠĠĠ Ġbaseline : ĠInt , ĊĠĠĠĠĠĠĠ Ġbottom Of Line : ĠInt , ĊĠĠĠĠĠĠĠ Ġpaint : ĠPaint ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġthis . text . length ĊĊĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint ( paint ) ĊĠĠĠĠĠĠĠ Ġpaint . text Size Ġ= Ġheight Ġ* Ġrelative Text Size ĊĠĠĠĠĠĠĠ Ġval Ġtotal Height Ġ= Ġbottom Of Line Ġ- Ġtop Of Line ĊĊĠĠĠĠĠĠĠ Ġval Ġtext Height Ġ= Ġ- paint . as cent () ĊĠĠĠĠĠĠĠ Ġ// text Height Ġ+= Ġpaint . desc ent () ĊĊĠĠĠĠĠĠĠ Ġval Ġtext Width Ġ= Ġpaint . measure Text ( this . text . toString (), Ġstart , Ġend ) ĊĊĠĠĠĠĠĠĠ Ġval Ġhorizontal Padding Ġ= Ġpaint . desc ent () Ġ* Ġ 2 Ġ* Ġhorizontal Grow th Rate ĊĊĠĠĠĠĠĠĠ Ġvar Ġdelta Ġ= Ġ Ġbaseline Ġ- Ġtext Height Ġ- Ġtop Of Line ĊĠĠĠĠĠĠĠ Ġdelta Ġ/= Ġ 3 f ĊĊĠĠĠĠĠĠĠ Ġval Ġbaseline Ġ= Ġbaseline Ġ- Ġdelta ĊĠĠĠĠĠĠĠ Ġval Ġbottom Of Line Ġ= Ġbottom Of Line Ġ- Ġdelta ĊĊĠĠĠĠĠĠĠ Ġval Ġtop Add Ġ= Ġtotal Height Ġ* Ġtop Grow th Rate Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġval Ġbottom Add Ġ= Ġtotal Height Ġ* Ġbottom Grow th Rate Ġ/ Ġ 2 f ĊĊĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect F ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbaseline Ġ- Ġtext Height Ġ- Ġtop Add , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+ Ġtext Width Ġ+ Ġhorizontal Padding Ġ* Ġ 2 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Of Line Ġ+ Ġbottom Add ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcorner Radius Ġ= Ġrect . height () Ġ* Ġcorner Radius Percentage ĊĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= ĠbackgroundColor ĊĠĠĠĠĠĠĠ Ġcanvas . draw Round Rect ( rect , Ġcorner Radius , Ġcorner Radius , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= ĠtextColor Ġ?: Ġ 0 xffffffff . toInt () ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Text ( this . text , Ġstart , Ġend , Ġx Ġ+ Ġhorizontal Padding , Ġbaseline , Ġpaint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Size ( ĊĠĠĠĠĠĠĠ Ġpaint : ĠPaint , ĊĠĠĠĠĠĠĠ Ġtext : ĠCharSequence , ĊĠĠĠĠĠĠĠ Ġstart : ĠInt , ĊĠĠĠĠĠĠĠ Ġend : ĠInt , ĊĠĠĠĠĠĠĠ Ġfm : ĠPaint . Font Metrics Int ? ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint ( paint ) ĊĠĠĠĠĠĠĠ Ġpaint . text Size Ġ= Ġheight Ġ* Ġrelative Text Size ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġthis . text . length ĊĠĠĠĠĠĠĠ Ġval Ġhorizontal Padding Ġ= Ġpaint . desc ent () Ġ* Ġ 2 Ġ* Ġhorizontal Grow th Rate ĊĠĠĠĠĠĠĠ Ġreturn Ġ( paint . measure Text ( this . text , Ġstart , Ġend ) Ġ+ Ġhorizontal Padding Ġ* Ġ 2 ). round ToInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġchoose Height ( ĊĠĠĠĠĠĠĠ Ġtext : ĠCharSequence ?, ĊĠĠĠĠĠĠĠ Ġstart : ĠInt , ĊĠĠĠĠĠĠĠ Ġend : ĠInt , ĊĠĠĠĠĠĠĠ Ġspan start v : ĠInt , ĊĠĠĠĠĠĠĠ Ġline Height : ĠInt , ĊĠĠĠĠĠĠĠ Ġfm : ĠPaint . Font Metrics Int ? ĊĠĠĠ Ġ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( fm Ġ== Ġnull ) Ġreturn Ċ // ĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint () Ċ // ĠĠĠĠĠĠĠ Ġpaint . text Size Ġ= Ġheight . toFloat () Ċ // ĠĠĠĠĠĠĠ Ġval Ġnew Fm Ġ= Ġpaint . font Metrics Int Ċ // ĠĠĠĠĠĠĠ Ġfm . desc ent Ġ= Ġnew Fm . desc ent Ċ // ĠĠĠĠĠĠĠ Ġfm . bottom Ġ= Ġnew Fm . bottom Ċ // ĠĠĠĠĠĠĠ Ġfm . as cent Ġ= Ġnew Fm . as cent Ċ // ĠĠĠĠĠĠĠ Ġfm . leading Ġ= Ġ- 1 0 // new Fm . leading Ċ // ĠĠĠĠĠĠĠ Ġfm . top Ġ= Ġnew Fm . top ĊĊ Ċ // ĠĠĠĠĠĠĠ Ġval Ġorigin Height Ġ= Ġfm . desc ent Ġ- Ġfm . as cent Ċ // ĠĠĠĠĠĠĠ Ġ// ĠIf Ġoriginal Ġheight Ġis Ġnot Ġpositive , Ġdo Ġnothing . Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( origin Height Ġ<= Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġheight Ġ* Ġ 1 . 0 f Ġ/ Ġorigin Height Ċ // ĠĠĠĠĠĠĠ Ġfm . desc ent Ġ= Ġ( fm . desc ent Ġ* Ġratio ). round ToInt () Ċ // ĠĠĠĠĠĠĠ Ġfm . as cent Ġ= Ġfm . desc ent Ġ- Ġheight ĊĠĠĠ Ġ} Ċ }