package Ġcom . f isma . tr inity . util Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . net . Uri Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġandroid . provider . Media Store Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Log ĊĊ Ċ class ĠImage Util Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġfun Ġrender Drawable To Bitmap ( d : ĠDrawable ?, Ġbitmap : ĠBitmap ?, Ġx : ĠInt , Ġy : ĠInt , Ġw : ĠInt , Ġh : ĠInt , Ġalpha : ĠInt Ġ= Ġ 2 5 5 ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( bitmap Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠCanvas ( bitmap ) ĊĠĠĠĠĠĠĠ Ġval Ġold Bounds Ġ= Ġd !!. copy Bounds () ĊĠĠĠĠĠĠĠ Ġvar Ġold Alpha Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 1 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġold Alpha Ġ= Ġd . alpha ĊĠĠĠĠĠĠĠĠĠ Ġd . alpha Ġ= Ġalpha ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġd . setBounds ( x , Ġy , Ġx Ġ+ Ġw , Ġy Ġ+ Ġh ) ĊĊĠĠĠĠĠĠĠ Ġd . draw ( c ) ĊĠĠĠĠĠĠĠ Ġd . bounds Ġ= Ġold Bounds Ġ// ĠRestore Ġthe Ġbounds ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 1 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġd . alpha Ġ= Ġold Alpha ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġc . set Bitmap ( null ) ĊĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcrop Image ( bitmap : ĠBitmap , Ġrect : ĠRect ): ĠBitmap Ġ{ ĊĠĠĠĠĠ Ġval Ġresult Ġ= ĠBitmap . create Bitmap ( rect . right Ġ- Ġrect . left , Ġrect . bottom Ġ- Ġrect . top , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( result ) ĊĊĠĠĠĠĠ Ġval Ġtop Ġ= Ġif Ġ( rect . top Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ-( bitmap . height Ġ- Ġrect . top ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ 0 ĊĠĠĠĠĠ Ġval Ġleft Ġ= Ġif Ġ( rect . left Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ-( bitmap . width Ġ- Ġrect . left ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ 0 ĊĊĠĠĠĠĠ Ġcanvas . draw Bitmap ( bitmap , Ġleft . toFloat (), Ġtop . toFloat (), Ġnull ) ĊĠĠĠĠĠ Ġcanvas . set Bitmap ( null ) ĊĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgray scale Image ( bitmap : ĠBitmap ): ĠBitmap Ġ{ ĊĠĠĠĠĠ Ġval Ġresult Ġ= ĠBitmap . create Bitmap ( bitmap . width , Ġbitmap . height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĊĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( result ) ĊĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint () ĊĊĠĠĠĠĠ Ġval Ġcm Ġ= ĠColor Matrix () ĊĠĠĠĠĠ Ġcm . set Sat uration ( 0 f ) ĊĠĠĠĠĠ Ġpaint . color Filter Ġ= ĠColor Matrix Color Filter ( cm ) ĊĠĠĠĠĠ Ġcanvas . draw Bitmap ( bitmap , Ġ 0 f , Ġ 0 f , Ġpaint ) ĊĠĠĠĠĠ Ġcanvas . set Bitmap ( null ) ĊĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw Border ( bitmap : ĠBitmap , Ġsize : ĠFloat , Ġcolor : ĠInt , Ġalpha : ĠInt Ġ= Ġ 2 5 5 , Ġpadding : ĠRect ? Ġ= Ġnull ): ĠBitmap Ġ{ ĊĠĠĠĠĠ Ġval Ġwidth Ġ= Ġbitmap . width . toFloat () ĊĠĠĠĠĠ Ġval Ġheight Ġ= Ġbitmap . height . toFloat () ĊĠĠĠĠĠ Ġval Ġnew Bitmap Ġ= ĠBitmap . create Bitmap ( bitmap ) ĊĠĠĠĠĠ Ġval Ġc Ġ= ĠCanvas ( new Bitmap ) ĊĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint () ĊĠĠĠĠĠ Ġpaint . stroke Width Ġ= Ġsize ĊĠĠĠĠĠ Ġpaint . color Ġ= Ġcolor ĊĠĠĠĠĠ Ġpaint . alpha Ġ= Ġalpha ĊĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . ST RO KE ĊĊĠĠĠĠĠ Ġvar Ġleft Ġ= Ġ 0 f ĊĠĠĠĠĠ Ġvar Ġtop Ġ= Ġ 0 f ĊĠĠĠĠĠ Ġvar Ġright Ġ= Ġwidth ĊĠĠĠĠĠ Ġvar Ġbottom Ġ= Ġheight ĊĊĠĠĠĠĠ Ġif Ġ( padding Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġleft Ġ= Ġpadding . left . toFloat () ĊĠĠĠĠĠĠĠ Ġtop Ġ= Ġpadding . top . toFloat () ĊĠĠĠĠĠĠĠ Ġright Ġ= Ġwidth Ġ- Ġpadding . right ĊĠĠĠĠĠĠĠ Ġbottom Ġ= Ġheight Ġ- Ġpadding . bottom ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġc . draw Rect ( left , Ġtop , Ġright , Ġbottom , Ġpaint ) ĊĠĠĠĠĠ Ġc . draw Bitmap ( new Bitmap , Ġ 0 f , Ġ 0 f , Ġnull ) ĊĊĠĠĠĠĠ Ġc . set Bitmap ( null ) ĊĊĠĠĠĠĠ Ġreturn Ġnew Bitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Padding ( bitmap : ĠBitmap , Ġpadding X : ĠFloat , Ġpadding Y : ĠFloat ): ĠBitmap Ġ{ ĊĠĠĠĠĠ Ġval Ġoutput image Ġ= ĠBitmap . create Bitmap ( bitmap . width Ġ+ Ġ( padding X . toInt () Ġ/ Ġ 2 ), Ġbitmap . height Ġ+ Ġ( padding Y . toInt () Ġ/ Ġ 2 ), ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠ Ġval Ġcan Ġ= ĠCanvas ( output image ) ĊĠĠĠĠĠ Ġcan . draw Color ( Color . TRANSP ARENT ) Ġ// This Ġrepresents ĠWhite Ġcolor ĊĠĠĠĠĠ Ġcan . draw Bitmap ( bitmap , Ġpadding X Ġ/ Ġ 2 , Ġpadding Y Ġ/ Ġ 2 , Ġnull ) ĊĠĠĠĠĠ Ġreturn Ġoutput image ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresize Image ( res : ĠResources , Ġdrawable : ĠDrawable , Ġwidth : ĠInt , Ġheight : ĠInt ): ĠDrawable Ġ{ ĊĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( width , Ġheight , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠ Ġval Ġc Ġ= ĠCanvas ( bitmap ) ĊĠĠĠĠĠ Ġval Ġold Bounds Ġ= Ġdrawable . copy Bounds () ĊĠĠĠĠĠ Ġdrawable . setBounds ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĠĠĠĠĠ Ġdrawable . draw ( c ) ĊĠĠĠĠĠ Ġdrawable . bounds Ġ= Ġold Bounds ĊĠĠĠĠĠ Ġc . set Bitmap ( null ) ĊĠĠĠĠĠ Ġreturn ĠBitmap Drawable ( res , Ġbitmap ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresize Image ( res : ĠResources , Ġbitmap : ĠBitmap , Ġwidth : ĠInt , Ġheight : ĠInt ): ĠBitmap Ġ{ ĊĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠBitmap Drawable ( res , Ġbitmap ) ĊĠĠĠĠĠ Ġval Ġnew Bitmap Ġ= ĠBitmap . create Bitmap ( width , Ġheight , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠ Ġval Ġc Ġ= ĠCanvas ( new Bitmap ) ĊĠĠĠĠĠ Ġval Ġold Bounds Ġ= Ġdrawable . copy Bounds () ĊĠĠĠĠĠ Ġdrawable . setBounds ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĠĠĠĠĠ Ġdrawable . draw ( c ) ĊĠĠĠĠĠ Ġdrawable . bounds Ġ= Ġold Bounds ĊĠĠĠĠĠ Ġc . set Bitmap ( null ) ĊĠĠĠĠĠ Ġreturn Ġnew Bitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetImage Uri ( in Context : ĠContext , Ġin Image : ĠBitmap , Ġtitle : ĠString , Ġdescription : ĠString ? Ġ= Ġnull ): ĠUri Ġ{ ĊĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠ Ġin Image . compress ( Bitmap . Compress Format . JPEG , Ġ 1 0 0 , Ġbytes ) ĊĠĠĠĠĠ Ġval Ġpath Ġ= ĠMedia Store . Images . Media . insert Image ( in Context . content Resolver , Ġin Image , Ġtitle , Ġdescription ) ĊĠĠĠĠĠ Ġreturn ĠUri . parse ( path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdrawable To Bitmap ( drawable : ĠDrawable ?): ĠBitmap ? Ġ{ ĊĠĠĠĠĠ Ġif Ġ( drawable Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ( drawable Ġis ĠBitmap Drawable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Drawable Ġ= Ġdrawable Ġas ĠBitmap Drawable ? ĊĠĠĠĠĠĠĠ Ġif Ġ( bitmap Drawable !!. bitmap Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġbitmap Drawable . bitmap ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġbitmap : ĠBitmap ĊĠĠĠĠĠ Ġif Ġ( drawable . intrinsic Width Ġ<= Ġ 0 Ġ|| Ġdrawable . intrinsic Height Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsingle Ġcolor Ġbitmap Ġwill Ġbe Ġcreated ĊĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap . create Bitmap ( 1 , Ġ 1 , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ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 , Ġdrawable . intrinsic Width , Ġdrawable . intrinsic Height ) ĊĠĠĠĠĠ Ġdrawable . draw ( canvas ) ĊĊĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Margins ( bmp : ĠBitmap , Ġcolor : ĠInt ): ĠBitmap Ġ{ ĊĠĠĠĠĠ Ġvar ĠM Top Ġ= Ġ 0 ĊĠĠĠĠĠ Ġvar ĠM Bot Ġ= Ġ 0 ĊĠĠĠĠĠ Ġvar ĠM Left Ġ= Ġ 0 ĊĠĠĠĠĠ Ġvar ĠM Right Ġ= Ġ 0 ĊĠĠĠĠĠ Ġvar Ġfound Ġ= Ġfalse ĊĊĠĠĠĠĠ Ġval Ġbmp In Ġ= ĠInt Array ( bmp . width Ġ* Ġbmp . height ) ĊĠĠĠĠĠ Ġval Ġbmp Int Ġ= ĠArray ( bmp . width ) Ġ{ ĠInt Array ( bmp . height ) Ġ} ĊĊĠĠĠĠĠ Ġbmp . get Pixels ( bmp In , Ġ 0 , Ġbmp . width , Ġ 0 , Ġ 0 , Ġbmp . width , ĊĠĠĠĠĠĠĠ Ġbmp . height ) ĊĊĠĠĠĠĠ Ġvar Ġii Ġ= Ġ 0 ĊĠĠĠĠĠ Ġvar Ġcont X Ġ= Ġ 0 ĊĠĠĠĠĠ Ġvar Ġcont Y Ġ= Ġ 0 ĊĠĠĠĠĠ Ġwhile Ġ( ii Ġ< Ġbmp In . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbmp Int [ cont X ][ cont Y ] Ġ= Ġbmp In [ ii ] ĊĠĠĠĠĠĠĠ Ġcont X ++ ĊĠĠĠĠĠĠĠ Ġif Ġ( cont X Ġ>= Ġbmp . width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcont X Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠ Ġcont Y ++ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( cont Y Ġ>= Ġbmp . height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġii ++ ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġh P Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( h P Ġ< Ġbmp Int [ 0 ]. size Ġ&& Ġ! found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġlooking Ġfor ĠM Top ĊĠĠĠĠĠĠĠĠĠ Ġvar Ġw P Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( w P Ġ< Ġbmp Int . size Ġ&& Ġ! found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bmp Int [ w P ][ h P ] Ġ!= Ġcolor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM Top Ġ= Ġh P ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġw P ++ ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġh P ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġfound Ġ= Ġfalse ĊĊĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġh P Ġ= Ġbmp Int [ 0 ]. size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( h P Ġ>= Ġ 0 Ġ&& Ġ! found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġlooking Ġfor ĠM Bot ĊĠĠĠĠĠĠĠĠĠ Ġvar Ġw P Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( w P Ġ< Ġbmp Int . size Ġ&& Ġ! found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bmp Int [ w P ][ h P ] Ġ!= Ġcolor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM Bot Ġ= Ġbmp . height Ġ- Ġh P ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġw P ++ ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġh P -- ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġfound Ġ= Ġfalse ĊĊĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġw P Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( w P Ġ< Ġbmp Int . size Ġ&& Ġ! found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġlooking Ġfor ĠM Left ĊĠĠĠĠĠĠĠĠĠ Ġvar Ġh P Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( h P Ġ< Ġbmp Int [ 0 ]. size Ġ&& Ġ! found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bmp Int [ w P ][ h P ] Ġ!= Ġcolor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM Left Ġ= Ġw P ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġh P ++ ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġw P ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġfound Ġ= Ġfalse ĊĊĠĠĠĠĠ Ġvar Ġw P Ġ= Ġbmp Int . size Ġ- Ġ 1 ĊĠĠĠĠĠ Ġwhile Ġ( w P Ġ>= Ġ 0 Ġ&& Ġ! found ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġlooking Ġfor ĠM Right ĊĠĠĠĠĠĠĠ Ġvar Ġh P Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( h P Ġ< Ġbmp Int [ 0 ]. size Ġ&& Ġ! found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( bmp Int [ w P ][ h P ] Ġ!= Ġcolor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM Right Ġ= Ġbmp . width Ġ- Ġw P ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġh P ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġw P -- ĊĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġfound Ġ= Ġfalse ĊĊĠĠĠĠĠ Ġval Ġsize Y Ġ= Ġbmp . height Ġ- ĠM Bot Ġ- ĠM Top ĊĠĠĠĠĠ Ġval Ġsize X Ġ= Ġ( bmp . width ĊĠĠĠĠĠĠĠ Ġ- ĠM Right Ġ- ĠM Left ) ĊĊĠĠĠĠĠ Ġreturn ĠBitmap . create Bitmap ( bmp , ĠM Left , ĠM Top , Ġsize X , Ġsize Y ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġget Icon ( context : ĠContext , Ġfilename : ĠString ): ĠDrawable ? Ġ{ ĊĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap Factory . decode File ( context . files Dir . toString () Ġ+ Ġ"/ icons /" Ġ+ Ġfilename Ġ+ Ġ". png ") ĊĠĠĠĠĠ Ġreturn Ġif Ġ( bitmap Ġ!= Ġnull ) ĠBitmap Drawable ( context . resources , Ġbitmap ) Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Icon ( context : ĠContext , Ġicon : ĠBitmap , Ġfilename : ĠString ) Ġ{ ĊĠĠĠĠĠ Ġval Ġdirectory Ġ= ĠFile ( context . files Dir . toString () Ġ+ Ġ"/ icons /") ĊĠĠĠĠĠ Ġif Ġ(! directory . exists ()) Ġdirectory . mkdir () ĊĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( directory . path Ġ+ Ġfilename Ġ+ Ġ". png ") ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġfile . createNew File () ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠFileOutputStream ( file ) ĊĠĠĠĠĠĠĠ Ġicon . compress ( Bitmap . Compress Format . PNG , Ġ 1 0 0 , Ġout ) ĊĠĠĠĠĠĠĠ Ġout . close () ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Icon ( context : ĠContext , Ġfilename : ĠString ) Ġ{ ĊĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( context . files Dir . toString () Ġ+ Ġ"/ icons /" Ġ+ Ġfilename Ġ+ Ġ". png ") ĊĠĠĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfile . delete () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }