package Ġyet . util . img loader Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . net . Uri Ċ import Ġandroid . widget . ImageView Ċ import Ġyet . ui . res . B mp Ċ import Ġyet . ui . res . round S qu re Ċ import Ġyet . util . fore Ċ import Ġjava . io . File Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġent ao yang @ 1 6 3 . com Ġon Ġ 2 0 1 6 - 1 1 - 0 2 . Ċ Ġ*/ Ċ Ċ object ĠImg Loader Ġ{ Ċ ĉ var Ġcache Ġ= ĠBitmap L ru Cache () ĊĊ ĉ object ĠLocal Ġ{ Ċĉ ĉ fun Ġremove ( url : ĠString ) Ġ{ Ċĉĉ ĉ file ( url )?. delete () Ċĉ ĉ } ĊĊĉ ĉ fun Ġexists ( url : ĠString ): ĠBoolean Ġ{ Ċĉĉ ĉ return Ġfile ( url )?. exists () Ġ?: Ġfalse Ċĉ ĉ } ĊĊĉ ĉ fun Ġfile ( url : ĠString ): ĠFile ? Ġ{ Ċĉĉ ĉ return ĠFile Downloader . find Local ( url ) Ċĉ ĉ } ĊĊĉ ĉ fun Ġbitmap ( url : ĠString , Ġconfig : ĠB mp Config ): ĠBitmap ? Ġ{ Ċĉĉ ĉ val Ġfile Ġ= Ġfile ( url ) Ġ?: Ġreturn Ġnull Ċĉĉ ĉ if Ġ( file . exists ()) Ġ{ Ċĉĉĉ ĉ val Ġbmp Ġ= ĠB mp . file ( file , Ġconfig . max Edge , Ġconfig . qu ility ) Ġ?: Ġreturn Ġnull Ċĉĉĉ ĉ if Ġ( config . corner Ġ> Ġ 0 ) Ġ{ Ċĉĉĉĉ ĉ return Ġbmp . round S qu re ( config . corner ) Ċĉĉĉ ĉ } else Ġ{ Ċĉĉĉĉ ĉ return Ġbmp Ċĉĉĉ ĉ } ĊĊĉĉ ĉ } Ċĉĉ ĉ return Ġnull Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ private Ġfun Ġremove Cache ( url : ĠString , Ġconfig : ĠB mp Config ) Ġ{ Ċĉ ĉ val Ġkey Ġ= Ġurl Ġ+ Ġconfig . toString () Ċĉ ĉ cache . remove ( key ) Ċ ĉ } ĊĊ ĉ fun Ġfind Cache ( url : ĠString , Ġconfig : ĠB mp Config ): ĠBitmap ? Ġ{ Ċĉ ĉ val Ġkey Ġ= Ġurl Ġ+ Ġconfig . toString () Ċĉ ĉ var Ġbmp : ĠBitmap ? Ġ= Ġcache . get ( key ) Ċĉ ĉ if Ġ( bmp Ġ!= Ġnull ) Ġ{ Ċĉĉ ĉ return Ġbmp Ċĉ ĉ } Ċĉ ĉ bmp Ġ= ĠLocal . bitmap ( url , Ġconfig ) Ċĉ ĉ if Ġ( bmp Ġ!= Ġnull ) Ġ{ Ċĉĉ ĉ if Ġ( config . max Edge Ġ<= ĠĠ 8 0 0 ) Ġ{ Ċĉĉĉ ĉ cache . put ( key , Ġbmp ) Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ return Ġbmp Ċ ĉ } ĊĊ ĉ fun Ġret rive ( url : ĠString , Ġblock : Ġ( File ?) Ġ-> ĠUnit ) Ġ{ Ċĉ ĉ File Downloader . ret rive ( url , Ġblock ) Ċ ĉ } ĊĊ ĉ fun Ġbitmap ( url : ĠString , Ġconfig : ĠB mp Config , Ġblock : Ġ( Bitmap ?) Ġ-> ĠUnit ) Ġ{ Ċĉ ĉ val Ġb Ġ= Ġfind Cache ( url , Ġconfig ) Ċĉ ĉ if Ġ( b Ġ!= Ġnull ) Ġ{ Ċĉĉ ĉ if Ġ( config . force Download ) Ġ{ Ċĉĉĉ ĉ File Downloader . download ( url ) Ġ{ Ċĉĉĉĉ ĉ remove Cache ( url , Ġconfig ) Ċĉĉĉĉ ĉ block ( find Cache ( url , Ġconfig )) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ block ( b ) Ċĉĉ ĉ } Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ File Downloader . ret rive ( url ) Ġ{ Ċĉĉĉ ĉ block ( find Cache ( url , Ġconfig )) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊ ĉ } ĊĊ ĉ fun Ġdisplay Uri ( imageView : ĠImageView , Ġuri : ĠUri ?, Ġblock : ĠB mp Config . () Ġ-> ĠUnit ) Ġ{ Ċĉ ĉ val Ġc Ġ= ĠB mp Config () Ċĉ ĉ c . block () Ċĉ ĉ display Uri ( imageView , Ġuri , Ġc ) Ċ ĉ } ĊĊ ĉ fun Ġdisplay Uri ( imageView : ĠImageView , Ġuri : ĠUri ?, Ġconfig : ĠB mp Config ) Ġ{ Ċĉ ĉ if Ġ( uri Ġ== Ġnull ) Ġ{ Ċĉĉ ĉ imageView . setImage Resource ( config . failed Res Id ) Ċĉĉ ĉ return Ċĉ ĉ } Ċĉ ĉ val Ġkey Ġ= Ġuri . toString () Ġ+ Ġconfig . toString () Ċĉ ĉ var Ġbmp Cache : ĠBitmap ? Ġ= Ġcache . get ( key ) Ċĉ ĉ var Ġbmp Ġ= Ġbmp Cache Ġ?: ĠB mp . uri ( uri , Ġconfig . max Edge , Ġconfig . qu ility ) Ċĉ ĉ if Ġ( bmp Ġ!= Ġnull ) Ġ{ Ċĉĉ ĉ imageView . setImage Bitmap ( bmp ) Ċĉĉ ĉ if Ġ( bmp Cache Ġ== Ġnull Ġ&& Ġconfig . max Edge Ġ<= ĠĠ 8 0 0 ) Ġ{ Ċĉĉĉ ĉ cache . put ( key , Ġbmp ) Ċĉĉ ĉ } Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ imageView . setImage Resource ( config . failed Res Id ) Ċĉ ĉ } Ċ ĉ } ĊĊĊ ĉ fun Ġdisplay ( imageView : ĠImageView , Ġurl : ĠString , Ġconfig : ĠB mp Config ) Ġ{ Ċĉ ĉ if Ġ(! Local . exists ( url )) Ġ{ Ċĉĉ ĉ if Ġ( config . default Res Id Ġ!= Ġ 0 ) Ġ{ Ċĉĉĉ ĉ imageView . setImage Resource ( config . default Res Id ) Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ val Ġweek View Ġ= ĠWeak Reference < ImageView >( imageView ) Ċĉ ĉ bitmap ( url , Ġconfig ) Ġ{ Ċĉĉ ĉ fore Ġ{ Ċĉĉĉ ĉ if Ġ( it Ġ!= Ġnull ) Ġ{ Ċĉĉĉĉ ĉ week View . get ()?. setImage Bitmap ( it ) Ċĉĉĉ ĉ } Ġelse Ġif Ġ( config . failed Res Id Ġ!= Ġ 0 ) Ġ{ Ċĉĉĉĉ ĉ week View . get ()?. setImage Resource ( config . failed Res Id ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġdisplay ( imageView : ĠImageView , Ġurl : ĠString , Ġblock : ĠB mp Config . () Ġ-> ĠUnit ) Ġ{ Ċĉ ĉ val Ġc Ġ= ĠB mp Config () Ċĉ ĉ c . block () Ċĉ ĉ display ( imageView , Ġurl , Ġc ) Ċ ĉ } ĊĊ ĉ fun Ġdisplay Small ( imageView : ĠImageView , Ġurl : ĠString ) Ġ{ Ċĉ ĉ display ( imageView , Ġurl ) Ġ{ Ċĉĉ ĉ small 6 4 () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġdisplay Mid ( imageView : ĠImageView , Ġurl : ĠString ) Ġ{ Ċĉ ĉ display ( imageView , Ġurl ) Ġ{ Ċĉĉ ĉ mid 1 2 8 () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġdisplay Big ( imageView : ĠImageView , Ġurl : ĠString ) Ġ{ Ċĉ ĉ display ( imageView , Ġurl ) Ġ{ Ċĉĉ ĉ big 2 5 6 () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġdisplay Large ( imageView : ĠImageView , Ġurl : ĠString ) Ġ{ Ċĉ ĉ display ( imageView , Ġurl ) Ġ{ Ċĉĉ ĉ large 4 8 0 () Ċĉ ĉ } Ċ ĉ } ĊĊ Ċ }