package Ġco il . decode Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġandroidx . core . graphics . component 1 Ċ import Ġandroidx . core . graphics . component 2 Ċ import Ġandroidx . core . graphics . component 3 Ċ import Ġandroidx . core . graphics . component 4 Ċ import Ġco il . bitmap . Bitmap Pool Ċ import Ġco il . size . Original Size Ċ import Ġco il . size . Scale Ċ import Ġco il . size . Size Ċ import Ġco il . util . height Ċ import Ġco il . util . to Software Ċ import Ġco il . util . width Ċ Ċ internal Ġclass ĠDrawable Decoder Service ( private Ġval Ġbitmap Pool : ĠBitmap Pool ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConvert Ġthe Ġprovided Ġ[ Drawable ] Ġinto Ġa Ġ[ Bitmap ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdrawable ĠThe Ġdrawable Ġto Ġconvert . ĊĠĠĠĠ Ġ* Ġ@ param Ġsize ĠThe Ġrequested Ġsize Ġfor Ġthe Ġbitmap . ĊĠĠĠĠ Ġ* Ġ@ param Ġconfig ĠThe Ġrequested Ġconfig Ġfor Ġthe Ġbitmap . ĊĠĠĠĠ Ġ* Ġ@ param Ġallow In exact Size ĠAllow Ġreturning Ġa Ġbitmap Ġthat Ġdoesn 't Ġmatch Ġthe Ġrequested Ġsize Ġexactly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġconvert ( ĊĠĠĠĠĠĠĠ Ġdrawable : ĠDrawable , ĊĠĠĠĠĠĠĠ Ġconfig : ĠBitmap . Config , ĊĠĠĠĠĠĠĠ Ġsize : ĠSize , ĊĠĠĠĠĠĠĠ Ġscale : ĠScale , ĊĠĠĠĠĠĠĠ Ġallow In exact Size : ĠBoolean ĊĠĠĠ Ġ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠFast Ġpath : Ġreturn Ġthe Ġunderlying Ġbitmap . ĊĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġis ĠBitmap Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġdrawable . bitmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Config Valid ( bitmap , Ġconfig ) Ġ&& Ġis Size Valid ( allow In exact Size , Ġsize , Ġbitmap , Ġscale )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠS low Ġpath : Ġdraw Ġthe Ġdrawable Ġon Ġa Ġnew Ġbitmap . ĊĠĠĠĠĠĠĠ Ġval Ġsrc Width Ġ= Ġdrawable . width . let Ġ{ Ġif Ġ( it Ġ> Ġ 0 ) Ġit Ġelse ĠDEFAULT _ SIZE Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsrc Height Ġ= Ġdrawable . height . let Ġ{ Ġif Ġ( it Ġ> Ġ 0 ) Ġit Ġelse ĠDEFAULT _ SIZE Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġ( width , Ġheight ) Ġ= ĠDecode Utils . compute Pixel Size ( src Width , Ġsrc Height , Ġsize , Ġscale ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġbitmap Pool . get ( width , Ġheight , Ġconfig . to Software ()) ĊĠĠĠĠĠĠĠ Ġdrawable . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( old Left , Ġold Top , Ġold Right , Ġold Bottom ) Ġ= Ġdrawable . bounds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( Canvas ( bitmap )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( old Left , Ġold Top , Ġold Right , Ġold Bottom ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Config Valid ( bitmap : ĠBitmap , Ġconfig : ĠBitmap . Config ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap . config Ġ== Ġconfig . to Software () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Size Valid ( allow In exact Size : ĠBoolean , Ġsize : ĠSize , Ġbitmap : ĠBitmap , Ġscale : ĠScale ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġallow In exact Size Ġ|| Ġsize Ġis ĠOriginal Size Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ== ĠDecode Utils . compute Pixel Size ( bitmap . width , Ġbitmap . height , Ġsize , Ġscale ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ SIZE Ġ= Ġ 5 1 2 ĊĠĠĠ Ġ} Ċ } Ċ