package Ġcom . gr inde wal d 1 9 0 0 . sh ere ats . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . view . WindowManager Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . request . target . Custom Target Ċ import Ġcom . bump tech . glide . request . transition . Transition Ċ import Ġcom . gr inde wal d 1 9 0 0 . sh ere ats . R ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby ĠY ee Ġon Ġ 2 0 2 1 - 1 2 - 1 3 . Ċ Ġ* ĠGithub : ĠGr inde wal d 1 9 0 0 Ċ Ġ* ĠEmail : Ġgr inde wal d 1 5 0 4 @ gmail . com Ċ Ġ*/ Ċ class ĠImage Util Ġ{ ĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġconvert Ġdrawable Ġto Ġbitmap ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġdrawable To Bitmap ( drawable : ĠDrawable , Ġimage Matrix : ĠMatrix , Ġwidth : ĠInt , Ġheight : ĠInt ): ĠBitmap { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBitmap . create Bitmap ( width , Ġheight , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġ ĠBitmap . create Bitmap ( width , Ġheight , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image Matrix Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . concat ( image Matrix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdrawable 2 Bitmap ( drawable : ĠDrawable ): ĠBitmap { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġis ĠBitmap Drawable ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ Ġdrawable . bitmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( drawable . intrinsic Width , Ġdrawable . intrinsic Height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . setBounds ( 0 , 0 , canvas . width , Ġcanvas . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . draw ( canvas ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġget Ġwidth Ġof Ġscreen Ġin Ġpixel ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Screen Width ( context : ĠContext ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġcontext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getSystem Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġmanager . default Display ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġdisplay . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwidth ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġget Ġheight Ġof Ġscreen Ġin Ġpixel ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Screen Height ( context : ĠContext ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġcontext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getSystem Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġmanager . default Display ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġdisplay . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġheight ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠConvert Ġdp Ġto Ġpixel ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġdp To Px ( dp : ĠFloat ): ĠFloat { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdensity Ġ= ĠResources . getSystem (). display Metrics . density ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdp * density ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturn Ġa Ġposition ( left , Ġtop , Ġright , Ġbottom ) Ġof Ġa Ġimage Ġwhen Ġaction Ġup . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġx : Ġx Ġposition Ġof Ġthe Ġimage ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġy : Ġy Ġposition Ġof Ġthe Ġimage ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġview Width : Ġwidth Ġof Ġthe Ġimage ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġview Height : Ġheight Ġof Ġthe Ġimage ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmode : ĠMODE _ EDGE - Ġgo Ġto Ġthe Ġnearest Ġedge , ĠMODE _ POINT - Ġgo Ġto Ġa Ġcertain Ġpoint Ġon Ġthe Ġscreen ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Position By Mode ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Width : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Height : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmode : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext ĊĠĠĠĠĠĠĠ Ġ): ĠList < Int >{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġget Screen Width ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġget Screen Height ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBy Ġdefault , Ġgo Ġto Ġthe Ġmiddle Ġof Ġright Ġside . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult : ĠMutable List < Int > Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ- Ġview Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ* Ġ 0 . 5 . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ* Ġ 0 . 5 . toInt () Ġ+ Ġview Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( mode ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstant Util . MODE _ EDGE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġif Ġ( x Ġ> Ġwidth Ġ/ Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ- Ġview Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ- Ġview Height Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+ Ġview Height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( 0 , Ġy Ġ- Ġview Height Ġ/ Ġ 2 , Ġview Width , Ġy Ġ+ Ġview Height Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstant Util . MODE _ POINT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġheight Ġ* Ġ 0 . 6 . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġmutable ListOf ( width Ġ- Ġview Width , Ġtop , Ġwidth , Ġtop Ġ+ Ġview Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġout Ġof Ġbottom Ġbound , Ġgo Ġto Ġbottom . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result [ 3 ] Ġ> Ġheight ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ 3 ] Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ 1 ] Ġ= Ġheight Ġ- Ġview Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturn Ġa Ġcircle Ġbitmap Ġwith Ġgiven Ġsize Ġand Ġresource ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġsource : Ġsource Ġbitmap ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġradius : Ġthe Ġradius Ġof Ġthe Ġcircle ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġsize : Ġthe Ġdiameter Ġof Ġthe Ġcircle ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Circle Image ( source : ĠBitmap , Ġradius : ĠFloat , Ġx : ĠInt , Ġy : ĠInt , Ġsize : ĠInt ): ĠBitmap { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( size , Ġsize , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscaled Source Ġ= ĠBitmap . create Scaled Bitmap ( source , Ġsize , Ġsize , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( radius , Ġradius , Ġradius , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . xfer mode Ġ= ĠPort er D uff X fer mode ( Port er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( scaled Source , Ġ 0 f , Ġ 0 f , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturn Ġthe Ġbadge Ġcolor Ġaccording Ġto Ġits Ġr arity ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Badge Color ( r arity : ĠLong ): ĠInt { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠConstant Util . MAP _ BAD GE _ COLOR [ r arity ] Ġ?: ĠColor . parse Color ("# 0 0 0 0 0 0 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturn Ġa Ġbitmap Ġwith ĠG lide , Ġaccording Ġto Ġthe Ġgiven Ġuri ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Bitmap From G lide ( context : ĠContext , Ġuri : ĠString ): ĠBitmap { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbitmap Ġ= ĠBitmap Factory . decode Resource ( context . resources , ĠR . drawable . img _ portrait ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Bitmap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( object Ġ: ĠCustom Target < Bitmap >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource : ĠBitmap , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition : ĠTransition < in ĠBitmap >? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġresource ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Cle ared ( placeholder : ĠDrawable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġthe Ġimage Ġformat , Ġgiven Ġa Ġimage Ġuri ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠgetImage Format ( uri : ĠUri , Ġcontext : ĠContext ?): ĠString { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtype : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġcontext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor : ĠCursor ? Ġ= Ġcontext . content Resolver . query ( uri , ĠarrayOf ( Media Store . Media Columns . MIME _ TYPE ), Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( null Ġ!= Ġcursor Ġ&& Ġcursor . moveTo Next ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġcursor . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġcursor . column Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġcursor . count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġcursor . getString ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtype ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }