package com.kescoode.xmail.ui.fragment; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.os.Bundle; import android.os.RemoteException; import android.support.v7.app.ActionBar; import android.text.TextUtils; import android.view.*; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import butterknife.ButterKnife; import butterknife.InjectView; import com.kescoode.adk.device.KeyBoard; import com.kescoode.adk.view.Views; import com.kescoode.xmail.R; import com.kescoode.xmail.controller.MailManager; import com.kescoode.xmail.domain.Account; import com.kescoode.xmail.domain.MailBuilder; import com.kescoode.xmail.exception.XDynamicException; import com.kescoode.xmail.ui.activity.InformationActivity; import com.kescoode.xmail.ui.activity.MailOperationActivity; import com.kescoode.xmail.ui.fragment.internal.AppFragment; import java.io.File; import java.util.ArrayList; import java.util.List; /** * 撰写邮件页面 * * @author Kesco Lin */ public class MailWriteFragment extends AppFragment<MailOperationActivity> { private static final int REQUEST_CODE_FILE = 1345; @InjectView(R.id.tv_sender) TextView tvSender; @InjectView(R.id.et_to) EditText etTo; @InjectView(R.id.et_subject) EditText etSubject; @InjectView(R.id.et_body) EditText etBody; @InjectView(R.id.ll_content) LinearLayout llContent; private Account account; private List<AttachmentHolder> attachHolders = new ArrayList<>(); public static MailWriteFragment newInstance(long accountId) { MailWriteFragment fragment = new MailWriteFragment(); Bundle args = new Bundle(); args.putLong("account_id", accountId); fragment.setArguments(args); return fragment; } public MailWriteFragment() { /* Empty */ } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { long id = getArguments().getLong("account_id", -1L); account = MailManager.getSingleTon(getAct()).getAccount(id); if (id == -1L) { throw new XDynamicException("Error account id: %d", id); } } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_mail_write, container, false); ButterKnife.inject(this, view); return view; } @Override protected void onActAttachOnce(MailOperationActivity activity) { ActionBar bar = activity.getSupportActionBar(); bar.setDisplayHomeAsUpEnabled(true); bar.setTitle(R.string.write_email); setHasOptionsMenu(true); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); tvSender.setText(account.getUserEmail()); etTo.requestFocus(); KeyBoard.showSoftKeyBoardForce(getAct()); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public void onResume() { super.onResume(); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.fragment_mail_write_actions, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: KeyBoard.hideSoftKeyBoardForce(getAct(), etTo); finish(); return true; case R.id.action_attachment: openFileBroswer(); return true; case R.id.action_send: sendMail(); finish(); return true; case R.id.action_about: InformationActivity.startAbout(getAct()); return true; } return super.onOptionsItemSelected(item); } private void openFileBroswer() { KeyBoard.hideSoftKeyBoardForce(getAct(), etTo); Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("gagt/sdf"); try { startActivityForResult(intent, REQUEST_CODE_FILE); } catch (ActivityNotFoundException e) { // TODO: 添加自己的文件处理器 } } private void addAttachment(String path) { View attachment = LayoutInflater.from(getAct()).inflate(R.layout.item_attachment_list, null); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.setMargins(getResources().getDimensionPixelSize(R.dimen.item_mail_write_vertical_margin), 0, getResources().getDimensionPixelSize(R.dimen.item_mail_attachment_horizontal_right_margin), 0); attachment.setLayoutParams(layoutParams); TextView tv = Views.findById(attachment, R.id.tv_attachment); File file = new File(path); tv.setText(file.getName()); AttachmentHolder holder = new AttachmentHolder(attachment, path); attachment.setOnClickListener(holder); attachHolders.add(holder); llContent.addView(attachment); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_FILE && resultCode == Activity.RESULT_OK) { addAttachment(data.getData().getPath()); } } private void sendMail() { String to = etTo.getText().toString().trim(); String subject = etSubject.getText().toString().trim(); String body = etBody.getText().toString(); if (TextUtils.isEmpty(to) || TextUtils.isEmpty(subject) || TextUtils.isEmpty(body)) { // TODO: 加入这部分的处理 return; } MailBuilder builder = new MailBuilder(); builder.setToList(to) .setSubject(subject) .setContent(body); if (attachHolders.size() != 0) { for (AttachmentHolder holder : attachHolders) { builder.addAttachment(holder.path); } } try { getAct().mailService.sendMail(account.getId(), builder); } catch (RemoteException e) { e.printStackTrace(); // TODO: 加入错误处理 } } private void finish() { KeyBoard.hideSoftKeyBoardForce(getAct(), etTo); getAct().finish(); } private class AttachmentHolder implements View.OnClickListener { private View attach; protected final String path; public AttachmentHolder(View attach, String path) { this.attach = attach; this.path = path; } @Override public void onClick(View v) { attachHolders.remove(this); llContent.removeView(attach); } } }