/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġorg . ac ra . sender Ċ Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġorg . ac ra . AC RA Constants Ċ import Ġorg . ac ra . attachment . Ac ra Content Provider Ċ import Ġorg . ac ra . attachment . Default Attachment Provider Ċ import Ġorg . ac ra . config . Config Utils . get Plugin Configuration Ċ import Ġorg . ac ra . config . Core Configuration Ċ import Ġorg . ac ra . config . Mail Sender Configuration Ċ import Ġorg . ac ra . data . Crash Report Data Ċ import Ġorg . ac ra . log . warn Ċ import Ġorg . ac ra . sender . Report Sender Exception Ċ import Ġorg . ac ra . util . IO Utils . writeString ToFile Ċ import Ġorg . ac ra . util . Instance Creator Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠSend Ġreports Ġthrough Ġan Ġemail Ġintent . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠThe Ġuser Ġwill Ġbe Ġasked Ġto Ġchose Ġhis Ġpreferred Ġemail Ġclient Ġif Ġno Ġdefault Ġis Ġset . ĠInclude d Ġreport Ġfields Ġcan Ġbe Ġdefined Ġusing Ċ Ġ* Ġ[ org . ac ra . annotation . Ac ra Core . report Content ]. ĠCrash Ġreceiving Ġmailbox Ġhas Ġto Ġbe Ċ Ġ* Ġdefined Ġwith Ġ[ org . ac ra . annotation . Ac ra Mail Sender . mail To ]. Ċ Ġ*/ Ċ @ Suppress (" Member Visibility Can Be Private ") Ċ open Ġclass ĠEmail Intent Sender ( private Ġval Ġconfig : ĠCore Configuration ) Ġ: ĠReport Sender Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmail Config : ĠMail Sender Configuration Ġ= Ġget Plugin Configuration ( config , ĠMail Sender Configuration :: class . java ) ĊĊĠĠĠ Ġ@ Throws ( Report Sender Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġsend ( context : ĠContext , Ġerror Content : ĠCrash Report Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpm Ġ= Ġcontext . package Manager ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= Ġbuild Subject ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġreport Text : ĠString ĊĠĠĠĠĠĠĠ Ġreport Text Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . report Format . to Formatted String ( error Content , Ġconfig . report Content , Ġ"\ n ", Ġ"\ n \ t ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠReport Sender Exception (" Failed Ġto Ġconvert ĠReport Ġto Ġtext ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbody Prefix : ĠString Ġ= Ġmail Config . body ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġif Ġ( body Prefix . isNotEmpty ()) Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| $ body Prefix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| $ report Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () Ġelse Ġreport Text ĊĠĠĠĠĠĠĠ Ġval Ġattachments Ġ= ĠArrayList < Uri >() ĊĠĠĠĠĠĠĠ Ġval Ġcontent Attached Ġ= Ġfill Attachment List ( context , Ġreport Text , Ġattachments ) ĊĊĠĠĠĠĠĠĠ Ġ// we Ġhave Ġto Ġresolve Ġwith Ġsend to , Ġbecause Ġsend Ġis Ġsupported Ġby Ġnon - email Ġapps ĊĠĠĠĠĠĠĠ Ġval Ġresolve Intent Ġ= Ġbuild Resolve Intent ( subject , Ġbody ) ĊĠĠĠĠĠĠĠ Ġval Ġresolve Activity Ġ= Ġresolve Intent . resolve Activity ( pm ) ĊĠĠĠĠĠĠĠ Ġif Ġ( resolve Activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( attachments . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// no Ġattachments , Ġsend Ġdirectly ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( resolve Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattachment Intent Ġ= Ġbuild Attachment Intent ( subject , Ġif Ġ( content Attached ) Ġbody Prefix Ġelse Ġbody , Ġattachments ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Intent s Ġ= Ġbuild Initial Intent s ( pm , Ġresolve Intent , Ġattachment Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpackageName Ġ= Ġget PackageName ( resolve Activity , Ġinitial Intent s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattachment Intent . set Package ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// let Ġuser Ġchoose Ġemail Ġclient ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( intent Ġin Ġinitial Intent s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Permission ( context , Ġintent , Ġintent . get Package (), Ġattachments ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Chooser ( context , Ġinitial Intent s . to Mutable List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattachment Intent . resolve Activity ( pm ) Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// use Ġdefault Ġemail Ġclient ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Permission ( context , Ġattachment Intent , ĠpackageName , Ġattachments ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( attachment Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwarn Ġ{ Ġ" No Ġemail Ġclient Ġsupporting Ġattachments Ġfound . ĠAttach ments Ġwill Ġbe Ġignored " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( resolve Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠReport Sender Exception (" No Ġemail Ġclient Ġfound ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequires Foreground (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFinds Ġthe Ġpackage Ġname Ġof Ġthe Ġdefault Ġemail Ġclient Ġsupporting Ġattachments ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġresolve Activity Ġthe Ġresolved Ġactivity ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Intent s Ġ Ġa Ġlist Ġof Ġintent s Ġto Ġbe Ġused Ġwhen ĊĠĠĠĠ Ġ* Ġ@ return Ġpackage Ġname Ġof Ġthe Ġdefault Ġemail Ġclient , Ġor Ġnull Ġif Ġmore Ġthan Ġone Ġapp Ġmatch ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget PackageName ( resolve Activity : ĠComponent Name , Ġinitial Intent s : ĠList < Intent >): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠpackageName : ĠString ? Ġ= Ġresolve Activity . packageName ĊĠĠĠĠĠĠĠ Ġif Ġ( packageName Ġ== Ġ" android ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// multiple Ġactivities Ġsupport Ġthe Ġintent Ġand Ġno Ġdefault Ġis Ġset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( initial Intent s . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( initial Intent s . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// only Ġone Ġof Ġthem Ġsupports Ġattachments , Ġuse Ġthat Ġone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName Ġ= Ġinitial Intent s [ 0 ]. get Package () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠpackageName ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuilds Ġan Ġemail Ġintent Ġwith Ġattachments ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsubject ĠĠĠĠĠĠĠĠ Ġthe Ġmessage Ġsubject ĊĠĠĠĠ Ġ* Ġ@ param Ġbody ĠĠĠĠĠĠĠĠĠĠĠ Ġthe Ġmessage Ġbody ĊĠĠĠĠ Ġ* Ġ@ param Ġattachments ĠĠĠĠ Ġthe Ġattachments ĊĠĠĠĠ Ġ* Ġ@ return Ġemail Ġintent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġbuild Attachment Intent ( subject : ĠString , Ġbody : ĠString ?, Ġattachments : ĠArrayList < Uri >): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ SEND _ MULTIPLE ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ EMAIL , ĠarrayOf < String >( mail Config . mail To )) ĊĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ SUBJECT , Ġsubject ) ĊĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" message / rfc 8 2 2 " ĊĠĠĠĠĠĠĠ Ġintent . put Parcelable ArrayList Extra ( Intent . EXTRA _ STREAM , Ġattachments ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ TEXT , Ġbody ) ĊĠĠĠĠĠĠĠ Ġreturn Ġintent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuilds Ġan Ġintent Ġused Ġto Ġresolve Ġemail Ġclients Ġand Ġto Ġsend Ġreports Ġwithout Ġattachments Ġor Ġas Ġfallback Ġif Ġno Ġattachments Ġare Ġsupported ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsubject Ġthe Ġmessage Ġsubject ĊĠĠĠĠ Ġ* Ġ@ param Ġbody ĠĠĠ Ġthe Ġmessage Ġbody ĊĠĠĠĠ Ġ* Ġ@ return Ġemail Ġintent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġbuild Resolve Intent ( subject : ĠString , Ġbody : ĠString ): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ SEND TO ) ĊĠĠĠĠĠĠĠ Ġintent . data Ġ= ĠUri . parse (" mailto :${ mail Config . mail To }? subject =${ Uri . encode ( subject )} & body =${ Uri . encode ( body )} ") ĊĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ SUBJECT , Ġsubject ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ TEXT , Ġbody ) ĊĠĠĠĠĠĠĠ Ġreturn Ġintent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Initial Intent s ( pm : ĠPackage Manager , Ġresolve Intent : ĠIntent , Ġemail Intent : ĠIntent ): ĠList < Intent > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresolve InfoList Ġ= Ġpm . query Intent Activities ( resolve Intent , ĠPackage Manager . MATCH _ DEFAULT _ ONLY ) ĊĠĠĠĠĠĠĠ Ġval Ġinitial Intent s : ĠMutable List < Intent > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġfor Ġ( info Ġin Ġresolve InfoList ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage Specific Intent Ġ= ĠIntent ( email Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Specific Intent . set Package ( info . activity Info . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( package Specific Intent . resolve Activity ( pm ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Intent s . add ( package Specific Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġinitial Intent s ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Chooser ( context : ĠContext , Ġinitial Intent s : ĠMutable List < Intent >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcho oser Ġ= ĠIntent ( Intent . ACTION _ CH OO SER ) ĊĠĠĠĠĠĠĠ Ġcho oser . putExtra ( Intent . EXTRA _ INT ENT , Ġinitial Intent s . remove At ( 0 )) ĊĠĠĠĠĠĠĠ Ġcho oser . putExtra ( Intent . EXTRA _ INITIAL _ INT ENTS , Ġinitial Intent s . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġcho oser . add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠĠĠ Ġcontext . startActivity ( cho oser ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgrant Permission ( context : ĠContext , Ġintent : ĠIntent , ĠpackageName : ĠString ?, Ġattachments : ĠList < Uri >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ GRANT _ READ _ URI _ PERMISSION ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// flags Ġdo Ġnot Ġwork Ġon Ġextras Ġprior Ġto Ġlo l lip op , Ġso Ġwe Ġhave Ġto Ġgrant Ġread Ġpermissions Ġmanually ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( uri Ġin Ġattachments ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . grant Uri Permission ( packageName , Ġuri , ĠIntent . FLAG _ GRANT _ READ _ URI _ PERMISSION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġthe Ġmessage Ġsubject ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġa Ġcontext ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġmessage Ġsubject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġbuild Subject ( context : ĠContext ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsubject : ĠString Ġ= Ġmail Config . subject ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( subject . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubject ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġcontext . packageName Ġ+ Ġ" ĠCrash ĠReport " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġall Ġattachment Ġur is Ġinto Ġthe Ġgiven Ġlist ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠ Ġa Ġcontext ĊĠĠĠĠ Ġ* Ġ@ param Ġreport Text ĠĠĠĠĠĠĠ Ġthe Ġreport Ġcontent ĊĠĠĠĠ Ġ* Ġ@ param Ġattachments Ġthe Ġtarget Ġlist ĊĠĠĠĠ Ġ* Ġ@ return Ġif Ġthe Ġattachments Ġcontain Ġthe Ġcontent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġfill Attachment List ( context : ĠContext , Ġreport Text : ĠString , Ġattachments : ĠMutable List < Uri >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġattachments . addAll ( Instance Creator . create ( config . attachment Uri Provider ) Ġ{ ĠDefault Attachment Provider () Ġ}. get Attachments ( context , Ġconfig )) ĊĠĠĠĠĠĠĠ Ġif Ġ( mail Config . report As File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreport Ġ= Ġcreate Attachment FromString ( context , Ġmail Config . report FileName , Ġreport Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( report Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattachments . add ( report ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġtemporary Ġfile Ġwith Ġthe Ġgiven Ġcontent Ġand Ġname , Ġto Ġbe Ġused Ġas Ġan Ġemail Ġattachment ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġa Ġcontext ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĠĠĠ Ġthe Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Ġthe Ġcontent ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġcontent Ġuri Ġfor Ġthe Ġfile ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġcreate Attachment FromString ( context : ĠContext , Ġname : ĠString , Ġcontent : ĠString ): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcache Ġ= ĠFile ( context . cacheDir , Ġname ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String ToFile ( cache , Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAc ra Content Provider . get Uri For File ( context , Ġcache ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ REPORT _ FILENAME Ġ= Ġ" AC RA - report " Ġ+ ĠA CR A Constants . REPORT FILE _ EXTENSION ĊĠĠĠ Ġ} Ċ Ċ }