package Ġme . th anel . quick image . uploader Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . net . Uri Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroid . widget . Toast Ċ import Ġme . th anel . quick image . R Ċ import Ġme . th anel . quick image . db . upload history . Upload History Table Ċ import Ġme . th anel . quick image . extensions .* Ċ import Ġme . th anel . quick image . settings . Settings Fragment Ċ import Ġokhttp 3 . MediaType Ċ import Ġokhttp 3 . RequestBody Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . mos hi . M oshi Converter Factory Ċ import Ġjava . io . File Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ /** Ċ Ġ* ĠBase Ġclass Ġfor Ġimage Ġupload ers . Ċ Ġ*/ Ċ abstract Ġclass ĠImage Uploader < Response Model >( context : ĠContext ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcontext Reference Ġ= ĠWeak Reference ( context ) ĊĊĠĠĠ Ġprivate Ġvar Ġnotification Id Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠAPI Ġbase ĠURL . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġval ĠbaseUrl : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġan ĠRet rofit Ġ[ Call ] Ġobject Ġwhich Ġwill Ġbe Ġused Ġto Ġperform Ġimage Ġupload Ġrequest . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun ĠRet rofit . on Execute ( image : ĠRequest Body ): ĠCall < Response Model > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandle Ġthe Ġresponse Ġfrom Ġthe ĠAPI Ġendpoint . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġlink Ġto Ġthe Ġuploaded Ġimage , Ġor Ġnull Ġif Ġupload Ġfailed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġon Response ( response : ĠResponse Model ): ĠString ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpload Ġthe Ġimage Ġto Ġthe Ġserver . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfile Uri Ġthe Ġuri Ġof Ġthe Ġimage Ġfile Ġto Ġupload . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupload Image ( file Uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġnotification Id ĊĠĠĠĠĠĠĠ Ġnotification Id Ġ+= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext Reference . get () ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ== Ġnull Ġ|| Ġ! context . isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Failure ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= ĠDocument Helper . getPath ( context , Ġfile Uri ) ĊĠĠĠĠĠĠĠ Ġif Ġ( filePath . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Failure ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext . create Up loading Notification ( id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( filePath ) ĊĠĠĠĠĠĠĠ Ġval Ġretrofit Ġ= ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( baseUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( M oshi Converter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠRequest Body . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMediaType . parse ( context . content Resolver . getType ( file Uri )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcall Ġ= ĠUpload Call ( this , Ġid , Ġfile . absolute Path ) ĊĠĠĠĠĠĠĠ Ġretrofit . on Execute ( image ). enqueue ( call ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnotify Success ( id : ĠInt , Ġlink : ĠString , ĠfilePath : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext Reference . get ()?. let Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshow Notification Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . getBoolean ( Settings Fragment . KEY _ PRE F _ SUCCESS _ NOTIFICATION , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Notification ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠBitmap Factory . Options (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Preferred Config Ġ= ĠBitmap . Config . ARGB _ 8 8 8 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠBitmap Factory . decode File ( filePath , Ġoptions ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . create Uploaded Notification ( id , Ġlink , Ġimage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . hide Upload Notification ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preferences . getBoolean ( Settings Fragment . KEY _ PRE F _ AUT OM AT IC _ COPY , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . copy Text To Clipboard (" Image Ġlink ", Ġlink ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , ĠR . string . copied _ link , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpload History Table . save Link ( context , Ġlink ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnotify Failure ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext Reference . get ()?. create Failed Upload Notification ( id ) ĊĠĠĠ Ġ} Ċ } Ċ