package com.juns.wechat.view.fragment;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Hashtable;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.easemob.chat.EMChatManager;
import com.easemob.chat.EMConversation;
import com.easemob.chat.EMMessage;
import com.juns.wechat.Constants;
import com.juns.wechat.GloableParams;
import com.juns.wechat.MainActivity;
import com.juns.wechat.R;
import com.juns.wechat.adpter.NewMsgAdpter;
import com.juns.wechat.bean.GroupInfo;
import com.juns.wechat.bean.PublicMsgInfo;
import com.juns.wechat.bean.User;
import com.juns.wechat.chat.ChatActivity;
import com.juns.wechat.common.NetUtil;
import com.juns.wechat.common.Utils;
import com.juns.wechat.view.activity.PublishMsgListActivity;
//消息
public class Fragment_Msg extends Fragment implements OnClickListener,
OnItemClickListener {
private Activity ctx;
private View layout, layout_head;;
public RelativeLayout errorItem;
public TextView errorText;
private ListView lvContact;
private NewMsgAdpter adpter;
private List<EMConversation> conversationList = new ArrayList<EMConversation>();
private MainActivity parentActivity;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (layout == null) {
ctx = this.getActivity();
parentActivity = (MainActivity) getActivity();
layout = ctx.getLayoutInflater().inflate(R.layout.fragment_msg,
null);
lvContact = (ListView) layout.findViewById(R.id.listview);
errorItem = (RelativeLayout) layout
.findViewById(R.id.rl_error_item);
errorText = (TextView) errorItem
.findViewById(R.id.tv_connect_errormsg);
setOnListener();
} else {
ViewGroup parent = (ViewGroup) layout.getParent();
if (parent != null) {
parent.removeView(layout);
}
}
return layout;
}
@Override
public void onResume() {
super.onResume();
conversationList.clear();
initViews();
}
/**
* 刷新页面
*/
public void refresh() {
conversationList.clear();
initViews();
}
private void initViews() {
conversationList.addAll(loadConversationsWithRecentChat());
if (conversationList != null && conversationList.size() > 0) {
layout.findViewById(R.id.txt_nochat).setVisibility(View.GONE);
adpter = new NewMsgAdpter(getActivity(), conversationList);
// TODO 加载订阅号信息 ,增加一个Item
// if (GloableParams.isHasPulicMsg) {
EMConversation nee = new EMConversation("100000");
conversationList.add(0, nee);
String time = Utils.getValue(getActivity(), "Time");
String content = Utils.getValue(getActivity(), "Content");
time = "下午 02:45";
content = "[腾讯娱乐]《炉石传说》荣列中国区App Store年度精选";
PublicMsgInfo msgInfo = new PublicMsgInfo();
msgInfo.setContent(content);
msgInfo.setMsg_ID("12");
msgInfo.setTime(time);
adpter.setPublicMsg(msgInfo);
// }
lvContact.setAdapter(adpter);
} else {
layout.findViewById(R.id.txt_nochat).setVisibility(View.VISIBLE);
}
}
/**
* 获取所有会话
*
* @param context
* @return +
*/
private List<EMConversation> loadConversationsWithRecentChat() {
// 获取所有会话,包括陌生人
Hashtable<String, EMConversation> conversations = EMChatManager
.getInstance().getAllConversations();
List<EMConversation> list = new ArrayList<EMConversation>();
// 过滤掉messages seize为0的conversation
for (EMConversation conversation : conversations.values()) {
if (conversation.getAllMessages().size() != 0)
list.add(conversation);
}
// 排序
sortConversationByLastChatTime(list);
return list;
}
/**
* 根据最后一条消息的时间排序
*
* @param usernames
*/
private void sortConversationByLastChatTime(
List<EMConversation> conversationList) {
Collections.sort(conversationList, new Comparator<EMConversation>() {
@Override
public int compare(final EMConversation con1,
final EMConversation con2) {
EMMessage con2LastMessage = con2.getLastMessage();
EMMessage con1LastMessage = con1.getLastMessage();
if (con2LastMessage.getMsgTime() == con1LastMessage
.getMsgTime()) {
return 0;
} else if (con2LastMessage.getMsgTime() > con1LastMessage
.getMsgTime()) {
return 1;
} else {
return -1;
}
}
});
}
private void setOnListener() {
lvContact.setOnItemClickListener(this);
errorItem.setOnClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
if (adpter.PublicMsg != null && position == 0) {
// 打开订阅号列表页面
Utils.start_Activity(getActivity(), PublishMsgListActivity.class);
} else {
((MainActivity) getActivity()).updateUnreadLabel();
EMConversation conversation = conversationList.get(position);
Intent intent = new Intent(getActivity(), ChatActivity.class);
Hashtable<String, String> ChatRecord = adpter.getChatRecord();
if (ChatRecord != null) {
if (conversation.isGroup()) {
GroupInfo info = GloableParams.GroupInfos.get(conversation
.getUserName());
if (info != null) {
intent.putExtra(Constants.TYPE,
ChatActivity.CHATTYPE_GROUP);
intent.putExtra(Constants.GROUP_ID, info.getGroup_id());
intent.putExtra(Constants.NAME, info.getGroup_name());// 设置标题
getActivity().startActivity(intent);
} else {
intent.putExtra(Constants.TYPE,
ChatActivity.CHATTYPE_GROUP);
intent.putExtra(Constants.GROUP_ID, info.getGroup_id());
intent.putExtra(Constants.NAME, R.string.group_chats);// 设置标题
getActivity().startActivity(intent);
}
} else {
User user = GloableParams.Users.get(conversation
.getUserName());
if (user != null) {
intent.putExtra(Constants.NAME, user.getUserName());// 设置昵称
intent.putExtra(Constants.TYPE,
ChatActivity.CHATTYPE_SINGLE);
intent.putExtra(Constants.User_ID,
conversation.getUserName());
getActivity().startActivity(intent);
} else {
intent.putExtra(Constants.NAME, "好友");
intent.putExtra(Constants.TYPE,
ChatActivity.CHATTYPE_SINGLE);
intent.putExtra(Constants.User_ID,
conversation.getUserName());
getActivity().startActivity(intent);
}
}
}
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.rl_error_item:
NetUtil.openSetNetWork(getActivity());
break;
default:
break;
}
}
}