Search in sources :

Example 6 with ContentAttachment

use of i2p.bote.android.util.ContentAttachment in project i2p.i2p-bote by i2p.

the class ViewEmailFragment method displayEmail.

private void displayEmail(Email email, View v) {
    View sigInvalid = v.findViewById(R.id.signature_invalid);
    TextView subject = (TextView) v.findViewById(R.id.email_subject);
    ImageView picture = (ImageView) v.findViewById(R.id.picture);
    TextView sender = (TextView) v.findViewById(R.id.email_sender);
    LinearLayout toRecipients = (LinearLayout) v.findViewById(R.id.email_to);
    TextView sent = (TextView) v.findViewById(R.id.email_sent);
    TextView received = (TextView) v.findViewById(R.id.email_received);
    TextView content = (TextView) v.findViewById(R.id.email_content);
    LinearLayout attachments = (LinearLayout) v.findViewById(R.id.attachments);
    try {
        String fromAddress = email.getOneFromAddress();
        subject.setText(email.getSubject());
        Bitmap pic = BoteHelper.getPictureForAddress(fromAddress);
        if (pic != null)
            picture.setImageBitmap(pic);
        else if (!email.isAnonymous()) {
            ViewGroup.LayoutParams lp = picture.getLayoutParams();
            picture.setImageBitmap(BoteHelper.getIdenticonForAddress(fromAddress, lp.width, lp.height));
        }
        final String senderDisplay = BoteHelper.getDisplayAddress(fromAddress);
        if (!email.isSignatureValid() && !email.isAnonymous()) {
            sigInvalid.setVisibility(View.VISIBLE);
            sigInvalid.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {
                    Toast.makeText(getActivity(), getString(R.string.signature_invalid, senderDisplay), Toast.LENGTH_LONG).show();
                }
            });
        }
        sender.setText(senderDisplay);
        if (email.isAnonymous() && !BoteHelper.isSentEmail(email))
            sender.setTypeface(Typeface.DEFAULT, Typeface.ITALIC);
        Address[] emailToRecipients = email.getToAddresses();
        if (emailToRecipients != null) {
            for (Address recipient : emailToRecipients) {
                TextView tv = new TextView(getActivity());
                tv.setText(BoteHelper.getDisplayAddress(recipient.toString()));
                tv.setTextAppearance(getActivity(), R.style.TextAppearance_AppCompat_Secondary);
                toRecipients.addView(tv);
            }
        }
        Address[] emailCcRecipients = email.getCCAddresses();
        if (emailCcRecipients != null) {
            v.findViewById(R.id.email_cc_row).setVisibility(View.VISIBLE);
            LinearLayout ccRecipients = (LinearLayout) v.findViewById(R.id.email_cc);
            for (Address recipient : emailCcRecipients) {
                TextView tv = new TextView(getActivity());
                tv.setText(BoteHelper.getDisplayAddress(recipient.toString()));
                tv.setTextAppearance(getActivity(), R.style.TextAppearance_AppCompat_Secondary);
                ccRecipients.addView(tv);
            }
        }
        Address[] emailBccRecipients = email.getBCCAddresses();
        if (emailBccRecipients != null) {
            v.findViewById(R.id.email_bcc_row).setVisibility(View.VISIBLE);
            LinearLayout bccRecipients = (LinearLayout) v.findViewById(R.id.email_bcc);
            for (Address recipient : emailBccRecipients) {
                TextView tv = new TextView(getActivity());
                tv.setText(BoteHelper.getDisplayAddress(recipient.toString()));
                tv.setTextAppearance(getActivity(), R.style.TextAppearance_AppCompat_Secondary);
                bccRecipients.addView(tv);
            }
        }
        if (email.getSentDate() != null)
            sent.setText(DateFormat.getInstance().format(email.getSentDate()));
        if (email.getReceivedDate() != null)
            received.setText(DateFormat.getInstance().format(email.getReceivedDate()));
        content.setText(email.getText());
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
            content.setTextIsSelectable(true);
        List<Part> parts = email.getParts();
        for (int partIndex = 0; partIndex < parts.size(); partIndex++) {
            Part part = parts.get(partIndex);
            if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
                final ContentAttachment attachment = new ContentAttachment(getActivity(), part);
                View a = getActivity().getLayoutInflater().inflate(R.layout.listitem_attachment, attachments, false);
                ((TextView) a.findViewById(R.id.filename)).setText(attachment.getFileName());
                ((TextView) a.findViewById(R.id.size)).setText(attachment.getHumanReadableSize());
                final ImageView action = (ImageView) a.findViewById(R.id.attachment_action);
                action.setImageDrawable(new IconicsDrawable(getActivity(), GoogleMaterial.Icon.gmd_more_vert).colorRes(R.color.md_grey_600).sizeDp(24).paddingDp(4));
                action.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View view) {
                        PopupMenu popup = new PopupMenu(getActivity(), action);
                        popup.inflate(R.menu.attachment);
                        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

                            @Override
                            public boolean onMenuItemClick(MenuItem menuItem) {
                                switch(menuItem.getItemId()) {
                                    case R.id.save_attachment:
                                        saveAttachment(attachment);
                                        return true;
                                    default:
                                        return false;
                                }
                            }
                        });
                        popup.show();
                    }
                });
                final Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(AttachmentProvider.getUriForAttachment(mFolderName, mMessageId, partIndex));
                i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
                a.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View view) {
                        startActivity(i);
                    }
                });
                attachments.addView(a);
            }
        }
        // Prepare fields for replying
        mIsAnonymous = email.isAnonymous();
    } catch (MessagingException e) {
        // TODO Handle
        e.printStackTrace();
    } catch (PasswordException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (GeneralSecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    if (BoteHelper.isOutbox(mFolderName)) {
        ((TextView) v.findViewById(R.id.email_status)).setText(BoteHelper.getEmailStatusText(getActivity(), email, true));
        v.findViewById(R.id.email_status_row).setVisibility(View.VISIBLE);
    }
}
Also used : Address(javax.mail.Address) MessagingException(javax.mail.MessagingException) GeneralSecurityException(java.security.GeneralSecurityException) MenuItem(android.view.MenuItem) Intent(android.content.Intent) IOException(java.io.IOException) ImageView(android.widget.ImageView) View(android.view.View) TextView(android.widget.TextView) ContentAttachment(i2p.bote.android.util.ContentAttachment) PasswordException(i2p.bote.fileencryption.PasswordException) Bitmap(android.graphics.Bitmap) Part(javax.mail.Part) TextView(android.widget.TextView) ImageView(android.widget.ImageView) IconicsDrawable(com.mikepenz.iconics.IconicsDrawable) LinearLayout(android.widget.LinearLayout) PopupMenu(android.support.v7.widget.PopupMenu)

Example 7 with ContentAttachment

use of i2p.bote.android.util.ContentAttachment in project i2p.i2p-bote by i2p.

the class AttachmentProviderTests method openFileWithValidImageUri.

@Test
public void openFileWithValidImageUri() throws Exception {
    ContentAttachment attachment = createImageAttachment();
    Uri uri = createEmailWithAttachment(attachment);
    openFileWithValidUri(attachment, uri);
    assertThat("Image could not be decoded", BitmapFactory.decodeStream(getMockContentResolver().openInputStream(uri)), is(notNullValue()));
}
Also used : ContentAttachment(i2p.bote.android.util.ContentAttachment) Uri(android.net.Uri) LargeTest(android.test.suitebuilder.annotation.LargeTest) Test(org.junit.Test)

Example 8 with ContentAttachment

use of i2p.bote.android.util.ContentAttachment in project i2p.i2p-bote by i2p.

the class AttachmentProviderTests method createAttachment.

private ContentAttachment createAttachment(final String fileName, final String mimeType, final byte[] content) throws Exception {
    Part part = new MimeBodyPart();
    part.setDataHandler(new DataHandler(new DataSource() {

        @Override
        public InputStream getInputStream() throws IOException {
            return new ByteArrayInputStream(content);
        }

        @Override
        public OutputStream getOutputStream() throws IOException {
            throw new IOException("Cannot write to attachments");
        }

        @Override
        public String getContentType() {
            return mimeType;
        }

        @Override
        public String getName() {
            return fileName;
        }
    }));
    part.setFileName(fileName);
    return new ContentAttachment(getMockContext(), part);
}
Also used : ContentAttachment(i2p.bote.android.util.ContentAttachment) ByteArrayInputStream(java.io.ByteArrayInputStream) MimeBodyPart(javax.mail.internet.MimeBodyPart) Part(javax.mail.Part) DataHandler(javax.activation.DataHandler) IOException(java.io.IOException) MimeBodyPart(javax.mail.internet.MimeBodyPart) DataSource(javax.activation.DataSource)

Aggregations

ContentAttachment (i2p.bote.android.util.ContentAttachment)8 Uri (android.net.Uri)5 LargeTest (android.test.suitebuilder.annotation.LargeTest)5 Test (org.junit.Test)5 View (android.view.View)2 ImageView (android.widget.ImageView)2 TextView (android.widget.TextView)2 IconicsDrawable (com.mikepenz.iconics.IconicsDrawable)2 IOException (java.io.IOException)2 Part (javax.mail.Part)2 Intent (android.content.Intent)1 Cursor (android.database.Cursor)1 Bitmap (android.graphics.Bitmap)1 PopupMenu (android.support.v7.widget.PopupMenu)1 MenuItem (android.view.MenuItem)1 LinearLayout (android.widget.LinearLayout)1 ContactsCompletionView (i2p.bote.android.widget.ContactsCompletionView)1 PasswordException (i2p.bote.fileencryption.PasswordException)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 FileNotFoundException (java.io.FileNotFoundException)1