mirror of
https://github.com/moparisthebest/k-9
synced 2024-12-25 09:08:49 -05:00
Fixed issue 1066: Better handling on mailto URI. Code adapted from AOSP.
This commit is contained in:
parent
1945dc4ad4
commit
e2edcd6d66
@ -29,9 +29,13 @@ import com.fsck.k9.mail.internet.*;
|
|||||||
import com.fsck.k9.mail.store.LocalStore;
|
import com.fsck.k9.mail.store.LocalStore;
|
||||||
import com.fsck.k9.mail.store.LocalStore.LocalAttachmentBody;
|
import com.fsck.k9.mail.store.LocalStore.LocalAttachmentBody;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URLDecoder;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
public class MessageCompose extends K9Activity implements OnClickListener, OnFocusChangeListener
|
public class MessageCompose extends K9Activity implements OnClickListener, OnFocusChangeListener
|
||||||
@ -372,20 +376,17 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
|
|||||||
if (intent.getData() != null)
|
if (intent.getData() != null)
|
||||||
{
|
{
|
||||||
Uri uri = intent.getData();
|
Uri uri = intent.getData();
|
||||||
try
|
if ("mailto".equals(uri.getScheme()))
|
||||||
{
|
{
|
||||||
if (uri.getScheme().equalsIgnoreCase("mailto"))
|
initializeFromMailTo(uri.toString());
|
||||||
{
|
|
||||||
Address[] addresses = Address.parse(uri.getSchemeSpecificPart());
|
|
||||||
addAddresses(mToView, addresses);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
else
|
||||||
{
|
{
|
||||||
/*
|
String toText = uri.getSchemeSpecificPart();
|
||||||
* If we can't extract any information from the URI it's okay. They can
|
if (toText != null)
|
||||||
* still compose a message.
|
{
|
||||||
*/
|
mToView.setText(toText);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -719,7 +720,7 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
|
|||||||
MimeBodyPart bp = new MimeBodyPart(new LocalStore.LocalAttachmentBody(attachment.uri, getApplication()));
|
MimeBodyPart bp = new MimeBodyPart(new LocalStore.LocalAttachmentBody(attachment.uri, getApplication()));
|
||||||
bp.addHeader(MimeHeader.HEADER_CONTENT_TYPE, String.format("%s;\n name=\"%s\"", attachment.contentType, attachment.name));
|
bp.addHeader(MimeHeader.HEADER_CONTENT_TYPE, String.format("%s;\n name=\"%s\"", attachment.contentType, attachment.name));
|
||||||
bp.addHeader(MimeHeader.HEADER_CONTENT_TRANSFER_ENCODING, "base64");
|
bp.addHeader(MimeHeader.HEADER_CONTENT_TRANSFER_ENCODING, "base64");
|
||||||
bp.addHeader(MimeHeader.HEADER_CONTENT_DISPOSITION, String.format("attachment;\n filename=\"%s\"", attachment.name));
|
bp.addHeader(MimeHeader.HEADER_CONTENT_DISPOSITION, String.format("attachment;\n filename=\"%s\";\n size=%d", attachment.name, attachment.size));
|
||||||
mp.addBodyPart(bp);
|
mp.addBodyPart(bp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -935,6 +936,7 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
|
|||||||
if (attachment.size == -1)
|
if (attachment.size == -1)
|
||||||
{
|
{
|
||||||
attachment.size = metadataCursor.getInt(1);
|
attachment.size = metadataCursor.getInt(1);
|
||||||
|
Log.v(K9.LOG_TAG, "size: " + attachment.size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -959,6 +961,24 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
|
|||||||
|
|
||||||
attachment.contentType = contentType;
|
attachment.contentType = contentType;
|
||||||
|
|
||||||
|
if (attachment.size<=0)
|
||||||
|
{
|
||||||
|
String uriString = uri.toString();
|
||||||
|
if (uriString.startsWith("file://"))
|
||||||
|
{
|
||||||
|
Log.v(K9.LOG_TAG, uriString.substring("file://".length()));
|
||||||
|
File f = new File(uriString.substring("file://".length()));
|
||||||
|
attachment.size = f.length();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Log.v(K9.LOG_TAG, "Not a file: " + uriString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Log.v(K9.LOG_TAG, "old attachment.size: " + attachment.size);
|
||||||
|
}
|
||||||
|
Log.v(K9.LOG_TAG, "new attachment.size: " + attachment.size);
|
||||||
|
|
||||||
View view = getLayoutInflater().inflate(R.layout.message_compose_attachment, mAttachments, false);
|
View view = getLayoutInflater().inflate(R.layout.message_compose_attachment, mAttachments, false);
|
||||||
TextView nameView = (TextView)view.findViewById(R.id.attachment_name);
|
TextView nameView = (TextView)view.findViewById(R.id.attachment_name);
|
||||||
ImageButton delete = (ImageButton)view.findViewById(R.id.attachment_delete);
|
ImageButton delete = (ImageButton)view.findViewById(R.id.attachment_delete);
|
||||||
@ -1542,4 +1562,76 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String decode(String s)
|
||||||
|
throws UnsupportedEncodingException
|
||||||
|
{
|
||||||
|
return URLDecoder.decode(s, "UTF-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When we are launched with an intent that includes a mailto: URI, we can actually
|
||||||
|
* gather quite a few of our message fields from it.
|
||||||
|
*
|
||||||
|
* @mailToString the href (which must start with "mailto:").
|
||||||
|
*/
|
||||||
|
private void initializeFromMailTo(String mailToString) {
|
||||||
|
|
||||||
|
// Chop up everything between mailto: and ? to find recipients
|
||||||
|
int index = mailToString.indexOf("?");
|
||||||
|
int length = "mailto".length() + 1;
|
||||||
|
String to;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Extract the recipient after mailto:
|
||||||
|
if (index == -1)
|
||||||
|
{
|
||||||
|
to = decode(mailToString.substring(length));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
to = decode(mailToString.substring(length, index));
|
||||||
|
}
|
||||||
|
mToView.setText(to);
|
||||||
|
}
|
||||||
|
catch (UnsupportedEncodingException e)
|
||||||
|
{
|
||||||
|
Log.e(K9.LOG_TAG, e.getMessage() + " while decoding '" + mailToString + "'");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract the other parameters
|
||||||
|
|
||||||
|
// We need to disguise this string as a URI in order to parse it
|
||||||
|
Uri uri = Uri.parse("foo://" + mailToString);
|
||||||
|
|
||||||
|
String addressList;
|
||||||
|
|
||||||
|
addressList = "";
|
||||||
|
List<String> cc = uri.getQueryParameters("cc");
|
||||||
|
for (String address : cc)
|
||||||
|
{
|
||||||
|
addressList += address + ",";
|
||||||
|
}
|
||||||
|
mCcView.setText(addressList);
|
||||||
|
|
||||||
|
addressList = "";
|
||||||
|
List<String> bcc = uri.getQueryParameters("bcc");
|
||||||
|
for (String address : bcc)
|
||||||
|
{
|
||||||
|
addressList += address + ",";
|
||||||
|
}
|
||||||
|
mBccView.setText(addressList);
|
||||||
|
|
||||||
|
List<String> subject = uri.getQueryParameters("subject");
|
||||||
|
if (subject.size() > 0)
|
||||||
|
{
|
||||||
|
mSubjectView.setText(subject.get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> body = uri.getQueryParameters("body");
|
||||||
|
if (body.size() > 0)
|
||||||
|
{
|
||||||
|
mMessageContentView.setText(body.get(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user