package com.aiyou.bbs;
import java.util.ArrayList;
import com.aiyou.BaseActivity;
import com.aiyou.R;
import com.aiyou.bbs.bean.Mail;
import com.aiyou.bbs.bean.Mailbox.MailboxType;
import com.aiyou.bbs.utils.BBSManager;
import com.aiyou.utils.ActivityFunc;
import com.aiyou.utils.AiYouManager;
import com.aiyou.utils.JsonHelper;
import com.aiyou.utils.NetWorkManager;
import com.aiyou.utils.SwitchManager;
import com.aiyou.utils.thread.ThreadUtils;
import com.aiyou.utils.time.TimeUtils;
import com.aiyou.view.ScrollTextView;
import com.aiyou.viewLargeImage.ViewLargeImageActivity;
import external.otherview.CircleImageView;
import external.otherview.Win8ProgressBar;
import external.smartimageview.SmartImageView;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.inputmethod.EditorInfo;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebSettings.PluginState;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;
import android.widget.ImageView.ScaleType;
/**
* 显示Mail内容
*
* @author sollian
*/
public class BBSMailActivity extends BaseActivity {
public static final String KEY_MAIL = "mail";
private static final int MSG_MAIL_FORWARD = 0;
private static final int MSG_MAIL = 1;
private static final int MSG_ERROR = -1;
private static final String KEY_DATA = "data";
private SwitchManager mSwitchMgr;
private AiYouManager mIUMgr;
private ArrayList<String> mImgUrlList = new ArrayList<>();
private int mImgId = 0;
/**
* mail变量
*/
private Mail mMail;
/**
* 存放webview
*/
private ArrayList<WebView> mWebViewList = new ArrayList<>();
private ScrollTextView mTitleSTV;
private CircleImageView mFaceCIV;
private TextView mAuthorTV, mDateTV;
private LinearLayout mContentLLayout;
// 进度条
private FrameLayout mProgressFLayout;
private Win8ProgressBar mProgressBar;
// 转寄
private EditText mForwardET;
private Handler mHandler = new Handler(new Handler.Callback() {
public boolean handleMessage(Message msg) {
if (MSG_MAIL == msg.what) {
if (mMail != null) {
showContent();
}
} else if (MSG_MAIL_FORWARD == msg.what) {
Toast.makeText(getBaseContext(), "转发成功", Toast.LENGTH_SHORT)
.show();
} else if (MSG_ERROR == msg.what) {
Bundle data = msg.getData();
String strError = data.getString(KEY_DATA);
if (strError == null) {
strError = NetWorkManager.MSG_NONET;
}
// 连接服务器失败
Toast.makeText(getBaseContext(), strError, Toast.LENGTH_SHORT)
.show();
}
showProgress(false);
return true;
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSwitchMgr = SwitchManager.getInstance(getBaseContext());
if (mSwitchMgr.isNightModeEnabled()) {
// 夜间模式
this.setTheme(R.style.ThemeNight);
} else {
// 日间模式
this.setTheme(R.style.ThemeDay);
}
setContentView(R.layout.activity_bbs_mail);
init();
Intent intent = getIntent();
mMail = (Mail) intent.getSerializableExtra(KEY_MAIL);
mTitleSTV.setText(mMail.title);
startThread(mMail.index, null);
}
/**
* 启动线程的方法
*
* @param index
* @param userId
*/
private void startThread(int index, String userId) {
showProgress(true);
if (null == userId) {
// 获取邮件
threadGetMail(index);
} else {
// 转发邮件
threadForwardMail(index, userId);
}
}
/**
* 显示内容的方法
*/
private void showContent() {
/**
* 设置头像
*/
if (mSwitchMgr.isFaceEnabled()) {
if (null != mMail.user) {
// 头像
if (null != mMail.user.face_url) {
mFaceCIV.setImageUrl(mMail.user.face_url);
} else {
mFaceCIV.setImageResource(R.drawable.iu_default_green);
}
mFaceCIV.setTag(mMail.user);
}
} else {
mFaceCIV.setVisibility(View.GONE);
}
/**
* 设置用户ID
*/
if (mMail.user != null) {
mAuthorTV.setText(mMail.user.id);
}
if (mSwitchMgr.isNightModeEnabled()) {
mAuthorTV.setTextColor(Color.parseColor("#00aaaa"));
} else {
mAuthorTV.setTextColor(Color.BLUE);
}
/**
* 时间
*/
mDateTV.setText(TimeUtils.getLocalTime(mMail.post_time));
/**
* 内容
*/
processContent(mContentLLayout, JsonHelper.toHtml(mMail, false));
}
/**
* 显示内容
*
* @param ll
* @param html
*/
private void processContent(LinearLayout ll, String[] html) {
String[] array = html[0].split("<image");
int length = array.length;
mImgUrlList.clear();
String str;
String strHtml;
int index;
for (int i = 0; i < length; i++) {
str = array[i].trim();
if (i != 0 && str.startsWith("=")) {
index = str.indexOf(">");
String strImg = str.substring(1, index);
// 图片
processImage(ll, strImg);
strHtml = str.substring(index + 1).trim();
if (!"".equals(strHtml)) {
// 网页
processWebView(ll, strHtml);
}
} else {
// 网页
processWebView(ll, str);
}
}
ll.invalidate();
}
/**
* 显示图片
*
* @param ll
* @param url
*/
private void processImage(LinearLayout ll, String url) {
SmartImageView siv = new SmartImageView(this);
siv.setScaleType(ScaleType.CENTER_CROP);
LayoutParams param = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
siv.setMaxWidth(mIUMgr.dip2px(200));
siv.setMaxHeight(mIUMgr.dip2px(300));
siv.setLayoutParams(param);
siv.setBackgroundColor(Color.WHITE);
siv.setAdjustViewBounds(true);
if (mSwitchMgr.isNightModeEnabled()) {
siv.setColorFilter(Color.GRAY,
android.graphics.PorterDuff.Mode.MULTIPLY);
}
siv.setImageUrl(url, R.drawable.iu_default_gray,
R.drawable.iu_default_green);
siv.setTag(mImgId++ + "");
// 将图片地址添加到listImgSrc中
mImgUrlList.add(url);
ll.addView(siv);
// 单击图片查看大图
siv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(BBSMailActivity.this,
ViewLargeImageActivity.class);
intent.putExtra(ViewLargeImageActivity.KEY_CUR_SEL,
(String) view.getTag());
intent.putExtra(ViewLargeImageActivity.KEY_URL_LIST,
mImgUrlList);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
ActivityFunc.startActivity(BBSMailActivity.this, intent);
}
});
}
/**
* 显示webview
*
* @param ll
* @param html
*/
@SuppressWarnings("deprecation")
@SuppressLint("SetJavaScriptEnabled")
private void processWebView(LinearLayout ll, String html) {
html = html.trim().replaceAll("\n", "<br/>");
html = "<body "
// +
// "style=\"text-align:justify;text-justify:distribute-all-lines;"
+ "\">" + html + "</body>";
if (mSwitchMgr.isNightModeEnabled()) {
html = "<style type=\"text/css\">body{color:#888888}a:link{color:#00aaaa}</style>"
+ html;
} else {
html = "<style type=\"text/css\">body{color:#000000}</style>"
+ html;
}
WebView wv = new WebView(this);
WebSettings setting = wv.getSettings();
setting.setJavaScriptEnabled(true);
setting.setAllowFileAccess(true);
setting.setAppCacheEnabled(true);
setting.setLoadsImagesAutomatically(true);
setting.setPluginState(PluginState.ON);
// 设置缩放比例
wv.setInitialScale(BBSManager.getInstance(getBaseContext())
.getWebViewScaleSize());
// 设置背景色
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
wv.setBackgroundColor(0x01000000);
} else {
if (mSwitchMgr.isNightModeEnabled()) {
wv.setBackgroundColor(Color.parseColor("#111111"));
} else {
wv.setBackgroundColor(Color.parseColor("#ffffff"));
}
}
// 滚动条不显示
wv.setHorizontalScrollBarEnabled(false);
wv.setVerticalScrollBarEnabled(false);
mWebViewList.add(wv);
wv.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);
ll.addView(wv);
}
/**
* 回复
*
* @param view
*/
public void onReply(View view) {
Intent intent = new Intent(BBSMailActivity.this, BBSWriteActivity.class);
intent.putExtra(BBSWriteActivity.NEW_MAIL, mMail);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, 0);
}
/**
* 转寄
*
* @param view
*/
public void onForward(View view) {
if (View.GONE == mForwardET.getVisibility()) {
mForwardET.setVisibility(View.VISIBLE);
} else {
// 转寄
String strId = mForwardET.getText().toString().trim();
if ("".equals(strId)) {
Toast.makeText(getBaseContext(), "好友为空", Toast.LENGTH_SHORT)
.show();
} else {
AiYouManager.viewInputMethod(BBSMailActivity.this, false,
mForwardET);
startThread(mMail.index, strId);
mForwardET.setVisibility(View.GONE);
}
}
}
public void onClick(View view) {
int nId = view.getId();
if (R.id.activity_bbsmail_civ_face == nId) {
// 点击头像,查看用户信息
ActivityFunc.startActivity(BBSMailActivity.this,
BBSUserInfoActivity.class, mMail.user, false);
}
}
/**
* 获取邮件的线程 由 {@link #startThread(int, String)} 启动
*
* @param index
*/
private void threadGetMail(final int index) {
if (!NetWorkManager.getInstance(getBaseContext()).isNetAvailable()) {
if (null != mHandler) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
ThreadUtils.execute(new Runnable() {
public void run() {
String strJson = Mail.getMail(BBSMailActivity.this,
MailboxType.INBOX, index);
if (TextUtils.isEmpty(strJson)) {
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
// 获取内容
// 检查返回的是否是错误信息
String strError = JsonHelper.checkError(strJson);
if (null != strError) {
// 是 错误信息
if (mHandler != null) {
Message msg = mHandler.obtainMessage(MSG_ERROR);
Bundle data = msg.getData();
data.putString(KEY_DATA, strError);
mHandler.sendMessage(msg);
}
return;
}
// 将json数据解析为元数据
mMail = new Mail(strJson);
if (null != mHandler) {
mHandler.sendEmptyMessage(MSG_MAIL);
}
}
});
}
/**
* 转寄邮件的线程 由 {@link #startThread(int, String)} 启动
*
* @param index
* @param userId
*/
private void threadForwardMail(final int index, final String userId) {
if (!NetWorkManager.getInstance(getBaseContext()).isNetAvailable()) {
if (null != mHandler) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
ThreadUtils.execute(new Runnable() {
@Override
public void run() {
String strJson = Mail.forwardMail(BBSMailActivity.this, index,
userId);
if (TextUtils.isEmpty(strJson)) {
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
// 检查返回的是否是错误信息
String strError = JsonHelper.checkError(strJson);
if (null != strError) {
// 是 错误信息
if (mHandler != null) {
Message msg = mHandler.obtainMessage(MSG_ERROR);
Bundle data = msg.getData();
data.putString(KEY_DATA, strError);
mHandler.sendMessage(msg);
}
return;
}
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_MAIL_FORWARD);
}
}
});
}
private void init() {
mIUMgr = AiYouManager.getInstance(getBaseContext());
/**
* 背景图片
*/
ImageView iv_background = (ImageView) findViewById(R.id.activity_bbsmail_iv_background);
LinearLayout ll_container = (LinearLayout) findViewById(R.id.activity_bbsmail_ll_container);
// 是否是简约模式
if (mSwitchMgr.isSimpleModeEnabled()) {
iv_background.setVisibility(View.GONE);
if (mSwitchMgr.isNightModeEnabled()) {
ll_container.setBackgroundColor(getResources().getColor(
R.color.bbs_background_night));
} else {
ll_container.setBackgroundColor(getResources().getColor(
R.color.bbs_background_day));
}
}
mTitleSTV = (ScrollTextView) findViewById(R.id.activity_bbsmail_stv_title);
mFaceCIV = (CircleImageView) findViewById(R.id.activity_bbsmail_civ_face);
mAuthorTV = (TextView) findViewById(R.id.activity_bbsmail_tv_author);
mDateTV = (TextView) findViewById(R.id.activity_bbsmail_tv_date);
mContentLLayout = (LinearLayout) findViewById(R.id.activity_bbsmail_ll_content);
/**
* 进度条
*/
mProgressFLayout = (FrameLayout) findViewById(R.id.fl_progress);
mProgressBar = (Win8ProgressBar) findViewById(R.id.progress_bar);
/**
* 转寄
*/
mForwardET = (EditText) findViewById(R.id.activity_bbsmail_et_forward);
mForwardET.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
switch (actionId) {
case EditorInfo.IME_ACTION_SEND:
onForward(null);
break;
}
return true;
}
});
}
/**
* 设置cpb_progress的状态和是否显示
*
* @param flag
*/
private void showProgress(boolean flag) {
if (flag) {
mProgressFLayout.setVisibility(View.VISIBLE);
mProgressBar.start();
} else {
mProgressFLayout.setVisibility(View.GONE);
mProgressBar.stop();
}
}
/**
* 左上角返回按钮
*/
public void selfFinish(View view) {
scrollToFinishActivity();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 按下键盘上返回按钮
if (keyCode == KeyEvent.KEYCODE_BACK) {
selfFinish(null);
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onDestroy() {
super.onDestroy();
mImgUrlList.clear();
mImgUrlList = null;
mContentLLayout.removeAllViews();
clearWebView();
mMail = null;
mWebViewList = null;
mHandler.removeCallbacksAndMessages(null);
mHandler = null;
System.gc();
}
/**
* 清理webview
*/
@SuppressLint("NewApi")
private void clearWebView() {
if (0 != mWebViewList.size()) {
for (WebView wv : mWebViewList) {
if (null != wv) {
if (Build.VERSION.SDK_INT >= 11) {
wv.onPause();
}
wv.removeAllViews();
wv.destroy();
}
}
}
mWebViewList.clear();
}
}