package Ġkk . hu ining . fav cats . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . net . Uri Ċ import Ġandroid . provider . Open able Columns Ċ import Ġandroid . webkit . MimeType Map Ċ import Ġokhttp 3 . MediaType Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType OrNull Ċ import Ġjava . io .* ĊĊ Ċ fun Ġget ContentType ( context : ĠContext , Ġuri : ĠUri ): ĠMediaType ? Ġ{ ĊĠĠĠ Ġvar ĠcontentType Ġ: ĠMediaType ? ĊĠĠĠ ĠcontentType Ġ= Ġcontext . content Resolver . getType ( uri )?. to MediaType OrNull () ĊĠĠĠ Ġif Ġ( contentType Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= ĠMime TypeMap . getFile Extension From Url ( uri . toString ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( extension Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠMime TypeMap . get Singleton (). get MimeType From Extension ( extension ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= Ġtype ?. to MediaType OrNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠBelow Ġrequires ĠAPI Ġ 2 6 ĊĠĠĠĠĠĠĠ Ġ// val Ġpath Ġ= Ġfile From Content Uri ( require Context (), Ġuri ). to Path () ĊĠĠĠĠĠĠĠ Ġ// contentType Ġ= ĠFiles . probe ContentType ( path ). to MediaType OrNull () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠcontentType Ċ } Ċ Ċ fun Ġfile From Content Uri ( context : ĠContext , Ġcontent Uri : ĠUri ): ĠFile Ġ{ ĊĠĠĠ Ġ// ĠPre paring ĠTemp Ġfile Ġname ĊĠĠĠ Ġval Ġfile Extension Ġ= ĠgetFile Extension ( context , Ġcontent Uri ) ĊĠĠĠ Ġval ĠfileName Ġ= Ġ" temp _ file " Ġ+ Ġif Ġ( file Extension Ġ!= Ġnull ) Ġ".$ file Extension " Ġelse Ġ"" ĊĠĠĠ Ġ// ĠCreating ĠTemp Ġfile ĊĠĠĠ Ġval Ġtemp File Ġ= ĠFile ( context . cacheDir , ĠfileName ) ĊĠĠĠ Ġtemp File . createNew File () ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠFileOutputStream ( temp File ) ĊĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġcontext . content Resolver . open InputStream ( content Uri ) ĊĠĠĠĠĠĠĠ ĠinputStream ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( inputStream , ĠoutputStream ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠoutputStream . flush () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtemp File Ċ } Ċ Ċ private Ġfun ĠgetFile Extension ( context : ĠContext , Ġuri : ĠUri ): ĠString ? Ġ{ ĊĠĠĠ Ġval ĠfileType : ĠString ? Ġ= Ġcontext . content Resolver . getType ( uri ) ĊĠĠĠ Ġreturn ĠMime TypeMap . get Singleton (). getExtension From MimeType ( fileType ) Ċ } Ċ Ċ @ Throws ( IOException :: class ) Ċ private Ġfun Ġcopy ( source : ĠInputStream , Ġtarget : ĠOutputStream ) Ġ{ ĊĠĠĠ Ġval Ġbuf Ġ= ĠByteArray ( 8 1 9 2 ) ĊĠĠĠ Ġvar Ġlength : ĠInt ĊĠĠĠ Ġwhile Ġ( source . read ( buf ). also Ġ{ Ġlength Ġ= Ġit Ġ} Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtarget . write ( buf , Ġ 0 , Ġlength ) ĊĠĠĠ Ġ} Ċ } ĊĊ