package Ġcom . son s ation . library . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġcom . son s ation . library . eff et .* Ċ import Ġjava . lang . Number FormatException Ċ Ċ class ĠView Helper ( private Ġval Ġcontext : ĠContext ) Ġ{ ĊĊĠĠĠ Ġvar Ġcanvas : ĠCanvas ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġradius Info : ĠRadius ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġstroke Info : ĠSt roke ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNOT _ SET _ COLOR Ġ= Ġ- 1 0 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠST RO KE _ SH ADOW Ġ= Ġ" stroke " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠF ILL _ SH ADOW Ġ= Ġ" fill " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdp To Px ( dp : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . resources . display Metrics . density Ġ* Ġdp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Canvas ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . canvas Ġ= Ġcanvas ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw Effect ( effect : ĠEffect ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( canvas Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġupdate Offset ( effect ) ĊĠĠĠĠĠĠĠ Ġeffect . update Path ( radius Info ) ĊĠĠĠĠĠĠĠ Ġeffect . draw Effect ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Offset ( effect : ĠEffect ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( effect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠShadow Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( effect . is Background Shadow ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdx Ġ= Ġeffect . get Shadow Offset X () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdy Ġ= Ġeffect . get Shadow Offset Y () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeffect . update Offset ( dx , Ġdy , Ġcanvas !!. width Ġ+ Ġdx , Ġcanvas !!. height Ġ+ Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdx Ġ= Ġeffect . get Shadow Offset X () Ġ+ Ġeffect . get Shadow Blur Size () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdy Ġ= Ġeffect . get Shadow Offset Y () Ġ+ Ġeffect . get Shadow Blur Size () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġif Ġ( dx Ġ== Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas !!. width . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas !!. width . toFloat () Ġ- Ġdx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġif Ġ( dy Ġ== Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas !!. height . toFloat () Ġ- Ġdy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas !!. height . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeffect . update Offset ( dx , Ġdy , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBackground Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeffect . update Offset ( 0 f , Ġ 0 f , Ġcanvas !!. width . toFloat (), Ġcanvas !!. height . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGradient Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeffect . update Offset ( 0 f , Ġ 0 f , Ġcanvas !!. width . toFloat (), Ġcanvas !!. height . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeffect . update Paint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Shadow Array ( is Background : ĠBoolean , Ġarrays : ĠString ?): ĠList < Shadow >? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( arrays . isNull OrEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Shadow >() ĊĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġarrays . split (" }, "). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext . replace ("{ ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext . replace (" }", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext . trim () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( split . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġsplit . map Ġ{ Ġit . trim () Ġ} ĊĊĠĠĠĠĠĠĠ Ġsplit . forEach Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit Array Ġ= Ġit . split (",") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( split Array . size Ġ!= Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġblur Size : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoffset X : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoffset Y : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcolor : ĠInt ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblur Size Ġ= Ġdp To Px ( split Array [ 0 ]. toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset X Ġ= Ġdp To Px ( split Array [ 1 ]. toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Y Ġ= Ġdp To Px ( split Array [ 2 ]. toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . parse Color ( split Array [ 3 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblur Size Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset X Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshadow Ġ= ĠShadow (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit ( is Background , Ġblur Size , Ġoffset X , Ġoffset Y , Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( shadow ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} Ċ }