/* Ċ Ġ* ĠLicensed Ġunder ĠApache - 2 . 0 Ċ Ġ* Ċ Ġ* ĠDesign ed Ġand Ġdeveloped Ġby ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ċ Ġ*/ Ċ package Ġcom . af ol le st ad . icon request . remote Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build . MAN U FACT UR ER Ċ import Ġandroid . os . Build . MODEL Ċ import Ġandroid . os . Build . PRODUCT Ċ import Ġandroid . os . Build . VERSION . RELEASE Ċ import Ġcom . af ol le st ad . icon request . App Model Ċ import Ġcom . af ol le st ad . icon request . Ar ct ic Config Ċ import Ġcom . af ol le st ad . icon request . Ar ct ic Request Ċ import Ġcom . af ol le st ad . icon request . R . string Ċ import Ġcom . af ol le st ad . icon request . Send Interactor Ċ import Ġcom . af ol le st ad . icon request . Uri Transformer Ċ import Ġcom . af ol le st ad . icon request . extensions . date Format Ċ import Ġcom . af ol le st ad . icon request . extensions . delete Re levant Children Ċ import Ġcom . af ol le st ad . icon request . extensions . drawable Name Ċ import Ġcom . af ol le st ad . icon request . extensions . log Ċ import Ġcom . af ol le st ad . icon request . extensions . os Version Name Ċ import Ġcom . af ol le st ad . icon request . extensions . to Bitmap Ċ import Ġcom . af ol le st ad . icon request . extensions . to Html Ċ import Ġcom . af ol le st ad . icon request . extensions . to Uri Ċ import Ġcom . af ol le st ad . icon request . extensions . write All Ċ import Ġcom . af ol le st ad . icon request . extensions . write Icon To Ċ import Ġcom . af ol le st ad . icon request . extensions . zip Into Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġio . reactivex . Observable Ċ import Ġokhttp 3 . MediaType Ċ import Ġokhttp 3 . Multipart Body Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . RequestBody Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . adapter . rx java 2 . Rx Java 2 Call Adapter Factory Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ import Ġjava . io . File Ċ import Ġjava . util . Date Ċ Ċ /** Ġ@ author ĠA id an ĠFol le st ad Ġ( af ol le st ad ) Ġ*/ Ċ internal Ġclass ĠReal Send Interactor ( private Ġval Ġcontext : ĠContext ) Ġ: ĠSend Interactor Ġ{ ĊĊĠ Ġoverride Ġfun Ġsend ( ĊĠĠĠ Ġselected Apps : ĠList < App Model >, ĊĠĠĠ Ġrequest : ĠAr ct ic Request ĊĠ Ġ): ĠObservable < Boolean > Ġ{ ĊĠĠĠ Ġval Ġconfig Ġ= Ġrequest . config ĊĠĠĠ Ġ" Pre paring Ġyour Ġrequest Ġto Ġperform Send ... ". log ( ĊĠĠĠĠĠĠĠ ĠTAG ĊĠĠĠ Ġ) ĊĠĠĠ Ġif Ġ( selected Apps . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠObservable . error ( Exception (" No Ġapps Ġwere Ġselected Ġto Ġperform Send .")) ĊĠĠĠ Ġ} Ġelse Ġif Ġ( config . email Recipient . isNull OrEmpty () Ġ&& Ġconfig . apiKey . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠObservable . error ( ĊĠĠĠĠĠĠĠĠĠ ĠException (" You Ġmust Ġeither Ġspecify Ġa Ġrecipient Ġemail Ġor Ġa Ġrequest Ġmanager ĠAPI Ġkey .") ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcache Folder Ġ= Ġconfig . actual Cache Folder ( context ) ĊĠĠĠ Ġif Ġ(! cache Folder . exists () Ġ&& Ġ! cache Folder . mkdir s ()) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠObservable . error ( ĊĠĠĠĠĠĠĠĠĠ ĠException (" Unable Ġto Ġfind Ġor Ġcreate Ġcache Ġfolder : Ġ${ cache Folder . absolute Path }") ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfiles To Zip Ġ= Ġmutable ListOf < File >() ĊĠĠĠ Ġval Ġis Remote Ġ= Ġ! config . apiKey . isNull OrEmpty () ĊĊĠĠĠ Ġ// ĠSave Ġapp Ġicons ĊĠĠĠ Ġ" Saving Ġicons ... ". log ( TAG ) ĊĊĠĠĠ Ġfor Ġ( app Ġin Ġselected Apps ) Ġ{ ĊĠĠĠĠĠ Ġval Ġdrawable Ġ= Ġapp . get Icon ( context ) ĊĠĠĠĠĠ Ġif Ġ( drawable Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Got Ġa Ġnull ĠDrawable Ġfor Ġ${ app . code }". log ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTAG ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġicon Ġ= Ġdrawable . to Bitmap () ĊĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( cache Folder , Ġ"${ app . pkg }. png ") ĊĠĠĠĠĠ Ġfiles To Zip . add ( file ) ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġicon . write Icon To ( file ) ĊĠĠĠĠĠĠĠ Ġ" Saved Ġicon : Ġ${ file . absolute Path }". log ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTAG ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . error ( Exception (" Failed Ġto Ġsave Ġan Ġicon : Ġ" Ġ+ Ġe . message , Ġe )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCreate Ġapp filter ĊĠĠĠ Ġ" Creating Ġapp filter ... ". log ( TAG ) ĊĊĠĠĠ Ġvar Ġxml Sb : ĠStringBuilder ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġjson Sb : ĠStringBuilder ? Ġ= Ġnull ĊĠĠĠ Ġif Ġ(! is Remote ) Ġ{ ĊĠĠĠĠĠ Ġxml Sb Ġ= ĠStringBuilder ( ĊĠĠĠĠĠĠĠĠĠ Ġ"< resources >\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ< icon back Ġimg 1 =\" icon back \" Ġ/>\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ< icon mask Ġimg 1 =\" icon mask \" Ġ/>\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ< icon upon Ġimg 1 =\" icon upon \" Ġ/>\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ< scale Ġfactor =\" 1 . 0 \" Ġ/> " ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġjson Sb Ġ= ĠStringBuilder (" {\ n ĠĠĠ Ġ\" components \": Ġ[ ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġfor Ġ(( index , Ġapp ) Ġin Ġselected Apps . with Index ()) Ġ{ ĊĠĠĠĠĠ Ġval Ġname Ġ= Ġapp . name ĊĠĠĠĠĠ Ġval Ġdrawable Name Ġ= Ġname . drawable Name () ĊĠĠĠĠĠ Ġif Ġ( xml Sb Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġxml Sb . append ("\ n \ n ĠĠĠ Ġ<!-- Ġ") ĊĠĠĠĠĠĠĠ Ġxml Sb . append ( name ) ĊĠĠĠĠĠĠĠ Ġxml Sb . append (" Ġ--> \ n ") ĊĠĠĠĠĠĠĠ Ġxml Sb . append ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ< item \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġcomponent =\" Component Info { ${ app . code }} \"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġdrawable =\" $ drawable Name \" Ġ/> " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( json Sb Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ> Ġ 0 ) Ġjson Sb . append (",") ĊĠĠĠĠĠĠĠ Ġjson Sb . append ("\ n ĠĠĠĠĠĠĠ Ġ{\ n ") ĊĠĠĠĠĠĠĠ Ġjson Sb . append (" ĠĠĠĠĠĠĠĠĠĠĠ Ġ\" name \": Ġ\"$ name \",\ n ") ĊĠĠĠĠĠĠĠ Ġjson Sb . append (" ĠĠĠĠĠĠĠĠĠĠĠ Ġ\" pkg \": Ġ\" ${ app . pkg }\ ",\ n ") ĊĠĠĠĠĠĠĠ Ġjson Sb . append (" ĠĠĠĠĠĠĠĠĠĠĠ Ġ\" component Info \": Ġ\" ${ app . code }\ ",\ n ") ĊĠĠĠĠĠĠĠ Ġjson Sb . append (" ĠĠĠĠĠĠĠĠĠĠĠ Ġ\" drawable \": Ġ\"$ drawable Name \"\ n ") ĊĠĠĠĠĠĠĠ Ġjson Sb . append (" ĠĠĠĠĠĠĠ Ġ} ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ" Added Ġ${ app . code } Ġto Ġthe Ġnew Ġgenerated Ġapp filter Ġfile ... ". log ( ĊĠĠĠĠĠĠĠĠĠ ĠTAG ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( xml Sb Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġxml Sb . append ("\ n \ n </ resources >") ĊĠĠĠĠĠ Ġval Ġnew App Filter Ġ= ĠFile ( cache Folder , Ġ" app filter . xml ") ĊĠĠĠĠĠ Ġfiles To Zip . add ( new App Filter ) ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġxml Sb . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. write All ( new App Filter ) ĊĠĠĠĠĠĠĠ Ġ" Generated Ġapp filter Ġsaved Ġto Ġ${ new App Filter . absolute Path }". log ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTAG ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . error ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠException (" Failed Ġto Ġwrite Ġyour Ġrequest Ġapp filter . xml Ġfile : Ġ${ e . message }", Ġe ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( json Sb Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġjson Sb . append ("\ n ĠĠĠ Ġ] \ n }") ĊĠĠĠĠĠ Ġif Ġ(! is Remote ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew App Filter Ġ= ĠFile ( cache Folder , Ġ" app filter . json ") ĊĠĠĠĠĠĠĠ Ġfiles To Zip . add ( new App Filter ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġjson Sb . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. write All ( new App Filter ) ĊĠĠĠĠĠĠĠĠĠ Ġ" Generated Ġapp filter ĠJSON Ġsaved Ġto : Ġ${ new App Filter . absolute Path }". log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĠObservable . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠException (" Failed Ġto Ġwrite Ġyour Ġrequest Ġapp filter . json Ġfile : Ġ${ e . message }", Ġe ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( files To Zip . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠObservable . error ( Exception (" There Ġare Ġno ĠPNG Ġfiles Ġto Ġput Ġinto Ġthe ĠZIP Ġarchive .")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠZip Ġeverything Ġinto Ġan Ġarchive ĊĠĠĠ Ġ" Creating ĠZIP ... ". log ( TAG ) ĊĊĠĠĠ Ġval Ġzip File Ġ= ĠFile ( cache Folder , Ġ" Icon Request -${ Date (). date Format ()}. zip ") ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġfiles To Zip . zip Into ( zip File ) ĊĠĠĠĠĠ Ġ" ZIP Ġcreated Ġat Ġ${ zip File . absolute Path }". log ( ĊĠĠĠĠĠĠĠĠĠ ĠTAG ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠObservable . error ( ĊĠĠĠĠĠĠĠĠĠ ĠException (" Failed Ġto Ġcreate Ġthe Ġrequest ĠZIP Ġfile : Ġ${ e . message }", Ġe ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCleanup Ġfiles ĊĠĠĠ Ġ" Clean ing Ġup Ġfiles ... ". log ( TAG ) ĊĠĠĠ Ġcache Folder . delete Re levant Children () ĊĊĠĠĠ Ġ// ĠSend Ġrequest Ġto Ġthe Ġbackend Ġserver ĊĠĠĠ Ġreturn Ġif Ġ( is Remote ) Ġ{ ĊĠĠĠĠĠ Ġval Ġapi Ġ= Ġcreate Api ( config . api Host !! , Ġconfig . apiKey !! ) ĊĠĠĠĠĠ Ġval Ġarchive File Body Ġ= ĠRequest Body . create ( MediaType . parse (" application / zip "), Ġzip File ) ĊĠĠĠĠĠ Ġval Ġarchive File Ġ= ĠMultip art Body . Part . create FormData (" archive ", Ġ" icons . zip ", Ġarchive File Body ) ĊĠĠĠĠĠ Ġval Ġapps Json Ġ= ĠMultip art Body . Part . create FormData (" apps ", Ġjson Sb . toString ()) ĊĠĠĠĠĠ Ġ" Up loading Ġrequest Ġto Ġ${ config . api Host } ... ". log ( TAG ) ĊĠĠĠĠĠ Ġapi . perform Request ( archive File , Ġapps Json ) ĊĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . status Ġ== Ġ" error ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . error ( Exception ( it . error )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġ" Launch ing Ġshare Ġintent ... ". log ( TAG ) ĊĠĠĠĠĠ Ġlaunch Intent ( zip File , Ġrequest . uri Transformer , Ġconfig , Ġselected Apps ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Email Body ( ĊĠĠĠ Ġselected Apps : ĠList < App Model >, ĊĠĠĠ Ġconfig : ĠAr ct ic Config ĊĠ Ġ): ĠString Ġ{ ĊĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠ Ġif Ġ( config . email Header Ġ!= Ġnull Ġ&& Ġconfig . email Header . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġsb . append ( config . email Header . replace ("\ n ", Ġ"< br /> ")) ĊĠĠĠĠĠ Ġsb . append ("< br />< br /> ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġselected Apps . indices ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( i Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsb . append ("< br />< br /> ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġapp Ġ= Ġselected Apps [ i ] ĊĠĠĠĠĠ Ġsb . append (" Name : Ġ< b >${ app . name }</ b >< br /> ") ĊĠĠĠĠĠ Ġsb . append (" Code : Ġ< b >${ app . code }</ b >< br /> ") ĊĠĠĠĠĠ Ġsb . append (" Link : Ġhttps :// play . google . com / store / apps / details ? id =${ app . pkg } < br /> ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( config . include DeviceInfo ) Ġ{ ĊĠĠĠĠĠ Ġsb . append ( ĊĠĠĠĠĠĠĠĠĠ Ġ"< br />< br /> OS : Ġ$ RELEASE Ġ$ os Version Name < br /> Device : Ġ$ MAN U FACT UR ER Ġ$ MODEL Ġ($ PRODUCT )" ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġif Ġ( config . email Footer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsb . append ("< br /> ") ĊĠĠĠĠĠĠĠ Ġsb . append ( config . email Footer . replace ("\ n ", Ġ"< br /> ")) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġif Ġ( config . email Footer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġsb . append ("< br />< br /> ") ĊĠĠĠĠĠ Ġsb . append ( config . email Footer . replace ("\ n ", Ġ"< br /> ")) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġsb . toString () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Api ( ĊĠĠĠ Ġhost : ĠString , ĊĠĠĠ Ġapi Token : ĠString ĊĠ Ġ): ĠRequest Manager Api Ġ{ ĊĠĠĠ Ġval ĠhttpClient Ġ= ĠOk HttpClient . Builder () ĊĠĠĠ ĠhttpClient . add Interceptor Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠ Ġval Ġrequest Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠ Ġ. add Header (" Token ID ", Ġapi Token ) ĊĠĠĠĠĠĠĠĠĠ Ġ. add Header (" Accept ", Ġ" application / json ") ĊĠĠĠĠĠĠĠĠĠ Ġ. add Header (" User - Agent ", Ġ" af ol le st ad / icon - request ") ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠ Ġchain . proceed ( request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġretrofit Ġ= ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠ Ġ. baseUrl ( host ) ĊĠĠĠĠĠĠĠ Ġ. client ( httpClient . build ()) ĊĠĠĠĠĠĠĠ Ġ. add Call Adapter Factory ( Rx Java 2 Call Adapter Factory . create ()) ĊĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ( get Gson ())) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġreturn Ġretrofit . create ( Request Manager Api :: class . java ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġlaunch Intent ( ĊĠĠĠ Ġzip File : ĠFile , ĊĠĠĠ Ġuri Transformer : ĠUri Transformer , ĊĠĠĠ Ġconfig : ĠAr ct ic Config , ĊĠĠĠ Ġselected Apps : ĠList < App Model > ĊĠ Ġ): ĠObservable < Boolean > Ġ{ ĊĠĠĠ Ġreturn ĠObservable . from Callable Ġ{ ĊĠĠĠĠĠ Ġ// ĠSend Ġemail Ġintent ĊĠĠĠĠĠ Ġ" Launch ing Ġintent ! ". log ( TAG ) ĊĠĠĠĠĠ Ġval Ġzip Uri Ġ= Ġzip File . to Uri () ĊĠĠĠĠĠ Ġval Ġnew Uri Ġ= Ġuri Transformer ?. invoke ( zip Uri ) Ġ?: Ġzip Uri ĊĠĠĠĠĠ Ġif Ġ( zip Uri . toString () Ġ!= Ġnew Uri . toString ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Trans formed ĠURI Ġ$ zip Uri Ġ-> Ġ$ new Uri ". log ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTAG ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġemail Intent Ġ= ĠIntent ( Intent . ACTION _ SEND ) ĊĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( Intent . EXTRA _ EMAIL , ĠarrayOf ( config . email Recipient !! )) ĊĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( Intent . EXTRA _ SUBJECT , Ġconfig . email Subject ) ĊĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( Intent . EXTRA _ TEXT , Ġget Email Body ( selected Apps , Ġconfig ). to Html ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( Intent . EXTRA _ STREAM , Ġnew Uri ) ĊĠĠĠĠĠĠĠĠĠ Ġ. setType (" application / zip ") ĊĠĠĠĠĠ Ġcontext . startActivity ( ĊĠĠĠĠĠĠĠĠĠ ĠIntent . create Chooser ( email Intent , Ġcontext . getString ( string . send _ using )) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtrue Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Real Send Interactor " ĊĠĠĠ Ġprivate Ġvar Ġgson : ĠGson ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġget Gson (): ĠGson Ġ{ ĊĠĠĠĠĠ Ġif Ġ( gson Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgson Ġ= ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. serialize Null s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Type Adapter ( ApiResponse :: class . java , ĠApi Type Adapter ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġgson !! ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ