package Ġres on ance . http . http downloader . implement ations Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġandroid . provider . Open able Columns Ċ import Ġres on ance . http . http downloader . core . KB Ċ import Ġres on ance . http . http downloader . core . get Ċ import Ġres on ance . http . http downloader . core . log Ċ import Ġres on ance . http . http downloader . core . name To Comparable Long Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . OutputStream Ċ import Ġjava . nio . channels . File Channel Ċ Ċ class ĠUri File ( private Ġval Ġcontext : ĠContext , Ġuri Str : ĠString ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Uri File " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ( uri Str ) Ġ?: Ġthrow ĠRuntimeException (" Invalid Ġuri : Ġ$ uri Str ") ĊĠĠĠ Ġvar Ġsize : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġlateinit Ġvar Ġname : ĠString ĊĊĠĠĠ Ġ@ Suppress Lint (" Re cycle ") ĊĠĠĠ Ġfun Ġget Latest Size (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . content Resolver . query ( uri , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull ) Ġreturn @ also ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Index : ĠInt Ġ= Ġit . getColumnIndex ( Open able Columns . SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġif Ġ(! it . isNull ( size Index )) Ġit . getString ( size Index ). to Long () Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsize ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfile Channel : ĠFile Channel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdescr Ġ= Ġcontext . content Resolver . open FileDescriptor ( uri , Ġ" rw ") ĊĠĠĠĠĠĠĠ Ġif Ġ( descr Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( descr . file Descriptor ). channel ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġthrow ĠRuntimeException (" Can 't Ġopen Ġfile Ġdescriptor ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinitialize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Re cycle ") ĊĠĠĠ Ġprivate Ġfun Ġinitialize () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . content Resolver . query ( uri , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" unknown " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ also ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġit . getString ( it . getColumnIndex ( Open able Columns . DISPLAY _ NAME )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Index : ĠInt Ġ= Ġit . getColumnIndex ( Open able Columns . SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġif Ġ(! it . isNull ( size Index )) Ġit . getString ( size Index ). to Long () Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġre Initialize () Ġ= Ġinitialize () ĊĊĠĠĠ Ġfun Ġget InputStream (): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . content Resolver . open InputStream ( uri ) !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget OutputStream ( append : ĠBoolean ): ĠOutputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= Ġif Ġ( append ) Ġ" wa " Ġelse Ġ" w " ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . content Resolver . open OutputStream ( uri , Ġmode ) !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġreads Ġfirst ĠN Ġbytes Ġof Ġthis Ġfile ĊĠĠĠĠ Ġ* Ġ@ param ĠN Ġ= Ġmax Ġamount Ġof Ġbytes Ġto Ġbe Ġread ĊĠĠĠĠ Ġ* Ġ@ return Ġfirst ĠN Ġbytes Ġof Ġthe Ġfile Ġif Ġfile Ġsize Ġ>= Ġ` size ` ĊĠĠĠĠ Ġ* Ġ@ return Ġfull Ġfile Ġas ĠbyteArray , Ġif Ġfile Ġsize Ġ< Ġ 5 0 KB ĊĠĠĠĠ Ġ* Ġ@ return Ġblank ĠbyteArray Ġin Ġcase Ġof Ġerror ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġread N Bytes ( N : ĠInt Ġ= Ġ 5 0 . KB ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġip Ġ= Ġcontext . content Resolver . open InputStream ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĠByteArray ( 0 ). also Ġ{ Ġlog ( TAG , Ġ" Null ĠinputStream Ġfor Ġuri : Ġ$ uri ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb fr Ġ= ĠByteArray ( N ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlast Read Ġ= Ġip . read ( b fr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Read Ġ== Ġ- 1 ) Ġreturn ĠByteArray ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtotal Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( total Ġ< ĠN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ+= Ġlast Read ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Read Ġ= Ġip . read ( b fr , Ġtotal , ĠN Ġ- Ġtotal ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Read Ġ== Ġ- 1 ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb fr [ 0 Ġto Ġtotal ]. also Ġ{ Ġlog ( TAG , Ġ" Read Ġ${ it . size } Ġbytes ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( TAG , Ġ" Exception : Ġ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠByteArray ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Uri File : Ġ$ name ; Ġsize =$ size " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Comparable () Ġ= Ġname To Comparable Long ( name ) Ċ }