Search in sources :

Example 81 with Text

use of com.fsck.k9.mail.internet.Viewable.Text in project k-9 by k9mail.

the class MigrationTest method migratePgpInlineClearsignedMessage.

@Test
public void migratePgpInlineClearsignedMessage() throws Exception {
    SQLiteDatabase db = createV50Database();
    insertPgpInlineClearsignedMessage(db);
    db.close();
    LocalStore localStore = LocalStore.getInstance(account, RuntimeEnvironment.application);
    LocalMessage msg = localStore.getFolder("dev").getMessage("8");
    FetchProfile fp = new FetchProfile();
    fp.add(FetchProfile.Item.BODY);
    localStore.getFolder("dev").fetch(Collections.singletonList(msg), fp, null);
    Assert.assertEquals(7, msg.getId());
    Assert.assertEquals(12, msg.getHeaderNames().size());
    Assert.assertEquals("text/plain", msg.getMimeType());
    Assert.assertEquals(0, msg.getAttachmentCount());
    Assert.assertTrue(msg.getBody() instanceof BinaryMemoryBody);
    String msgTextContent = MessageExtractor.getTextFromPart(msg);
    Assert.assertEquals(OpenPgpUtils.PARSE_RESULT_SIGNED_MESSAGE, OpenPgpUtils.parseMessage(msgTextContent));
}
Also used : FetchProfile(com.fsck.k9.mail.FetchProfile) SQLiteDatabase(android.database.sqlite.SQLiteDatabase) Test(org.junit.Test)

Example 82 with Text

use of com.fsck.k9.mail.internet.Viewable.Text in project k-9 by k9mail.

the class MessageDecryptVerifierTest method findEncrypted__withMultipartMixedSubSignedAndText__shouldReturnSigned.

@Test
public void findEncrypted__withMultipartMixedSubSignedAndText__shouldReturnSigned() throws Exception {
    Message message = messageFromBody(multipart("mixed", multipart("signed", bodypart("text/plain"), bodypart("application/pgp-signature")), bodypart("text/plain")));
    List<Part> signedParts = MessageDecryptVerifier.findSignedParts(message, messageCryptoAnnotations);
    assertEquals(1, signedParts.size());
    assertSame(getPart(message, 0), signedParts.get(0));
}
Also used : MimeMessage(com.fsck.k9.mail.internet.MimeMessage) Message(com.fsck.k9.mail.Message) BodyPart(com.fsck.k9.mail.BodyPart) Part(com.fsck.k9.mail.Part) MimeBodyPart(com.fsck.k9.mail.internet.MimeBodyPart) Test(org.junit.Test)

Example 83 with Text

use of com.fsck.k9.mail.internet.Viewable.Text in project k-9 by k9mail.

the class MessageContainerView method onCreateContextMenu.

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu);
    WebView webview = (WebView) v;
    WebView.HitTestResult result = webview.getHitTestResult();
    if (result == null) {
        return;
    }
    int type = result.getType();
    Context context = getContext();
    switch(type) {
        case HitTestResult.SRC_ANCHOR_TYPE:
            {
                final String url = result.getExtra();
                OnMenuItemClickListener listener = new OnMenuItemClickListener() {

                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch(item.getItemId()) {
                            case MENU_ITEM_LINK_VIEW:
                                {
                                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                                    startActivityIfAvailable(getContext(), intent);
                                    break;
                                }
                            case MENU_ITEM_LINK_SHARE:
                                {
                                    Intent intent = new Intent(Intent.ACTION_SEND);
                                    intent.setType("text/plain");
                                    intent.putExtra(Intent.EXTRA_TEXT, url);
                                    startActivityIfAvailable(getContext(), intent);
                                    break;
                                }
                            case MENU_ITEM_LINK_COPY:
                                {
                                    String label = getContext().getString(R.string.webview_contextmenu_link_clipboard_label);
                                    mClipboardManager.setText(label, url);
                                    break;
                                }
                        }
                        return true;
                    }
                };
                menu.setHeaderTitle(url);
                menu.add(Menu.NONE, MENU_ITEM_LINK_VIEW, 0, context.getString(R.string.webview_contextmenu_link_view_action)).setOnMenuItemClickListener(listener);
                menu.add(Menu.NONE, MENU_ITEM_LINK_SHARE, 1, context.getString(R.string.webview_contextmenu_link_share_action)).setOnMenuItemClickListener(listener);
                menu.add(Menu.NONE, MENU_ITEM_LINK_COPY, 2, context.getString(R.string.webview_contextmenu_link_copy_action)).setOnMenuItemClickListener(listener);
                break;
            }
        case HitTestResult.IMAGE_TYPE:
        case HitTestResult.SRC_IMAGE_ANCHOR_TYPE:
            {
                final Uri uri = Uri.parse(result.getExtra());
                if (uri == null) {
                    return;
                }
                final AttachmentViewInfo attachmentViewInfo = getAttachmentViewInfoIfCidUri(uri);
                final boolean inlineImage = attachmentViewInfo != null;
                OnMenuItemClickListener listener = new OnMenuItemClickListener() {

                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch(item.getItemId()) {
                            case MENU_ITEM_IMAGE_VIEW:
                                {
                                    if (inlineImage) {
                                        attachmentCallback.onViewAttachment(attachmentViewInfo);
                                    } else {
                                        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                                        startActivityIfAvailable(getContext(), intent);
                                    }
                                    break;
                                }
                            case MENU_ITEM_IMAGE_SAVE:
                                {
                                    if (inlineImage) {
                                        attachmentCallback.onSaveAttachment(attachmentViewInfo);
                                    } else {
                                        //TODO: Use download manager
                                        new DownloadImageTask(getContext()).execute(uri.toString());
                                    }
                                    break;
                                }
                            case MENU_ITEM_IMAGE_COPY:
                                {
                                    String label = getContext().getString(R.string.webview_contextmenu_image_clipboard_label);
                                    mClipboardManager.setText(label, uri.toString());
                                    break;
                                }
                        }
                        return true;
                    }
                };
                menu.setHeaderTitle(inlineImage ? context.getString(R.string.webview_contextmenu_image_title) : uri.toString());
                menu.add(Menu.NONE, MENU_ITEM_IMAGE_VIEW, 0, context.getString(R.string.webview_contextmenu_image_view_action)).setOnMenuItemClickListener(listener);
                menu.add(Menu.NONE, MENU_ITEM_IMAGE_SAVE, 1, inlineImage ? context.getString(R.string.webview_contextmenu_image_save_action) : context.getString(R.string.webview_contextmenu_image_download_action)).setOnMenuItemClickListener(listener);
                if (!inlineImage) {
                    menu.add(Menu.NONE, MENU_ITEM_IMAGE_COPY, 2, context.getString(R.string.webview_contextmenu_image_copy_action)).setOnMenuItemClickListener(listener);
                }
                break;
            }
        case HitTestResult.PHONE_TYPE:
            {
                final String phoneNumber = result.getExtra();
                OnMenuItemClickListener listener = new OnMenuItemClickListener() {

                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch(item.getItemId()) {
                            case MENU_ITEM_PHONE_CALL:
                                {
                                    Uri uri = Uri.parse(WebView.SCHEME_TEL + phoneNumber);
                                    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                                    startActivityIfAvailable(getContext(), intent);
                                    break;
                                }
                            case MENU_ITEM_PHONE_SAVE:
                                {
                                    Contacts contacts = Contacts.getInstance(getContext());
                                    contacts.addPhoneContact(phoneNumber);
                                    break;
                                }
                            case MENU_ITEM_PHONE_COPY:
                                {
                                    String label = getContext().getString(R.string.webview_contextmenu_phone_clipboard_label);
                                    mClipboardManager.setText(label, phoneNumber);
                                    break;
                                }
                        }
                        return true;
                    }
                };
                menu.setHeaderTitle(phoneNumber);
                menu.add(Menu.NONE, MENU_ITEM_PHONE_CALL, 0, context.getString(R.string.webview_contextmenu_phone_call_action)).setOnMenuItemClickListener(listener);
                menu.add(Menu.NONE, MENU_ITEM_PHONE_SAVE, 1, context.getString(R.string.webview_contextmenu_phone_save_action)).setOnMenuItemClickListener(listener);
                menu.add(Menu.NONE, MENU_ITEM_PHONE_COPY, 2, context.getString(R.string.webview_contextmenu_phone_copy_action)).setOnMenuItemClickListener(listener);
                break;
            }
        case WebView.HitTestResult.EMAIL_TYPE:
            {
                final String email = result.getExtra();
                OnMenuItemClickListener listener = new OnMenuItemClickListener() {

                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch(item.getItemId()) {
                            case MENU_ITEM_EMAIL_SEND:
                                {
                                    Uri uri = Uri.parse(WebView.SCHEME_MAILTO + email);
                                    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                                    startActivityIfAvailable(getContext(), intent);
                                    break;
                                }
                            case MENU_ITEM_EMAIL_SAVE:
                                {
                                    Contacts contacts = Contacts.getInstance(getContext());
                                    contacts.createContact(new Address(email));
                                    break;
                                }
                            case MENU_ITEM_EMAIL_COPY:
                                {
                                    String label = getContext().getString(R.string.webview_contextmenu_email_clipboard_label);
                                    mClipboardManager.setText(label, email);
                                    break;
                                }
                        }
                        return true;
                    }
                };
                menu.setHeaderTitle(email);
                menu.add(Menu.NONE, MENU_ITEM_EMAIL_SEND, 0, context.getString(R.string.webview_contextmenu_email_send_action)).setOnMenuItemClickListener(listener);
                menu.add(Menu.NONE, MENU_ITEM_EMAIL_SAVE, 1, context.getString(R.string.webview_contextmenu_email_save_action)).setOnMenuItemClickListener(listener);
                menu.add(Menu.NONE, MENU_ITEM_EMAIL_COPY, 2, context.getString(R.string.webview_contextmenu_email_copy_action)).setOnMenuItemClickListener(listener);
                break;
            }
    }
}
Also used : Context(android.content.Context) Address(com.fsck.k9.mail.Address) OnMenuItemClickListener(android.view.MenuItem.OnMenuItemClickListener) MenuItem(android.view.MenuItem) Intent(android.content.Intent) Uri(android.net.Uri) HitTestResult(android.webkit.WebView.HitTestResult) Contacts(com.fsck.k9.helper.Contacts) MessageWebView(com.fsck.k9.view.MessageWebView) WebView(android.webkit.WebView) AttachmentViewInfo(com.fsck.k9.mailstore.AttachmentViewInfo)

Example 84 with Text

use of com.fsck.k9.mail.internet.Viewable.Text in project k-9 by k9mail.

the class MessageDecryptVerifierTest method findEncrypted__withMultipartMixedSubTextAndEncrypted__shouldReturnEncrypted.

@Test
public void findEncrypted__withMultipartMixedSubTextAndEncrypted__shouldReturnEncrypted() throws Exception {
    Message message = messageFromBody(multipart("mixed", bodypart("text/plain"), multipart("encrypted", bodypart("application/pgp-encrypted"), bodypart("application/octet-stream"))));
    List<Part> encryptedParts = MessageDecryptVerifier.findEncryptedParts(message);
    assertEquals(1, encryptedParts.size());
    assertSame(getPart(message, 1), encryptedParts.get(0));
}
Also used : MimeMessage(com.fsck.k9.mail.internet.MimeMessage) Message(com.fsck.k9.mail.Message) BodyPart(com.fsck.k9.mail.BodyPart) Part(com.fsck.k9.mail.Part) MimeBodyPart(com.fsck.k9.mail.internet.MimeBodyPart) Test(org.junit.Test)

Example 85 with Text

use of com.fsck.k9.mail.internet.Viewable.Text in project k-9 by k9mail.

the class ImapFolder method search.

/**
     * Search the remote ImapFolder.
     * @param queryString String to query for.
     * @param requiredFlags Mandatory flags
     * @param forbiddenFlags Flags to exclude
     * @return List of messages found
     * @throws MessagingException On any error.
     */
@Override
public List<ImapMessage> search(final String queryString, final Set<Flag> requiredFlags, final Set<Flag> forbiddenFlags) throws MessagingException {
    if (!store.getStoreConfig().allowRemoteSearch()) {
        throw new MessagingException("Your settings do not allow remote searching of this account");
    }
    // Setup the searcher
    final ImapSearcher searcher = new ImapSearcher() {

        @Override
        public List<ImapResponse> search() throws IOException, MessagingException {
            String imapQuery = "UID SEARCH ";
            if (requiredFlags != null) {
                for (Flag flag : requiredFlags) {
                    switch(flag) {
                        case DELETED:
                            {
                                imapQuery += "DELETED ";
                                break;
                            }
                        case SEEN:
                            {
                                imapQuery += "SEEN ";
                                break;
                            }
                        case ANSWERED:
                            {
                                imapQuery += "ANSWERED ";
                                break;
                            }
                        case FLAGGED:
                            {
                                imapQuery += "FLAGGED ";
                                break;
                            }
                        case DRAFT:
                            {
                                imapQuery += "DRAFT ";
                                break;
                            }
                        case RECENT:
                            {
                                imapQuery += "RECENT ";
                                break;
                            }
                        default:
                            {
                                break;
                            }
                    }
                }
            }
            if (forbiddenFlags != null) {
                for (Flag flag : forbiddenFlags) {
                    switch(flag) {
                        case DELETED:
                            {
                                imapQuery += "UNDELETED ";
                                break;
                            }
                        case SEEN:
                            {
                                imapQuery += "UNSEEN ";
                                break;
                            }
                        case ANSWERED:
                            {
                                imapQuery += "UNANSWERED ";
                                break;
                            }
                        case FLAGGED:
                            {
                                imapQuery += "UNFLAGGED ";
                                break;
                            }
                        case DRAFT:
                            {
                                imapQuery += "UNDRAFT ";
                                break;
                            }
                        case RECENT:
                            {
                                imapQuery += "UNRECENT ";
                                break;
                            }
                        default:
                            {
                                break;
                            }
                    }
                }
            }
            String encodedQuery = ImapUtility.encodeString(queryString);
            if (store.getStoreConfig().isRemoteSearchFullText()) {
                imapQuery += "TEXT " + encodedQuery;
            } else {
                imapQuery += "OR SUBJECT " + encodedQuery + " FROM " + encodedQuery;
            }
            return executeSimpleCommand(imapQuery);
        }
    };
    try {
        open(OPEN_MODE_RO);
        checkOpen();
        inSearch = true;
        return search(searcher, null);
    } finally {
        inSearch = false;
    }
}
Also used : MessagingException(com.fsck.k9.mail.MessagingException) Flag(com.fsck.k9.mail.Flag)

Aggregations

Test (org.junit.Test)74 Part (com.fsck.k9.mail.Part)64 MimeBodyPart (com.fsck.k9.mail.internet.MimeBodyPart)37 BodyPart (com.fsck.k9.mail.BodyPart)34 MimeMessage (com.fsck.k9.mail.internet.MimeMessage)33 MessageCreationHelper.createTextPart (com.fsck.k9.message.MessageCreationHelper.createTextPart)27 Message (com.fsck.k9.mail.Message)22 TextBody (com.fsck.k9.mail.internet.TextBody)18 MessageCreationHelper.createEmptyPart (com.fsck.k9.message.MessageCreationHelper.createEmptyPart)16 ArrayList (java.util.ArrayList)16 Body (com.fsck.k9.mail.Body)13 MessagingException (com.fsck.k9.mail.MessagingException)13 MessageCreationHelper.createPart (com.fsck.k9.message.MessageCreationHelper.createPart)13 Multipart (com.fsck.k9.mail.Multipart)10 Viewable (com.fsck.k9.mail.internet.Viewable)10 ByteArrayOutputStream (java.io.ByteArrayOutputStream)9 MimeMultipart (com.fsck.k9.mail.internet.MimeMultipart)8 Intent (android.content.Intent)6 BinaryMemoryBody (com.fsck.k9.mailstore.BinaryMemoryBody)6 ViewableExtractedText (com.fsck.k9.mailstore.MessageViewInfoExtractor.ViewableExtractedText)6