package Ġcom . ke vin ch ung . mdi _ drawable Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . graphics . drawable . Gradient Drawable Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . content . res . Resources Compat Ċ Ċ class ĠM di Drawable ( private Ġval Ġcontext : Context ) Ġ{ ĊĊĠĠĠ Ġvar Ġconfig Ġ= ĠM di Drawable Config () ĊĊĠĠĠ Ġconstructor ( context : Context , Ġconfig : M di Drawable Config ): this ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . config Ġ= Ġconfig ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġicon String ( string : ĠString ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . icon String Ġ= Ġstring ĊĠĠĠĠĠĠĠ Ġ// Ġset Ġid Ġas Ġinvalid Ġvalue Ġto Ġprevent Ġget Ġicon Ġstring Ġfrom Ġid ĊĠĠĠĠĠĠĠ Ġconfig . string Id Ġ= Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstring Id ( id : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . string Id Ġ= Ġid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠbackgroundColor ( color : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . backgroundColor Ġ= Ġcolor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġicon Color ( color : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . icon Color Ġ= Ġcolor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsize ( px : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . size Ġ= Ġpx ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsize Dp ( dp : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . size Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( dp * Ġcontext . resources . display Metrics . density D pi / Display Metrics . D ENS ITY _ DEFAULT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġenable Background ( enable : ĠBoolean Ġ= Ġtrue ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . enable Background Ġ= Ġenable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġuse Gradient ( ĊĠĠĠĠĠĠĠ Ġstart Color : Int , ĊĠĠĠĠĠĠĠ Ġend Color : Int , ĊĠĠĠĠĠĠĠ Ġorientation : ĠGradient Drawable . Orientation Ġ= ĠGradient Drawable . Orientation . TOP _ BOTTOM ĊĠĠĠ Ġ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . enable Gradient Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġconfig . gradient Start Color Ġ= Ġstart Color ĊĠĠĠĠĠĠĠ Ġconfig . gradient End Color Ġ= Ġend Color ĊĠĠĠĠĠĠĠ Ġconfig . gradient Orientation Ġ= Ġorientation ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisable Gradient () Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . enable Gradient Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġradius ( radius : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . corner Radius Ġ= Ġradius ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Padding ( padding : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . padding Ġ= Ġpadding ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstroke ( ĊĠĠĠĠĠĠĠ Ġwidth : ĠInt , ĊĠĠĠĠĠĠĠ Ġcolor : ĠInt Ġ= ĠColor . BLACK , ĊĠĠĠĠĠĠĠ Ġlength : ĠFloat Ġ= Ġ 1 0 f , ĊĠĠĠĠĠĠĠ Ġgap : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . stroke Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġconfig . stroke Color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġconfig . stroke Dash Width Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġconfig . stroke Dash Gap Ġ= Ġgap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshadow ( ĊĠĠĠĠĠĠĠ Ġcolor : ĠInt Ġ= ĠColor . TRANSP ARENT , ĊĠĠĠĠĠĠĠ Ġradius : ĠFloat Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠ Ġdx : ĠFloat Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠ Ġdy : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . shadow Color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġconfig . shadow Radius Ġ= Ġradius ĊĠĠĠĠĠĠĠ Ġconfig . shadow Dx Ġ= Ġdx ĊĠĠĠĠĠĠĠ Ġconfig . shadow Dy Ġ= Ġdy ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġdrawable Ġby Ġconfiguration Ġobject ĊĠĠĠĠ Ġ* Ġ@ param Ġstring Id ĠMaterial ĠDesign ĠIcon Ġfont Ġstring Ġresource Ġid ĊĠĠĠĠ Ġ* Ġ@ return ĠDrawable Ġobject ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġcreate ( string Id : ĠInt Ġ= Ġconfig . string Id ): Drawable ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . string Id Ġ= Ġstring Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġmaterial Ġfont ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= ĠTextView ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . setTextColor ( config . icon Color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . type face Ġ= ĠResources Compat . getFont ( it , ĠR . font . mdi ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . text Size Ġ= Ġconfig . size . toFloat ()/ 2 . 8 f ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( config . string Id Ġ!= Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . text Ġ= Ġit . getString ( config . string Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . text Ġ= Ġconfig . icon String ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . gravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . measure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . Measure Spec . make Measure Spec ( config . size + 2 * Ġconfig . padding , ĠView . Measure Spec . EX ACT LY ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . Measure Spec . make Measure Spec ( config . size + 2 * Ġconfig . padding , ĠView . Measure Spec . EX ACT LY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( config . enable Background ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . background Ġ= Ġgenerate Background () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . set Shadow Layer ( config . shadow Radius , Ġconfig . shadow Dx , Ġconfig . shadow Dy , Ġconfig . shadow Color ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . set Padding ( config . padding , Ġconfig . padding , Ġconfig . padding , Ġconfig . padding ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . layout ( 0 , 0 , config . size + 2 * Ġconfig . padding , Ġconfig . size + 2 * Ġconfig . padding ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . invalidate () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . Config . ARGB _ 8 8 8 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBitmap Drawable ( it . resources , Ġbitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" MD ID ", e . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Background (): Gradient Drawable ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdrawable Ġ= ĠGradient Drawable () ĊĊĠĠĠĠĠĠĠ Ġif ( config . enable Gradient ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Ġ= ĠGradient Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . gradient Orientation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( config . gradient Start Color , config . gradient End Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . setColor ( config . backgroundColor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdrawable . corner Radius Ġ= Ġconfig . corner Radius . toFloat () ĊĠĠĠĠĠĠĠ Ġdrawable . set Stroke ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . stroke Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . stroke Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . stroke Dash Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . stroke Dash Gap ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdrawable ĊĠĠĠ Ġ} Ċ }