/**
*
*/
package com.keju.maomao.activity.news;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import java.util.Timer;
import java.util.TimerTask;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.SpannableString;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import com.keju.maomao.AsyncImageLoader;
import com.keju.maomao.AsyncImageLoader.ImageCallback;
import com.keju.maomao.Constants;
import com.keju.maomao.R;
import com.keju.maomao.SystemException;
import com.keju.maomao.activity.base.BaseActivity;
import com.keju.maomao.bean.LetterBean;
import com.keju.maomao.bean.ResponseBean;
import com.keju.maomao.helper.BusinessHelper;
import com.keju.maomao.util.ImageUtil;
import com.keju.maomao.util.NetUtil;
import com.keju.maomao.util.SharedPrefUtil;
import com.keju.maomao.util.StringUtil;
import com.keju.maomao.view.PullToRefreshListView;
import com.keju.maomao.view.PullToRefreshListView.OnRefreshListener;
import com.umeng.analytics.MobclickAgent;
/**
* 私信界面
*
* @author zhouyong
* @data 创建时间:2013-10-31 下午2:32:22
*/
public class PrivateLetterActivity extends BaseActivity implements OnClickListener {
private ImageButton ibLift;
private TextView tvTitle;
private Button btnRight;
private PullToRefreshListView lvPersonalLetter;// 聊天的listView
private ImageView ivEmoticon; // 选择表情
private EditText edtLetter; // 编辑私信
private Button btnSend; // 发送私信
private LetterAdapter letterAdapter;
private Handler iLetterHandler;
private TimerTask letterTimerTask;
private Timer letterTimer;
private List<LetterBean> letterBeans;
private int userId;
// private NewsBean newsbean;// 私信列表传递的bean
private boolean isLoaded = false;
private boolean isSend = false;
private ProgressDialog pd;
private final static int HANDLER_DATA = 11;
private int friendId;
private String nick_Name;
private String friendUrl;
// 表情
private ScrollView scrollViewFace;
private LinearLayout vFace01;
private LinearLayout vFace02;
private Boolean isCliclClear = false;//is点击清除按钮
private Map<String, Integer> faceMap = new HashMap<String, Integer>();
private int[] faceRes = new int[] { R.drawable.ic_face_001, R.drawable.ic_face_002, R.drawable.ic_face_003,
R.drawable.ic_face_004, R.drawable.ic_face_005, R.drawable.ic_face_006, R.drawable.ic_face_007,
R.drawable.ic_face_008, R.drawable.ic_face_009, R.drawable.ic_face_010, R.drawable.ic_face_011,
R.drawable.ic_face_012, R.drawable.ic_face_013, R.drawable.ic_face_014, R.drawable.ic_face_015,
R.drawable.ic_face_016 };
int haveFacePic = -1;// 一段对话中是否含有表情图片;是,0;否,-1。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// newsbean = (NewsBean)
// getIntent().getExtras().getSerializable(Constants.EXTRA_DATA);
userId = SharedPrefUtil.getUid(PrivateLetterActivity.this);
friendId = (int) getIntent().getExtras().getInt(Constants.EXTRA_DATA);
nick_Name = (String) getIntent().getExtras().getString("NICK_NAME");
friendUrl = (String) getIntent().getExtras().getString("FREIND_URL");
setContentView(R.layout.private_news_layoute);
findView();
fillData();
for (int i = 0; i < faceRes.length; i++) {
String j;
int k = i + 1;
if (k < 10) {
j = "00" + k;
} else if (k < 100) {
j = "0" + k;
} else {
j = "" + k;
}
String key = "[edu" + j + "]";
faceMap.put(key, faceRes[i]);
}
}
private void findView() {
ibLift = (ImageButton) this.findViewById(R.id.ibLeft);
btnRight = (Button) this.findViewById(R.id.btnRight);
tvTitle = (TextView) this.findViewById(R.id.tvTitle);
lvPersonalLetter = (PullToRefreshListView) this.findViewById(R.id.lvPersonalLetter);
ivEmoticon = (ImageView) this.findViewById(R.id.ivEmoticon);
edtLetter = (EditText) this.findViewById(R.id.edtLetter);
btnSend = (Button) this.findViewById(R.id.btnSend);
vFace01 = (LinearLayout) this.findViewById(R.id.view_face01);
vFace02 = (LinearLayout) this.findViewById(R.id.view_face02);
// letterAdapter = new LetterAdapter(friendUrl);
// lvPersonalLetter.setAdapter(letterAdapter);
}
private void fillData() {
fillFacePic();// 加载表情 图片
ibLift.setImageResource(R.drawable.ic_btn_left);
ibLift.setOnClickListener(this);
btnRight.setText("清除");
btnRight.setBackgroundResource(R.drawable.bg_btn_collection);
btnRight.setOnClickListener(this);
tvTitle.setText(nick_Name);
scrollViewFace = (ScrollView) this.findViewById(R.id.scroll_view_face);
ivEmoticon.setOnClickListener(this);
btnSend.setOnClickListener(this);
// PullService.isCurrActivity = true;
initNotifyHandler();
startNotifyTask();
letterBeans = new ArrayList<LetterBean>();
letterAdapter = new LetterAdapter(friendUrl);
lvPersonalLetter.setAdapter(letterAdapter);
lvPersonalLetter.setonRefreshListener(onRefreshListener);
if (NetUtil.checkNet(PrivateLetterActivity.this)) {
new ListLetterTask().execute();
} else {
showShortToast(R.string.NoSignalException);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ibLeft:
Intent intent = new Intent();
intent.putExtra("iscliclclear", isCliclClear);
setResult(RESULT_OK, intent);
finish();
break;
case R.id.ivEmoticon:// 添加表情
if (scrollViewFace.getVisibility() == View.VISIBLE) {
scrollViewFace.setVisibility(View.GONE);
} else {
scrollViewFace.setVisibility(View.VISIBLE);
}
break;
case R.id.btnRight:
// Bundle b = new Bundle();
// b.putSerializable(Constants.EXTRA_DATA, friendId);
// openActivity(FriendPersonalCenter.class, b);
if (NetUtil.checkNet(PrivateLetterActivity.this)) {
isCliclClear = true;
new ClearLetterTask().execute();
} else {
showShortToast(R.string.NoSignalException);
}
break;
case R.id.btnSend:// 发送
try {
String letterStr = edtLetter.getText().toString().trim();
if (!StringUtil.isBlank(letterStr)) {
if (!isSend) {
new SendLetter(letterStr).execute();
} else {
showShortToast("消息正在发送中...");
}
} else {
showShortToast("请您输入信息");
}
} catch (Exception e) {
}
break;
default:
break;
}
}
/**
* 加载表情图片
*/
private void fillFacePic() {
for (int i = 0; i < faceRes.length; i++) {
View emotionV = getLayoutInflater().inflate(R.layout.private__letter_face_item, null);
ImageView ivEmotion = (ImageView) emotionV.findViewById(R.id.ivFacePic);
ivEmotion.setImageResource(faceRes[i]);
emotionV.setOnClickListener(facePicOnClickListener);
emotionV.setTag(i + 1);
if (i < faceRes.length / 2) {
vFace01.addView(emotionV);
} else if (i > (faceRes.length / 2) - 1) {
vFace02.addView(emotionV);
}
}
}
/**
* 表情图片的点击事件
*/
OnClickListener facePicOnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
String j;
int insertFacePicNum = (Integer) v.getTag();
if (insertFacePicNum < 10) {
j = "00" + insertFacePicNum;
} else if (insertFacePicNum < 100) {
j = "0" + insertFacePicNum;
} else {
j = "" + insertFacePicNum;
}
String FaceName = "[edu" + j + "]";
String editStr = edtLetter.getText().toString();
String neeEditStr = editStr + FaceName;
edtLetter.setText(neeEditStr);
edtLetter.setSelection(neeEditStr.length());
}
};
/**
* 上拉刷新数据
*/
OnRefreshListener onRefreshListener = new OnRefreshListener() {
@Override
public void onRefresh() {
if (NetUtil.checkNet(PrivateLetterActivity.this)) {
new ListLetterTask().execute();
} else {
showShortToast(R.string.NoSignalException);
}
}
};
/**
* 获取私信聊天数据
*
* */
private class ListLetterTask extends AsyncTask<Void, Void, ResponseBean<LetterBean>> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showPd(R.string.loading);
}
@Override
protected ResponseBean<LetterBean> doInBackground(Void... params) {
try {
return new BusinessHelper().getLetterList(friendId, userId);
} catch (SystemException e) {
}
return null;
}
@Override
protected void onPostExecute(ResponseBean<LetterBean> result) {
super.onPostExecute(result);
dismissPd();
if (result != null) {
if (result.getStatus() != Constants.REQUEST_FAILD) {
List<LetterBean> letterList = result.getObjList();
if (letterList.size() > 0) {
letterBeans.clear();
letterBeans.addAll(letterList);
// 安时间排序
// sortNotifyListByTime(letterBeans);
letterAdapter.notifyDataSetChanged();
lvPersonalLetter.onRefreshComplete();
lvPersonalLetter.setSelection(letterBeans.size() - 1);
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(
PrivateLetterActivity.this.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
}
}
}
}
public void sortNotifyListByTime(List<LetterBean> list) {
Collections.sort(list, new Comparator<LetterBean>() {
@Override
public int compare(LetterBean obj1, LetterBean obj2) {
String time1 = obj1.getSendTime();
String time2 = obj2.getSendTime();
if (time1 != null && !"".equals(time1) && time2 != null && !"".equals(time2)) {
return compareTime(time1, time2);
} else {
return 0;
}
}
});
}
public int compareTime(String firTimeS, String secTimeS) {
try {
SimpleDateFormat chineseSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
TimeZone timeZone = TimeZone.getTimeZone("GMT+8");
chineseSdf.setTimeZone(timeZone);
Date firDate = chineseSdf.parse(firTimeS);
Date secDate = chineseSdf.parse(secTimeS);
return firDate.compareTo(secDate);
} catch (ParseException e) {
}
return 0;
}
/**
* 发送私信
*
* @author zhouyong
*
*/
private class SendLetter extends AsyncTask<Void, Void, JSONObject> {
private String letterStr;
/**
* @param letterStr
*/
public SendLetter(String letterStr) {
this.letterStr = letterStr;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
if (pd == null) {
pd = new ProgressDialog(PrivateLetterActivity.this);
}
pd.setMessage("消息发送中...");
pd.show();
}
@Override
protected JSONObject doInBackground(Void... params) {
try {
return new BusinessHelper().getSendLetter(userId, friendId, letterStr);
} catch (SystemException e) {
}
return null;
}
@Override
protected void onPostExecute(JSONObject result) {
super.onPostExecute(result);
if (pd != null) {
pd.dismiss();
}
if (result != null) {
if (result.has("status")) {
try {
int status = result.getInt("status");
if (status == Constants.REQUEST_SUCCESS) {
showShortToast("发送成功");
edtLetter.setText("");
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(
PrivateLetterActivity.this.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
if (result.has("sender_list")) {
JSONArray jsonArray = result.getJSONArray("sender_list");
JSONObject obj = jsonArray.getJSONObject(0);
if (obj != null) {
LetterBean bean = new LetterBean(obj);
if (bean != null) {
// String sendUrl = null;
String sendTime = obj.getString("sender_time");
// if(obj.has("receiver_path")){
// sendUrl =
// obj.getString("receiver_path");
// }
letterAdapter = new LetterAdapter(sendTime, friendUrl);
lvPersonalLetter.setAdapter(letterAdapter);
letterBeans.add(bean);
letterAdapter.notifyDataSetChanged();
lvPersonalLetter.onRefreshComplete();
lvPersonalLetter.setSelection(letterBeans.size() - 1);
}
}
}
} else if (status == Constants.REQUEST_FAILD) {
// showShortToast("时间超时");
// startActivity(new
// Intent(PrivateLetterActivity.this,
// LoginActivity.class).putExtra("back",
// "back"));
// finish();
} else {
showShortToast(result.getString("error"));
}
} catch (Exception e) {
}
}
}
isSend = false;
}
}
/**
* 清除聊天纪录
*
* @author zhouyong
*
*/
private class ClearLetterTask extends AsyncTask<Void, Void, JSONObject> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showPd("正在清除...");
}
@Override
protected JSONObject doInBackground(Void... params) {
try {
return new BusinessHelper().clear(userId,friendId);
} catch (SystemException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(JSONObject result) {
super.onPostExecute(result);
dismissPd();
if (result != null) {
try {
if (result.getInt("status") == Constants.REQUEST_SUCCESS) {
if (result.getString("message").equals("清除成功")) {
letterBeans.clear();
letterAdapter.notifyDataSetChanged();
showShortToast("清除成功");
} else {
showShortToast("清除失败");
}
}else{
showShortToast(R.string.connect_server_exception);
}
} catch (JSONException e) {
showShortToast(R.string.json_exception);
}
} else {
showShortToast(R.string.connect_server_exception);
}
}
}
/**
* 私信Adapter
*
* @author zhouyong
*
*/
private class LetterAdapter extends BaseAdapter {
private String sendTime;
private String sendUrl;
/**
* @param sendTime
*/
public LetterAdapter(String sendTime, String sendUrl) {
this.sendTime = sendTime;
this.sendUrl = sendUrl;
}
/**
*
*/
public LetterAdapter(String sendUrl) {
this.sendUrl = sendUrl;
}
@Override
public int getCount() {
return letterBeans.size();
}
@Override
public Object getItem(int position) {
return letterBeans.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final LetterBean bean = letterBeans.get(position);
// int sender = bean.getSender();
ViewHolder viewHolder = null;
if (userId == bean.getSenderId()) {
convertView = getLayoutInflater().inflate(R.layout.private_letter_right_item, null);
} else {
convertView = getLayoutInflater().inflate(R.layout.private_letter_left_item, null);
}
if (convertView.getTag() == null) {
viewHolder = new ViewHolder();
viewHolder.ivUserPhoto = (ImageView) convertView.findViewById(R.id.ivUserPhoto);
viewHolder.tvLetter = (TextView) convertView.findViewById(R.id.tvLetter);
viewHolder.tvSendTime = (TextView) convertView.findViewById(R.id.tvSendTime);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
String contentStr = bean.getContent();
SpannableString spannableString = null;
// 判读单个回话列表是文字还是表情头像
if (!StringUtil.isBlank(contentStr)) {
boolean isHaveFacePic = contentStr.contains("[edu");
if (isHaveFacePic == true) {
if (faceMap != null) {
spannableString = ImageUtil.changeTextToEmotions(faceMap, contentStr,
PrivateLetterActivity.this);
}
}
}
if (spannableString != null) {
viewHolder.tvLetter.setText(spannableString);
} else {
viewHolder.tvLetter.setText(contentStr);
}
// viewHolder.tvLetter.setText(bean.getContent());
if (userId == bean.getSenderId()) {
if (sendTime == null) {
viewHolder.tvSendTime.setText(bean.getSendTime());
} else {
viewHolder.tvSendTime.setText(sendTime);
}
} else {
viewHolder.tvSendTime.setText(bean.getSendTime());
}
String photoUrl = null;
if (userId == bean.getSenderId()) {
photoUrl = bean.getFriendUrl();// 发送者的图片
} else {
photoUrl = BusinessHelper.PIC_BASE_URL + sendUrl;// 接受者的图片 好友的图片
}
viewHolder.ivUserPhoto.setTag(photoUrl);
Drawable cacheDrawable = AsyncImageLoader.getInstance().loadDrawable(photoUrl, new ImageCallback() {
@Override
public void imageLoaded(Drawable imageDrawable, String imageUrl) {
ImageView ivPhoto = (ImageView) lvPersonalLetter.findViewWithTag(imageUrl);
if (ivPhoto != null) {
if (imageDrawable != null) {
ivPhoto.setImageDrawable(imageDrawable);
LetterAdapter.this.notifyDataSetChanged();
} else {
if(userId == bean.getSenderId()){
ivPhoto.setImageResource(R.drawable.bg_photo_right);
}else{
ivPhoto.setImageResource(R.drawable.bg_photo_left);
}
}
}
}
});
if (cacheDrawable != null) {
viewHolder.ivUserPhoto.setImageDrawable(cacheDrawable);
} else {
if(userId == bean.getSenderId()){
viewHolder.ivUserPhoto.setImageResource(R.drawable.bg_photo_right);
}else{
viewHolder.ivUserPhoto.setImageResource(R.drawable.bg_photo_left);
}
}
return convertView;
}
class ViewHolder {
ImageView ivUserPhoto;
TextView tvLetter;
TextView tvSendTime;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
private void initNotifyHandler() {
iLetterHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
int what = msg.what;
switch (what) {
case HANDLER_DATA:
List<LetterBean> beans = (List<LetterBean>) msg.obj;
if (beans != null) {
letterBeans.clear();
letterBeans.addAll(beans);
// sortNotifyListByTime(letterBeans);
letterAdapter.notifyDataSetChanged();
lvPersonalLetter.onRefreshComplete();
if (beans.size() > 0) {
lvPersonalLetter.setSelection(letterBeans.size() - 1);
}
}
break;
default:
break;
}
super.handleMessage(msg);
}
};
}
private void startNotifyTask() {
if (letterTimerTask == null) {
letterTimerTask = new TimerTask() {
@Override
public void run() {
try {
if (NetUtil.checkNet(PrivateLetterActivity.this)) {
if (!isLoaded) {
isLoaded = true;
BusinessHelper businessHelper = new BusinessHelper();
ResponseBean<LetterBean> result = businessHelper.getLetterList(friendId, userId);
if (result != null) {
if (result.getStatus() != Constants.REQUEST_FAILD) {
List<LetterBean> letterList = result.getObjList();
if (letterList.size() > 0) {
Message msg = new Message();
msg.what = HANDLER_DATA;
msg.obj = letterList;
iLetterHandler.sendMessage(msg);
}
}
} else {
showShortToast("链接服务器失败");
}
isLoaded = false;
}
}
} catch (Exception e) {
}
}
};
letterTimer = new Timer();
letterTimer.schedule(letterTimerTask, 0, 5 * 1000);
}
}
private void stopNotifyTimer() {
if (letterTimer != null) {
letterTimer.cancel();
letterTimer = null;
}
if (letterTimerTask != null) {
letterTimerTask = null;
}
}
@Override
protected void onResume() {
super.onResume();
MobclickAgent.onResume(this);
if (NetUtil.checkNet(this)) {
// startNotifyTask();
}
}
@Override
protected void onPause() {
super.onPause();
MobclickAgent.onPause(this);
}
@Override
public void onDestroy() {
super.onDestroy();
stopNotifyTimer();
// PullService.isCurrActivity = false;
}
}