Search in sources :

Example 11 with AttachmentViewInfo

use of com.fsck.k9.mailstore.AttachmentViewInfo 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 12 with AttachmentViewInfo

use of com.fsck.k9.mailstore.AttachmentViewInfo in project k-9 by k9mail.

the class MessageViewFragment method onSaveAttachmentToUserProvidedDirectory.

@Override
public void onSaveAttachmentToUserProvidedDirectory(final AttachmentViewInfo attachment) {
    //TODO: check if we have to download the attachment first
    currentAttachmentViewInfo = attachment;
    FileBrowserHelper.getInstance().showFileBrowserActivity(MessageViewFragment.this, null, ACTIVITY_CHOOSE_DIRECTORY, new FileBrowserFailOverCallback() {

        @Override
        public void onPathEntered(String path) {
            getAttachmentController(attachment).saveAttachmentTo(path);
        }

        @Override
        public void onCancel() {
        // Do nothing
        }
    });
}
Also used : FileBrowserFailOverCallback(com.fsck.k9.helper.FileBrowserHelper.FileBrowserFailOverCallback)

Example 13 with AttachmentViewInfo

use of com.fsck.k9.mailstore.AttachmentViewInfo in project k-9 by k9mail.

the class MessageViewInfoExtractor method extractViewableAndAttachments.

private ViewableExtractedText extractViewableAndAttachments(List<Part> parts, List<AttachmentViewInfo> attachmentInfos) throws MessagingException {
    ArrayList<Viewable> viewableParts = new ArrayList<>();
    ArrayList<Part> attachments = new ArrayList<>();
    for (Part part : parts) {
        MessageExtractor.findViewablesAndAttachments(part, viewableParts, attachments);
    }
    attachmentInfos.addAll(attachmentInfoExtractor.extractAttachmentInfoForView(attachments));
    return extractTextFromViewables(viewableParts);
}
Also used : Part(com.fsck.k9.mail.Part) ArrayList(java.util.ArrayList) Viewable(com.fsck.k9.mail.internet.Viewable)

Example 14 with AttachmentViewInfo

use of com.fsck.k9.mailstore.AttachmentViewInfo in project k-9 by k9mail.

the class AttachmentInfoExtractor method extractAttachmentInfo.

@WorkerThread
public AttachmentViewInfo extractAttachmentInfo(Part part) throws MessagingException {
    Uri uri;
    long size;
    boolean isContentAvailable;
    if (part instanceof LocalPart) {
        LocalPart localPart = (LocalPart) part;
        String accountUuid = localPart.getAccountUuid();
        long messagePartId = localPart.getId();
        size = localPart.getSize();
        isContentAvailable = part.getBody() != null;
        uri = AttachmentProvider.getAttachmentUri(accountUuid, messagePartId);
    } else if (part instanceof LocalMessage) {
        LocalMessage localMessage = (LocalMessage) part;
        String accountUuid = localMessage.getAccount().getUuid();
        long messagePartId = localMessage.getMessagePartId();
        size = localMessage.getSize();
        isContentAvailable = part.getBody() != null;
        uri = AttachmentProvider.getAttachmentUri(accountUuid, messagePartId);
    } else {
        Body body = part.getBody();
        if (body instanceof DeferredFileBody) {
            DeferredFileBody decryptedTempFileBody = (DeferredFileBody) body;
            size = decryptedTempFileBody.getSize();
            uri = getDecryptedFileProviderUri(decryptedTempFileBody, part.getMimeType());
            isContentAvailable = true;
        } else {
            throw new IllegalArgumentException("Unsupported part type provided");
        }
    }
    return extractAttachmentInfo(part, uri, size, isContentAvailable);
}
Also used : LocalMessage(com.fsck.k9.mailstore.LocalMessage) LocalPart(com.fsck.k9.mailstore.LocalPart) Uri(android.net.Uri) Body(com.fsck.k9.mail.Body) DeferredFileBody(com.fsck.k9.mailstore.DeferredFileBody) DeferredFileBody(com.fsck.k9.mailstore.DeferredFileBody) WorkerThread(android.support.annotation.WorkerThread)

Example 15 with AttachmentViewInfo

use of com.fsck.k9.mailstore.AttachmentViewInfo in project k-9 by k9mail.

the class AttachmentPresenter method addAttachment.

private void addAttachment(AttachmentViewInfo attachmentViewInfo) {
    if (attachments.containsKey(attachmentViewInfo.internalUri)) {
        throw new IllegalStateException("Received the same attachmentViewInfo twice!");
    }
    int loaderId = getNextFreeLoaderId();
    Attachment attachment = Attachment.createAttachment(attachmentViewInfo.internalUri, loaderId, attachmentViewInfo.mimeType);
    attachment = attachment.deriveWithMetadataLoaded(attachmentViewInfo.mimeType, attachmentViewInfo.displayName, attachmentViewInfo.size);
    addAttachmentAndStartLoader(attachment);
}
Also used : Attachment(com.fsck.k9.activity.misc.Attachment)

Aggregations

AttachmentViewInfo (com.fsck.k9.mailstore.AttachmentViewInfo)15 Test (org.junit.Test)13 MimeBodyPart (com.fsck.k9.mail.internet.MimeBodyPart)12 Part (com.fsck.k9.mail.Part)7 Uri (android.net.Uri)5 WorkerThread (android.support.annotation.WorkerThread)3 LocalBodyPart (com.fsck.k9.mailstore.LocalBodyPart)3 ArrayList (java.util.ArrayList)3 Body (com.fsck.k9.mail.Body)2 Multipart (com.fsck.k9.mail.Multipart)2 DeferredFileBody (com.fsck.k9.mailstore.DeferredFileBody)2 LocalPart (com.fsck.k9.mailstore.LocalPart)2 Context (android.content.Context)1 Intent (android.content.Intent)1 Nullable (android.support.annotation.Nullable)1 VisibleForTesting (android.support.annotation.VisibleForTesting)1 MenuItem (android.view.MenuItem)1 OnMenuItemClickListener (android.view.MenuItem.OnMenuItemClickListener)1 WebView (android.webkit.WebView)1 HitTestResult (android.webkit.WebView.HitTestResult)1