public static MailTo parse(Uri uri) throws NullPointerException, IllegalArgumentException { if (uri == null || uri.toString() == null) { throw new NullPointerException("Argument 'uri' must not be null"); } if (!isMailTo(uri)) { throw new IllegalArgumentException("Not a mailto scheme"); } String schemaSpecific = uri.getSchemeSpecificPart(); int end = schemaSpecific.indexOf('?'); if (end == -1) { end = schemaSpecific.length(); } CaseInsensitiveParamWrapper params = new CaseInsensitiveParamWrapper(Uri.parse("foo://bar?" + uri.getEncodedQuery())); // Extract the recipient's email address from the mailto URI if there's one. String recipient = Uri.decode(schemaSpecific.substring(0, end)); List<String> toList = params.getQueryParameters(TO); if (recipient.length() != 0) { toList.add(0, recipient); } List<String> ccList = params.getQueryParameters(CC); List<String> bccList = params.getQueryParameters(BCC); Address[] toAddresses = toAddressArray(toList); Address[] ccAddresses = toAddressArray(ccList); Address[] bccAddresses = toAddressArray(bccList); String subject = getFirstParameterValue(params, SUBJECT); String body = getFirstParameterValue(params, BODY); return new MailTo(toAddresses, ccAddresses, bccAddresses, subject, body); }
/** * 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. * * @param mailTo * The MailTo object we use to initialize message field */ private void initializeFromMailto(MailTo mailTo) { recipientPresenter.initFromMailto(mailTo); String subject = mailTo.getSubject(); if (subject != null && !subject.isEmpty()) { subjectView.setText(subject); } String body = mailTo.getBody(); if (body != null && !body.isEmpty()) { messageContentView.setCharacters(body); } }
@Test public void testIsMailTo_validMailToURI() { Uri uri = Uri.parse("mailto:nobody"); boolean result = MailTo.isMailTo(uri); assertTrue(result); }
@Test public void testGetSubject() { Uri uri = Uri.parse("mailto:?subject=Hello"); MailTo mailToHelper = MailTo.parse(uri); String subject = mailToHelper.getSubject(); assertEquals(subject, "Hello"); }
@Test public void parse_withoutMailtoUri_shouldThrow() throws Exception { exception.expect(IllegalArgumentException.class); exception.expectMessage("Not a mailto scheme"); Uri uri = Uri.parse("http://example.org/"); MailTo.parse(uri); }
@Test public void testGetCc_multipleEmailAddress() { Uri uri = Uri.parse("mailto:test1@abc.com?cc=test3@abc.com,test4@abc.com"); MailTo mailToHelper = MailTo.parse(uri); Address[] emailAddressList = mailToHelper.getCc(); assertEquals(emailAddressList[0].getAddress(), "test3@abc.com"); assertEquals(emailAddressList[1].getAddress(), "test4@abc.com"); }
@Test public void testGetBcc_multipleEmailAddress() { Uri uri = Uri.parse("mailto:?bcc=test3@abc.com&bcc=test4@abc.com"); MailTo mailToHelper = MailTo.parse(uri); Address[] emailAddressList = mailToHelper.getBcc(); assertEquals(emailAddressList[0].getAddress(), "test3@abc.com"); assertEquals(emailAddressList[1].getAddress(), "test4@abc.com"); }
@Test public void testGetTo_multipleEmailAddress() { Uri uri = Uri.parse("mailto:test1@abc.com?to=test2@abc.com"); MailTo mailToHelper = MailTo.parse(uri); Address[] emailAddressList = mailToHelper.getTo(); assertEquals(emailAddressList[0].getAddress(), "test1@abc.com"); assertEquals(emailAddressList[1].getAddress(), "test2@abc.com"); }
@SuppressWarnings("ConstantConditions") @Test public void testIsMailTo_nullArgument() { Uri uri = null; boolean result = MailTo.isMailTo(uri); assertFalse(result); }
@Test public void parse_withNullArgument_shouldThrow() throws Exception { exception.expect(NullPointerException.class); exception.expectMessage("Argument 'uri' must not be null"); MailTo.parse(null); }
@Test public void testIsMailTo_invalidMailToUri() { Uri uri = Uri.parse("http://example.org/"); boolean result = MailTo.isMailTo(uri); assertFalse(result); }