package com.kescoode.xmail.ui.fragment;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.BackgroundColorSpan;
import android.view.*;
import android.widget.TextView;
import butterknife.ButterKnife;
import butterknife.InjectView;
import com.fsck.k9.mail.Address;
import com.fsck.k9.mail.Message;
import com.fsck.k9.mail.MessagingException;
import com.kescoode.adk.graphics.MaterialColorPalette;
import com.kescoode.adk.ui.CircleLogo;
import com.kescoode.xmail.R;
import com.kescoode.xmail.controller.MailManager;
import com.kescoode.xmail.db.EmailDao;
import com.kescoode.xmail.db.FolderDao;
import com.kescoode.xmail.domain.LocalEmail;
import com.kescoode.xmail.domain.LocalFolder;
import com.kescoode.xmail.ui.activity.InformationActivity;
import com.kescoode.xmail.ui.activity.MailOperationActivity;
import com.kescoode.xmail.ui.fragment.internal.AppFragment;
import com.kescoode.xmail.ui.widget.MailWebView;
import java.text.DateFormat;
/**
* 邮件详情页面
*
* @author Kesco Lin
*/
public class MailDetailFragment extends AppFragment<MailOperationActivity> {
@InjectView(R.id.tv_title)
TextView tvTitle;
@InjectView(R.id.tv_sender)
TextView tvSender;
@InjectView(R.id.tv_receivers)
TextView tvReceivers;
@InjectView(R.id.tv_date)
TextView tvDate;
@InjectView(R.id.cl_people)
CircleLogo clLogo;
@InjectView(R.id.wb_mail)
MailWebView wbMail;
private LocalEmail mail;
public static MailDetailFragment newInstance(long mailId) {
MailDetailFragment fragment = new MailDetailFragment();
Bundle args = new Bundle();
args.putLong("mail_id", mailId);
fragment.setArguments(args);
return fragment;
}
public MailDetailFragment() {
/* Empty */
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
long id = getArguments().getLong("mail_id", 0);
MailManager mailManager = MailManager.getSingleTon(getActivity());
FolderDao folderDao = new FolderDao(getActivity());
LocalFolder folder = folderDao.selectFolder4Name(mailManager.getAccounts().get(0), "INBOX");
EmailDao emailDao = new EmailDao(getActivity());
mail = emailDao.selectMailsFromId(folder, id);
}
}
@Override
protected void onActAttachOnce(MailOperationActivity activity) {
ActionBar bar = activity.getSupportActionBar();
bar.setDisplayShowTitleEnabled(false);
bar.setDisplayHomeAsUpEnabled(true);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_mail_detail, container, false);
ButterKnife.inject(this, view);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
/* 显示主题 */
StringBuilder sBuilder = new StringBuilder();
String folder = mail.getFolder().getName();
sBuilder.append(mail.getSubject())
.append(" ")
.append(folder);
SpannableString sString = new SpannableString(sBuilder.toString());
sString.setSpan(new BackgroundColorSpan(getResources().getColor(R.color.orange_light)),
sString.length() - folder.length(), sString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
sString.setSpan(new AbsoluteSizeSpan(getResources().getDimensionPixelSize(R.dimen.item_mail_list_preview_text_size)),
sString.length() - folder.length(), sString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tvTitle.setText(sString);
/* 显示发件人 */
Address[] senders = mail.getFrom();
if (0 != senders.length) {
String from = senders[0].getPersonal();
tvSender.setText(from);
clLogo.setLogoColor(MaterialColorPalette.randomColor());
clLogo.setLogoText(from.substring(0, 1));
}
/* 显示日期 */
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getAct());
tvDate.setText(dateFormat.format(mail.getInternalDate()));
try {
/* 显示收件人 */
Address[] recievers = mail.getRecipients(Message.RecipientType.TO);
StringBuilder builder = new StringBuilder();
builder.append(getResources().getString(R.string.message_compose_quote_header_to));
for (Address address : recievers) {
String to;
if (TextUtils.isEmpty(address.getPersonal())) {
to = address.getAddress();
} else {
to = address.getAddress();
}
builder.append(to);
builder.append(";");
}
tvReceivers.setText(builder.toString());
/* 显示Web信息 */
wbMail.blockNetworkData(false);
wbMail.loadLocalData(mail.getTextForDisplay());
if (Build.VERSION_CODES.KITKAT < Build.VERSION.SDK_INT) {
wbMail.textAutoSize(true);
}
} catch (MessagingException e) {
/* 永远不会发生的异常 */
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_mail_detail_actions, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getAct().finish();
return true;
case R.id.action_about:
InformationActivity.startAbout(getAct());
return true;
}
return super.onOptionsItemSelected(item);
}
}