196 lines
7.2 KiB
Java
196 lines
7.2 KiB
Java
package i2p.bote.android;
|
|
|
|
import android.content.Intent;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.Typeface;
|
|
import android.os.Bundle;
|
|
import android.support.v4.app.Fragment;
|
|
import android.view.LayoutInflater;
|
|
import android.view.Menu;
|
|
import android.view.MenuInflater;
|
|
import android.view.MenuItem;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.ImageView;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.TableRow;
|
|
import android.widget.TextView;
|
|
import android.widget.Toast;
|
|
|
|
import java.io.IOException;
|
|
import java.security.GeneralSecurityException;
|
|
import java.text.DateFormat;
|
|
|
|
import javax.mail.Address;
|
|
import javax.mail.MessagingException;
|
|
|
|
import i2p.bote.android.util.BoteHelper;
|
|
import i2p.bote.email.Email;
|
|
import i2p.bote.fileencryption.PasswordException;
|
|
|
|
public class ViewEmailFragment extends Fragment {
|
|
private String mFolderName;
|
|
private String mMessageId;
|
|
|
|
private boolean mIsAnonymous;
|
|
|
|
public static ViewEmailFragment newInstance(
|
|
String folderName, String messageId) {
|
|
ViewEmailFragment f = new ViewEmailFragment();
|
|
|
|
Bundle args = new Bundle();
|
|
args.putString("folderName", folderName);
|
|
args.putString("messageId", messageId);
|
|
f.setArguments(args);
|
|
|
|
return f;
|
|
}
|
|
|
|
@Override
|
|
public void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
setHasOptionsMenu(true);
|
|
mFolderName = getArguments() != null ? getArguments().getString("folderName") : "inbox";
|
|
mMessageId = getArguments() != null ? getArguments().getString("messageId") : "1";
|
|
}
|
|
|
|
@Override
|
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
|
Bundle savedInstanceState) {
|
|
View v = inflater.inflate(R.layout.fragment_view_email, container, false);
|
|
|
|
try {
|
|
Email e = BoteHelper.getEmail(mFolderName, mMessageId);
|
|
if (e != null) {
|
|
displayEmail(e, v);
|
|
} else {
|
|
TextView subject = (TextView) v.findViewById(R.id.email_subject);
|
|
subject.setText(R.string.email_not_found);
|
|
}
|
|
} catch (PasswordException e) {
|
|
// TODO: Handle
|
|
e.printStackTrace();
|
|
}
|
|
|
|
return v;
|
|
}
|
|
|
|
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 recipients = (LinearLayout) v.findViewById(R.id.email_recipients);
|
|
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);
|
|
|
|
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[] emailRecipients = email.getToAddresses();
|
|
if (emailRecipients != null) {
|
|
for (Address recipient : emailRecipients) {
|
|
TextView tv = new TextView(getActivity());
|
|
tv.setText(BoteHelper.getDisplayAddress(recipient.toString()));
|
|
tv.setTextAppearance(getActivity(), R.style.TextAppearance_AppCompat_Secondary);
|
|
recipients.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());
|
|
|
|
// 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));
|
|
((TableRow) v.findViewById(R.id.email_status_row)).setVisibility(View.VISIBLE);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
|
inflater.inflate(R.menu.view_email, menu);
|
|
if (mIsAnonymous)
|
|
menu.findItem(R.id.action_reply).setVisible(false);
|
|
}
|
|
|
|
@Override
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
|
switch (item.getItemId()) {
|
|
case R.id.action_reply:
|
|
case R.id.action_reply_all:
|
|
case R.id.action_forward:
|
|
Intent nei = new Intent(getActivity(), NewEmailActivity.class);
|
|
nei.putExtra(NewEmailFragment.QUOTE_MSG_FOLDER, mFolderName);
|
|
nei.putExtra(NewEmailFragment.QUOTE_MSG_ID, mMessageId);
|
|
NewEmailFragment.QuoteMsgType type = null;
|
|
switch (item.getItemId()) {
|
|
case R.id.action_reply:
|
|
type = NewEmailFragment.QuoteMsgType.REPLY;
|
|
break;
|
|
case R.id.action_reply_all:
|
|
type = NewEmailFragment.QuoteMsgType.REPLY_ALL;
|
|
break;
|
|
case R.id.action_forward:
|
|
type = NewEmailFragment.QuoteMsgType.FORWARD;
|
|
}
|
|
nei.putExtra(NewEmailFragment.QUOTE_MSG_TYPE, type);
|
|
startActivity(nei);
|
|
return true;
|
|
|
|
default:
|
|
return super.onOptionsItemSelected(item);
|
|
}
|
|
}
|
|
}
|