package Ġcom . good ay apps . avatar view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . widget . Seek Bar Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . view . children Ċ import Ġco il . Co il Ċ import Ġco il . Image Loader Ċ import Ġco il . decode . Gif Decoder Ċ import Ġco il . decode . Image Decoder Decoder Ċ import Ġco il . decode . Svg Decoder Ċ import Ġco il . load Ċ import Ġco il . request . Cache Policy Ċ import Ġcom . good ay apps . widget . Avatar Drawable Ċ import Ġcom . good ay apps . widget . Avatar View Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) Ċĉ ĉ init Co il ( this ) ĊĊĠĠĠĠĠĠĠ Ġinit Views () Ċ Ċ // ĠĠĠĠĠĠĠ Ġavatar 1 1 1 . load (" https :// media 4 . g iphy . com / media / f 8 hd 7 QP 9 LT 3 1 Rk 2 NG 1 / g iphy . gif ") ĊĠĠĠĠĠĠĠ Ġavatar 1 1 1 . load (" https :// com un itee . b - cdn . net / staging / avatars / users / hl Hk ulp ffff q Qr 3 NW c VK x I 6 Gb SB 3 / 6 5 E 8 0 8 E 7 - 3 0 9 8 - 4 5 CE - B 0 D 6 - E 5 0 B 1 2 9 1 2 7 5 1 _ 1 6 4 0 0 2 7 7 3 8 . jpeg ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġicon Drawable Scale Seek . setOn Seek Bar ChangeListener ( object Ġ: ĠOn Seek Bar ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocess Fl Ġ= Ġprogress Ġ/ Ġ 1 0 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply To Av atars Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . icon Drawable Scale Ġ= Ġprocess Fl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġsize Seek . setOn Seek Bar ChangeListener ( object Ġ: ĠOn Seek Bar ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocess Fl Ġ= Ġprogress Ġ/ Ġ 1 0 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Size Ġ= Ġ( convert Dp To Pixel ( 1 0 0 ) Ġ* Ġprocess Fl ). toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply To Av atars Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . layout Params Ġ= Ġit . layout Params . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġnew Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġnew Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġav Border Width . setOn Seek Bar ChangeListener ( object Ġ: ĠOn Seek Bar ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply To Av atars Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . border Width Ġ= Ġconvert Dp To Pixel ( progress ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġav Text Size Percentage . setOn Seek Bar ChangeListener ( object Ġ: ĠOn Seek Bar ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocess Fl Ġ= Ġprogress Ġ/ Ġ 1 0 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply To Av atars Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . text Size Percentage Ġ= Ġprocess Fl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġav Avatar Margin . setOn Seek Bar ChangeListener ( object Ġ: ĠOn Seek Bar ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply To Av atars Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . avatar Margin Ġ= Ġconvert Dp To Pixel ( progress ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġav Volume tric . setOn Checked ChangeListener Ġ{ Ġ_, Ġchecked Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply To Av atars Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . volume tric Type Ġ= Ġwhen Ġ( checked Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . av Volume tric All Ġ-> ĠAvatar Drawable . Volume tric . ALL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . av Volume tric Drawable Ġ-> ĠAvatar Drawable . Volume tric . DRAW ABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . av Volume tric Placeholder Ġ-> ĠAvatar Drawable . Volume tric . PLACE HOLDER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠAvatar Drawable . Volume tric . NONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġav Border Gradient Angle . setOn Seek Bar ChangeListener ( object Ġ: ĠOn Seek Bar ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply To Av atars Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . border Gradient Angle Ġ= Ġprogress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġar ches Degree Area . setOn Seek Bar ChangeListener ( object Ġ: ĠOn Seek Bar ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply To Av atars Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . ar ches Degree Area Ġ= Ġprogress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġar ches Count . setOn Seek Bar ChangeListener ( object Ġ: ĠOn Seek Bar ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply To Av atars Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . ar ches Count Ġ= Ġprogress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġar ches Angle . setOn Seek Bar ChangeListener ( object Ġ: ĠOn Seek Bar ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply To Av atars Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . ar ches Angle Ġ= Ġprogress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġapply To Av atars ( action : Ġ( Avatar View ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġav atars _ list . children . map NotNull Ġ{ Ġit Ġas ? ĠAvatar View Ġ}. forEach Ġ{ Ġaction . invoke ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert Dp To Pixel ( dp : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= Ġresources . display Metrics ĊĠĠĠĠĠĠĠ Ġreturn Ġdp Ġ* Ġ( metrics . density D pi Ġ/ ĠDisplay Metrics . D ENS ITY _ DEFAULT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Co il ( context : ĠContext ): ĠImage Loader Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠImage Loader . Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. memory Cache Policy ( Cache Policy . ENABLED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cross fade ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. component Registry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Image Decoder Decoder ( context )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Gif Decoder ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Svg Decoder ( context )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġimage Loader Ġ= Ġbuilder . build () ĊĊĠĠĠĠĠĠĠ ĠCo il . setImage Loader ( image Loader ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġimage Loader ĊĠĠĠ Ġ} Ċ Ċ }