package Ġca . log ar itm . de zel . modules . graphic Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . os . AsyncTask Ċ import Ġandroid . util . Log Ċ import Ġca . log ar itm . de zel . core . Property Ċ import Ġca . log ar itm . de zel . core . PropertyType Ċ import Ġca . log ar itm . de zel . extension . base Name Ċ import Ġca . log ar itm . de zel . extension . ceil Ċ import Ġca . log ar itm . de zel . extension . file Ext Ċ import Ġca . log ar itm . de zel . extension . fileName Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . net . URL Ċ Ċ /** Ċ Ġ* Ġ@ class ĠImage Loader Ċ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċ Ġ* Ġ@ hidden Ċ Ġ*/ Ċ open Ġclass ĠImage Loader ( val Ġcontext : ĠContext ) Ġ{ ĊĊ ĉ //-------------------------------------------------------------------------- Ċ ĉ // ĠStatic Ċ ĉ //-------------------------------------------------------------------------- ĊĊ ĉ comp anion Ġobject Ġ{ ĊĊĉ ĉ /** Ċĉĉ Ġ* Ġ@ property Ġassets Ċĉĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉĉ Ġ* Ġ@ hidden Ċĉĉ Ġ*/ Ċĉ ĉ private Ġvar Ġassets : ĠMutable Map < String , ĠArray < String >> Ġ= Ġmutable Map Of () ĊĊĉ ĉ /** Ċĉĉ Ġ* Ġ@ property Ġlive Cache Ċĉĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉĉ Ġ* Ġ@ hidden Ċĉĉ Ġ*/ Ċĉ ĉ private Ġlateinit Ġvar Ġlive Cache : ĠImage Live Cache ĊĊĉ ĉ /** Ċĉĉ Ġ* Ġ@ property Ġdisk Cache Ċĉĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉĉ Ġ* Ġ@ hidden Ċĉĉ Ġ*/ Ċĉ ĉ private Ġlateinit Ġvar Ġdisk Cache : ĠImage Disk Cache ĊĊĉ ĉ /** Ċĉĉ Ġ* Ġ@ method Ġsetup Ċĉĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉĉ Ġ* Ġ@ hidden Ċĉĉ Ġ*/ Ċĉ ĉ public Ġfun Ġsetup ( context : ĠContext ) Ġ{ Ċĉĉ ĉ Image Loader . live Cache Ġ= ĠImage Live Cache ( 1 6 Ġ* Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 ) Ċĉĉ ĉ Image Loader . disk Cache Ġ= ĠImage Disk Cache ( 3 2 Ġ* Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 , Ġcontext ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ //-------------------------------------------------------------------------- Ċ ĉ // ĠProperties Ċ ĉ //-------------------------------------------------------------------------- ĊĊ ĉ /** Ċĉ Ġ* Ġ@ property Ġcallback Ċĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉ Ġ* Ġ@ hidden Ċĉ Ġ*/ Ċ ĉ private Ġvar Ġcallback : Ġ(( image : ĠBitmap ?) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊ ĉ /** Ċĉ Ġ* Ġ@ property Ġdownload Task Ċĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉ Ġ* Ġ@ hidden Ċĉ Ġ*/ Ċ ĉ private Ġvar Ġdownload Task : ĠImage Loader . Download Task ? Ġ= Ġnull ĊĊ ĉ //-------------------------------------------------------------------------- Ċ ĉ // ĠMethods Ċ ĉ //-------------------------------------------------------------------------- ĊĊ ĉ /** Ċĉ Ġ* ĠConvenience Ġmethod Ġto Ġload Ġan Ġimage Ġfrom Ġa ĠProperty Ġobject . Ċĉ Ġ* Ġ@ method Ġload Ċĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉ Ġ*/ Ċ ĉ open Ġfun Ġload ( source : ĠProperty , Ġcallback : Ġ( image : ĠBitmap ?) Ġ-> ĠUnit ) Ġ{ ĊĊĉ ĉ if Ġ( source . type Ġ== ĠProperty Type . NULL ) Ġ{ Ċĉĉ ĉ callback ( null ) Ċĉĉ ĉ return Ċĉ ĉ } ĊĊĉ ĉ if Ġ( source . type Ġ== ĠProperty Type . STRING ) Ġ{ Ċĉĉ ĉ this . load ( source . string , Ġcallback ) Ċĉĉ ĉ return Ċĉ ĉ } ĊĊĉ ĉ if Ġ( source . type Ġ== ĠProperty Type . OBJECT ) Ġ{ Ċĉĉ ĉ val Ġimage Ġ= Ġsource . cast ( Image :: class . java ) Ċĉĉ ĉ if Ġ( image Ġ!= Ġnull ) Ġ{ Ċĉĉĉ ĉ callback ( image . data ) Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠLoads Ġthe Ġimage Ġfrom Ġthe Ġspecified Ġsource . Ċĉ Ġ* Ġ@ method Ġload Ċĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉ Ġ*/ Ċ ĉ open Ġfun Ġload ( source : ĠString , Ġcallback : Ġ( image : ĠBitmap ?) Ġ-> ĠUnit ) Ġ{ ĊĊĉ ĉ this . download Task ?. cancel ( true ) Ċĉ ĉ this . download Task Ġ= Ġnull ĊĊĉ ĉ this . callback Ġ= Ġcallback ĊĊĉ ĉ val Ġsource Ġ= Ġsource . trim () Ċĉ ĉ if Ġ( source Ġ== Ġ"") Ġ{ Ċĉĉ ĉ return Ċĉ ĉ } ĊĊĉ ĉ val Ġimage Ġ= ĠImage Loader . live Cache . get ( source ) Ċĉ ĉ if Ġ( image Ġ!= Ġnull ) Ġ{ Ċĉĉ ĉ this . loaded ( source , Ġimage ) Ċĉĉ ĉ return Ċĉ ĉ } ĊĊĉ ĉ if Ġ( source . startsWith (" http :// ") Ġ|| Ċĉĉ ĉ source . startsWith (" https :// ")) Ġ{ Ċĉĉ ĉ this . load Http Image ( source ) Ċĉĉ ĉ return Ċĉ ĉ } ĊĊĉ ĉ this . load Disk Image ( source ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠLoads Ġthe Ġimage Ġfrom Ġdisk . Ċĉ Ġ* Ġ@ method Ġload Disk Image Ċĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉ Ġ*/ Ċ ĉ open Ġfun Ġload Disk Image ( source : ĠString ) Ġ{ ĊĊĉ ĉ /* Ċĉĉ Ġ* ĠThis Ġdoes Ġnot Ġhandle Ġrelative Ġpath Ġstarting Ġwith Ġ./ Ġvery Ġwell . ĠThis Ġis Ċĉĉ Ġ* Ġa Ġhopefully Ġtemporary Ġhack Ġto Ġremove Ġthe Ġfirst Ġ./ Ġfrom Ġthe Ġbeginning Ċĉĉ Ġ*/ ĊĊĉ ĉ var Ġpath Ġ= Ġsource Ċĉ ĉ if Ġ( path . startsWith ("./ ")) Ġ{ Ċĉĉ ĉ path Ġ= Ġpath . substring ( 2 ) Ċĉ ĉ } ĊĊĉ ĉ val Ġstream Ġ= Ġthis . getImage Stream ( this . context , Ġpath ) Ċĉ ĉ if Ġ( stream Ġ== Ġnull ) Ġ{ Ċĉĉ ĉ this . failed ( path , ĠException (" Unable Ġto Ġload Ġimage Ġstream Ġfor Ġ$ path ")) Ċĉĉ ĉ return Ċĉ ĉ } ĊĊĉ ĉ val Ġdpi Ġ= Ġthis . context . resources . display Metrics . density D pi ĊĊĉ ĉ val Ġoptions Ġ= ĠBitmap Factory . Options () Ċĉ ĉ options . in Density Ġ= Ġstream . scale Ġ* Ġ 1 6 0 Ċĉ ĉ options . in Target Density Ġ= Ġdpi Ċĉ ĉ options . in Screen Density Ġ= Ġdpi ĊĊĉ ĉ val Ġbitmap Ġ= ĠBitmap Factory . decode Stream ( stream , Ġnull , Ġoptions ) Ċĉ ĉ if Ġ( bitmap Ġ== Ġnull ) Ġ{ Ċĉĉ ĉ return Ċĉ ĉ } ĊĊĉ ĉ this . loaded ( source , Ġbitmap ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠLoads Ġthe Ġimage Ġfrom Ġthe Ġnetwork . Ċĉ Ġ* Ġ@ method Ġload Http Image Ċĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉ Ġ*/ Ċ ĉ open Ġfun Ġload Http Image ( source : ĠString ) Ġ{ ĊĊĉ ĉ if Ġ( Image Loader . disk Cache . has ( source )) Ġ{ Ċĉĉ ĉ Image Loader . Get Cache (). execute ( Get Cache Data ( this , Ġsource )) Ċĉĉ ĉ return Ċĉ ĉ } ĊĊĉ ĉ val Ġdownload Task Ġ= ĠDownload Task () Ċĉ ĉ download Task . execute ( Download Task Data ( this , Ġsource )) Ċĉ ĉ this . download Task Ġ= Ġdownload Task Ċ ĉ } ĊĊ ĉ //-------------------------------------------------------------------------- Ċ ĉ // ĠPrivate ĠAPI Ċ ĉ //-------------------------------------------------------------------------- ĊĊ ĉ /** Ċĉ Ġ* Ġ@ method Ġloaded Ċĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉ Ġ* Ġ@ hidden Ċĉ Ġ*/ Ċ ĉ private Ġfun Ġloaded ( source : ĠString , Ġimage : ĠBitmap ) Ġ{ Ċĉ ĉ Image Loader . Set Cache (). execute ( Set Cache Data ( this , Ġsource , Ġimage )) Ċĉ ĉ this . callback ?. invoke ( image ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ġ@ method Ġfailed Ċĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉ Ġ* Ġ@ hidden Ċĉ Ġ*/ Ċ ĉ protected Ġfun Ġfailed ( source : ĠString , Ġerror : ĠException ) Ġ{ Ċĉ ĉ Log . d (" De zel ", Ġ" Image Ġfailed : Ġ$ source ") Ċĉ ĉ this . callback ?. invoke ( null ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ġ@ method ĠgetImage Stream Ċĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉ Ġ* Ġ@ hidden Ċĉ Ġ*/ Ċ ĉ private Ġfun ĠgetImage Stream ( context : Ġandroid . content . Context , Ġfile : ĠString ): ĠImage Loader . Image Stream ? Ġ{ ĊĊĉ ĉ val Ġdir Ġ= Ġfile . base Name ĊĊĉ ĉ var Ġfiles Ġ= Ġassets [ dir ] Ċĉ ĉ if Ġ( files Ġ== Ġnull ) Ġ{ Ċĉĉ ĉ files Ġ= Ġcontext . assets . list ( dir ) Ċĉĉ ĉ assets [ dir ] Ġ= Ġfiles Ċĉ ĉ } ĊĊĉ ĉ if Ġ( files Ġ== Ġnull ) Ġ{ Ċĉĉ ĉ return Ġnull Ċĉ ĉ } ĊĊĉ ĉ val Ġdensity Ġ= Ġcontext . resources . display Metrics . density . ceil (). toInt () ĊĊĉ ĉ var Ġimage Ġ= Ġthis . getImage Path ( file , Ġdensity , Ġfiles ) Ċĉ ĉ var Ġscale Ġ= Ġdensity ĊĊĉ ĉ if Ġ( image Ġ== Ġnull ) Ġ{ Ċĉĉ ĉ image Ġ= Ġthis . getImage Path ( file , Ġ 4 , Ġfiles ) Ċĉĉ ĉ scale Ġ= Ġ 4 Ċĉ ĉ } ĊĊĉ ĉ if Ġ( image Ġ== Ġnull ) Ġ{ Ċĉĉ ĉ image Ġ= Ġthis . getImage Path ( file , Ġ 3 , Ġfiles ) Ċĉĉ ĉ scale Ġ= Ġ 3 Ċĉ ĉ } ĊĊĉ ĉ if Ġ( image Ġ== Ġnull ) Ġ{ Ċĉĉ ĉ image Ġ= Ġthis . getImage Path ( file , Ġ 2 , Ġfiles ) Ċĉĉ ĉ scale Ġ= Ġ 2 Ċĉ ĉ } ĊĊĉ ĉ if Ġ( image Ġ== Ġnull ) Ġ{ Ċĉĉ ĉ image Ġ= Ġthis . getImage Path ( file , Ġ 1 , Ġfiles ) Ċĉĉ ĉ scale Ġ= Ġ 1 Ċĉ ĉ } ĊĊĉ ĉ if Ġ( image Ġ== Ġnull ) Ġ{ Ċĉĉ ĉ image Ġ= Ġfile Ċĉĉ ĉ scale Ġ= Ġ 1 Ċĉ ĉ } ĊĊĉ ĉ val Ġstream : ĠInputStream ĊĊĉ ĉ try Ġ{ Ċĉĉ ĉ stream Ġ= Ġcontext . assets . open ( image ) Ċĉ ĉ } Ġcatch Ġ( exception : ĠIOException ) Ġ{ Ċĉĉ ĉ return Ġnull Ċĉ ĉ } ĊĊĉ ĉ return ĠImage Loader . Image Stream ( stream , Ġscale ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ġ@ method ĠgetImage Path Ċĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉ Ġ* Ġ@ hidden Ċĉ Ġ*/ Ċ ĉ private Ġfun ĠgetImage Path ( file : ĠString , Ġdensity : ĠInt , Ġfiles : ĠArray < String >): ĠString ? Ġ{ ĊĊĉ ĉ val Ġbase Name Ġ= Ġfile . base Name Ċĉ ĉ val ĠfileName Ġ= Ġfile . fileName Ċĉ ĉ val ĠfileType Ġ= Ġfile . file Ext ĊĊĉ ĉ val Ġimage Ġ= Ġ"$ fileName @ ${ density } x $ fileType " ĊĊĉ ĉ for Ġ( item Ġin Ġfiles ) Ġ{ Ċĉĉ ĉ if Ġ( image Ġ== Ġitem ) Ġ{ Ċĉĉĉ ĉ return Ġ"$ base Name /$ image " Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ return Ġnull Ċ ĉ } ĊĊĊ ĉ //---------------------------------------------------------------- --------- Ċ ĉ // ĠClasses Ċ ĉ //---------------------------------------------------------------- --------- ĊĊ ĉ /** Ċĉ Ġ* Ġ@ class ĠImage Stream Ċĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉ Ġ* Ġ@ hidden Ċĉ Ġ*/ Ċ ĉ private Ġclass ĠImage Stream ( val Ġstream : ĠInputStream , Ġval Ġscale : ĠInt ) Ġ: ĠInputStream () Ġ{ ĊĊĉ ĉ /** Ċĉĉ Ġ* Ġ@ method Ġread Ċĉĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉĉ Ġ* Ġ@ hidden Ċĉĉ Ġ*/ Ċĉ ĉ @ Throws ( IOException :: class ) Ċĉ ĉ override Ġfun Ġread (): ĠInt Ġ{ Ċĉĉ ĉ return Ġthis . stream . read () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ġ@ class ĠDownload Task Ċĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉ Ġ* Ġ@ hidden Ċĉ Ġ*/ Ċ ĉ private Ġclass ĠDownload Task Ġ: ĠAsync Task < Download Task Data , ĠVoid , ĠBitmap ?> () Ġ{ ĊĊĉ ĉ /** Ċĉĉ Ġ* Ġ@ property Ġresource Ċĉĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉĉ Ġ* Ġ@ hidden Ċĉĉ Ġ*/ Ċĉ ĉ private Ġlateinit Ġvar Ġdata : ĠDownload Task Data ĊĊĉ ĉ /** Ċĉĉ Ġ* Ġ@ property Ġerror Ċĉĉ Ġ* Ġ@ since Ġ 0 . 4 . 0 Ċĉĉ Ġ* Ġ@ hidden Ċĉĉ Ġ*/ Ċĉ ĉ private Ġvar Ġerror : ĠException ? Ġ= Ġnull ĊĊĉ ĉ /** Ċĉĉ Ġ* Ġ@ method Ġdo In Background Ċĉĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉĉ Ġ* Ġ@ hidden Ċĉĉ Ġ*/ Ċĉ ĉ override Ġfun Ġdo In Background ( var arg Ġparams : ĠDownload Task Data ): ĠBitmap ? Ġ{ ĊĊĉĉ ĉ this . data Ġ= Ġparams [ 0 ] ĊĊĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ return ĠBitmap Factory . decode Stream ( URL ( this . data . source ). open Stream ()) Ċĉĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉĉĉ ĉ this . error Ġ= Ġe Ċĉĉ ĉ } ĊĊĉĉ ĉ return Ġnull Ċĉ ĉ } ĊĊĉ ĉ /** Ċĉĉ Ġ* Ġ@ method Ġon Post Execute Ċĉĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉĉ Ġ* Ġ@ hidden Ċĉĉ Ġ*/ Ċĉ ĉ override Ġfun Ġon Post Execute ( bitmap : ĠBitmap ?) Ġ{ ĊĊĉĉ ĉ if Ġ( this . is Cancelled ) Ġ{ Ċĉĉĉ ĉ return Ċĉĉ ĉ } ĊĊĉĉ ĉ if Ġ( bitmap Ġ== Ġnull ) Ġ{ ĊĊĉĉĉ ĉ val Ġerror Ġ= Ġthis . error Ċĉĉĉ ĉ if Ġ( error Ġ!= Ġnull ) Ġ{ Ċĉĉĉĉ ĉ this . data . loader . failed ( this . data . source , Ġerror ) Ċĉĉĉ ĉ } ĊĊĉĉĉ ĉ return Ċĉĉ ĉ } ĊĊĉĉ ĉ Set Cache (). execute ( Set Cache Data ( this . data . loader , Ġthis . data . source , Ġbitmap )) ĊĊĉĉ ĉ this . data . loader . loaded ( this . data . source , Ġbitmap ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ġ@ class ĠGet Cache Ċĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉ Ġ* Ġ@ hidden Ċĉ Ġ*/ Ċ ĉ private Ġclass ĠGet Cache Ġ: ĠAsync Task < Get Cache Data , ĠVoid , ĠBitmap ?> () Ġ{ ĊĊĉ ĉ /** Ċĉĉ Ġ* Ġ@ property Ġresource Ċĉĉ Ġ* Ġ@ since Ġ 0 . 4 . 0 Ċĉĉ Ġ* Ġ@ hidden Ċĉĉ Ġ*/ Ċĉ ĉ private Ġlateinit Ġvar Ġdata : ĠGet Cache Data ĊĊĉ ĉ /** Ċĉĉ Ġ* Ġ@ method Ġdo In Background Ċĉĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉĉ Ġ* Ġ@ hidden Ċĉĉ Ġ*/ Ċĉ ĉ override Ġfun Ġdo In Background ( var arg Ġparams : ĠGet Cache Data ): ĠBitmap ? Ġ{ Ċĉĉ ĉ this . data Ġ= Ġparams [ 0 ] Ċĉĉ ĉ return ĠImage Loader . disk Cache . get ( this . data . source ) Ċĉ ĉ } ĊĊĉ ĉ /** Ċĉĉ Ġ* Ġ@ method Ġon Post Execute Ċĉĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉĉ Ġ* Ġ@ hidden Ċĉĉ Ġ*/ Ċĉ ĉ override Ġfun Ġon Post Execute ( bitmap : ĠBitmap ?) Ġ{ Ċĉĉ ĉ if Ġ( bitmap Ġ!= Ġnull ) Ġthis . data . loader . loaded ( this . data . source , Ġbitmap ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ġ@ class ĠSet Cache Ċĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉ Ġ* Ġ@ hidden Ċĉ Ġ*/ Ċ ĉ private Ġclass ĠSet Cache Ġ: ĠAsync Task < Set Cache Data , ĠVoid , ĠUnit >() Ġ{ ĊĊĉ ĉ /** Ċĉĉ Ġ* Ġ@ method Ġdo In Background Ċĉĉ Ġ* Ġ@ since Ġ 0 . 1 . 0 Ċĉĉ Ġ* Ġ@ hidden Ċĉĉ Ġ*/ Ċĉ ĉ override Ġfun Ġdo In Background ( var arg Ġparams : ĠSet Cache Data ) Ġ{ Ċĉĉ ĉ val Ġdata Ġ= Ġparams [ 0 ] Ċĉĉ ĉ Image Loader . live Cache . set ( data . source , Ġdata . image ) Ċĉĉ ĉ Image Loader . disk Cache . set ( data . source , Ġdata . image ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ġ@ class ĠSet Cache Data Ċĉ Ġ* Ġ@ since Ġ 0 . 4 . 0 Ċĉ Ġ* Ġ@ hidden Ċĉ Ġ*/ Ċ ĉ private Ġdata Ġclass ĠSet Cache Data ( val Ġloader : ĠImage Loader , Ġval Ġsource : ĠString , Ġval Ġimage : ĠBitmap ) ĊĊ ĉ /** Ċĉ Ġ* Ġ@ class ĠGet Cache Data Ċĉ Ġ* Ġ@ since Ġ 0 . 4 . 0 Ċĉ Ġ* Ġ@ hidden Ċĉ Ġ*/ Ċ ĉ private Ġdata Ġclass ĠGet Cache Data ( val Ġloader : ĠImage Loader , Ġval Ġsource : ĠString ) ĊĊ ĉ /** Ċĉ Ġ* Ġ@ class ĠDownload Task Data Ċ ĉ * Ġ@ since Ġ 0 . 4 . 0 Ċ ĉ * Ġ@ hidden Ċ ĉ */ Ċ ĉ private Ġdata Ġclass ĠDownload Task Data ( val Ġloader : ĠImage Loader , Ġval Ġsource : ĠString ) Ċ }