package com.bestapp.yikuair.fragments; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ImageButton; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.Toast; import com.bestapp.yikuair.R; import com.bestapp.yikuair.database.DBOpenHelper; import com.bestapp.yikuair.utils.MessageInfo; import com.bestapp.yikuair.utils.SharedPreferencesUtil; import com.bestapp.yikuair.utils.StringWidthWeightRandom; import com.bestapp.yikuair.utils.UserInfo; public class MessageFragment extends Fragment { private ListView listView; public static MessageAdapter lstAdapter; private SharedPreferencesUtil messageSharedPre; private MessageBroadcastReceiver mbr; public static LinkedList<MessageItemInfo> messageList = new LinkedList<MessageItemInfo>(); public static LinkedList<HashMap<String, List<ChatMsgEntity>>> userList = new LinkedList<HashMap<String, List<ChatMsgEntity>>>(); public static LinkedList<HashMap<String, Boolean>> boolList = new LinkedList<HashMap<String, Boolean>>(); private DBOpenHelper dbOpenHelper; private Cursor cursor; private ImageButton rightBtn; private ImageButton leftBtn; public static RelativeLayout iv_message_default; public static RelativeLayout rl_message_list; public static MessageFragment instance = null; public RelativeLayout rl_message_layout; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { instance = this; return inflater.inflate(R.layout.main_message, null); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.e("test", "messageFragment onActivityCreated..........."); messageSharedPre = new SharedPreferencesUtil(getActivity()); if (UserInfo.db_id == null) messageSharedPre.getUserInfo(); // register broadcast if (mbr == null) { IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(MessageInfo.MessageBroadCastName); mbr = new MessageBroadcastReceiver(); getActivity().registerReceiver(mbr, intentFilter); } initView(); getDataFromShared(); } public String getNameFromDB(String dbId) { if (dbId == null) return ""; dbOpenHelper = new DBOpenHelper(getActivity()); SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); String name = ""; cursor = db.rawQuery("select * from contactsTable where dbid=?", new String[] { dbId }); if (cursor.moveToFirst()) { name = cursor.getString(2); } dbOpenHelper.close(); cursor.close(); return name; } public String getHeadUrlFromDB(String dbId) { if (dbId == null) return ""; dbOpenHelper = new DBOpenHelper(getActivity()); SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); String name = ""; cursor = db.rawQuery("select * from contactsTable where dbid=?", new String[] { dbId }); if (cursor.moveToFirst()) { name = cursor.getString(8); } Log.e("test", "headurl :: " + name); dbOpenHelper.close(); cursor.close(); return name; } public String getSexFromDB(String dbId) { if (dbId == null) return ""; dbOpenHelper = new DBOpenHelper(getActivity()); SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); String name = ""; cursor = db.rawQuery("select * from contactsTable where dbid=?", new String[] { dbId }); if (cursor.moveToFirst()) { name = cursor.getString(13); } dbOpenHelper.close(); cursor.close(); return name; } public void getDataFromLocal() { Log.i("test", "getDataFromLocal"); if (MessageInfo.messageEntityList != null && !MessageInfo.messageEntityList.isEmpty()) { Log.e("test", "messageentitylist..size : " + MessageInfo.messageEntityList.size()); boolean isAdd = false; String idKey = ""; for (int i = 0; i < MessageInfo.messageEntityList.size(); i++) { ChatMsgEntity entity = MessageInfo.messageEntityList.get(i); isAdd = entity.getIsAdd(); int type = entity.getChatType(); Log.e("test", "get status :" + entity.getStatus()); if (entity.getIsChangeGroupInfo()) { Log.e("test", "i == " + i); Log.e("test", "****************************************"); Log.e("test", "new groupInfo: " + entity.getReceiverId()); Log.e("test", "userId :" + MessageInfo.groupMap.get(entity .getReceiverId())); updateGroupInfo(entity.getReceiverId()); continue; } // notice : filter message if (entity.getStatus() == MessageInfo.SEND_ARRIVAL || entity.getStatus() == MessageInfo.SEND_READED || (entity.getSenderId() != null && entity .getSenderId() .equals(UserInfo.companyNews_dbId)) || (entity.getSenderId() != null && entity .getSenderId().equals(UserInfo.feedback_dbId))) continue; String groupId = ""; if (type == MessageInfo.GROUP) { if (MessageInfo.groupMap .containsKey(entity.getReceiverId())) { Log.e("test", "userid 1 ::" + MessageInfo.groupMap.get(entity .getReceiverId())); Log.e("test", "userid 2 ::" + entity.getUserId()); /* * if (!MessageInfo.groupMap.get(entity.getReceiverId()) * .equals(entity.getUserId())) { if (messageSharedPre * == null) messageSharedPre = new * SharedPreferencesUtil( getActivity()); * messageSharedPre.saveDatatoShared( * MessageInfo.groupMap.get(entity .getReceiverId()) + * "_" + UserInfo.db_id, ChatActivity.mDataArrays); } */ idKey = MessageInfo.groupMap .get(entity.getReceiverId()); groupId = entity.getReceiverId(); boolean isExist = false; for (int j = 0; j < messageList.size(); j++) { if (messageList.get(j).getGroupId().equals(groupId) && !messageList.get(j).getId() .equals(idKey)) { isExist = true; break; } } if (isExist) continue; } } else { if (entity.getStatus() == MessageInfo.RECEIVE_MESSAGE) idKey = entity.getSenderId(); else if (entity.getStatus() == MessageInfo.SEND_MESSAGE) idKey = entity.getReceiverId(); Log.i("test", "senderId :" + entity.getSenderId()); Log.i("test", "ReceiverId :" + entity.getReceiverId()); } Log.i("test", "idKey :" + idKey); Log.i("test", "isAdd :" + isAdd); /********************/ boolean iscoming = false; if (entity.getType() == MessageInfo.SCHEDULE) iscoming = true; else iscoming = entity.getIsComing(); /********************/ if (isNameShow(idKey, entity, isAdd, entity.getIsComing())) { MessageItemInfo msgItem = new MessageItemInfo(); String names = ""; if (type == MessageInfo.GROUP) { /* * if (entity.getName() != null) { names = * entity.getName(); } else { */ String[] strId = idKey.split("、"); for (int j = 0; j < strId.length; j++) { if (j == strId.length - 1) names += getNameFromDB(strId[j]); else names += getNameFromDB(strId[j]) + "、"; } // } } else { if (entity.getName() == null || entity.getName().length() == 0) { names = getNameFromDB(idKey); } else { names = entity.getName(); } } msgItem.setContent(entity.getContent()); msgItem.setTime(MessageInfo.formatMessageItemTime(entity .getTime())); msgItem.setFullTime(entity.getFullTime()); if (type == MessageInfo.GROUP) { msgItem.setSex("2");// represent group msgItem.setHeadUrl(""); } else { msgItem.setSex(getSexFromDB(idKey)); msgItem.setHeadUrl(getHeadUrlFromDB(idKey)); } Log.e("test", "idkey is == " + idKey); Log.e("test", "names is " + names); msgItem.setId(idKey); msgItem.setName(names); msgItem.setGroupId(groupId); updateMessageView(msgItem, -1, null, null, entity.getIsComing()); } } MessageInfo.messageEntityList.clear(); } } public void getDataFromShared() { List<MessageItemInfo> lstMessage = new ArrayList<MessageItemInfo>(); Log.e("test", "message getDataFromShared...................."); if (UserInfo.db_id == null) messageSharedPre.getUserInfo(); if (messageSharedPre.readBoolListFromShared(UserInfo.db_id) != null) { boolList = messageSharedPre.readBoolListFromShared(UserInfo.db_id); Log.i("test", "boolList size : " + boolList.size()); } if (messageSharedPre.readUserListFromShared(UserInfo.db_id) != null) { userList = messageSharedPre.readUserListFromShared(UserInfo.db_id); Log.i("test", "usList size : " + userList.size()); } if (messageSharedPre.readMessageItemFromShared(UserInfo.db_id) != null) { lstMessage = messageSharedPre .readMessageItemFromShared(UserInfo.db_id); Log.e("test", "message.size :" + lstMessage.size()); for (int i = 0; i < lstMessage.size(); i++) { updateView(lstMessage.get(i), 0, null, null, true); } } for (int i = 0; i < boolList.size(); i++) { boolList.get(i).put(messageList.get(i).getId(), false); } } /************************/ // for getdatafromshared public void updateView(MessageItemInfo messageItem, int id, ChatMsgEntity entity, String userID, boolean isNumShow) { if (messageItem == null) Log.e("test", "messageitem is null"); else Log.e("test", "messageitme :" + messageItem.getContent()); Log.e("test", "isNumShow ::" + isNumShow); if (messageItem != null) { messageList.add(messageItem); Log.e("test", "messagelist size :" + messageList.size()); Log.e("test", "id is :" + ((messageList.get(messageList.size() - 1).getId()))); Log.e("test", "size :" + userList .get(messageList.size() - 1) .get((messageList.get(messageList.size() - 1) .getId())).size()); if (isNumShow && userList .get(messageList.size() - 1) .get((messageList.get(messageList.size() - 1) .getId())).size() > 0) { messageList.get(messageList.size() - 1).setIsMessageNumVisible( View.VISIBLE); messageList.get(messageList.size() - 1).setMessageNum( userList.get(messageList.size() - 1) .get((messageList.get(messageList.size() - 1) .getId())).size()); } else { messageList.get(messageList.size() - 1).setIsMessageNumVisible( View.INVISIBLE); } if (messageList != null && !messageList.isEmpty()) { iv_message_default.setVisibility(View.GONE); rl_message_list.setVisibility(View.VISIBLE); } } else { messageList.get(id).setContent(entity.getContent()); messageList.get(id).setTime( MessageInfo.formatMessageItemTime(entity.getTime())); messageList.get(id).setFullTime(entity.getFullTime()); if (isNumShow && userList.get(id).get((messageList.get(id).getId())) .size() > 0) { Log.i("test", "sizej :" + userList.get(id) .get((messageList.get(id).getId())) .size()); messageList.get(id).setIsMessageNumVisible(View.VISIBLE); messageList.get(id).setMessageNum( userList.get(id).get((messageList.get(id).getId())) .size()); } else { messageList.get(id).setIsMessageNumVisible(View.INVISIBLE); } } lstAdapter.notifyDataSetChanged(); } /************************/ public void updateMessageView(MessageItemInfo messageItem, int id, ChatMsgEntity entity, String userID, boolean isNumShow) { if (messageItem == null) Log.e("test", "messageitem is null"); else Log.e("test", "messageitme :" + messageItem.getContent()); Log.e("test", "isNumShow ::" + isNumShow); if (messageItem != null) { messageList.addFirst(messageItem); Log.e("test", "messagelist size :" + messageList.size()); Log.e("test", "id is :" + ((messageList.get(messageList.size() - 1).getId()))); /* * Log.e("test", "size :" + userList .get(messageList.size() - 1) * .get((messageList.get(messageList.size() - 1) .getId())).size()); */if (isNumShow && userList.get(0).get((messageList.get(0).getId())).size() > 0) { messageList.get(0).setIsMessageNumVisible(View.VISIBLE); messageList.get(0).setMessageNum( userList.get(0).get((messageList.get(0).getId())) .size()); } else { messageList.get(0).setIsMessageNumVisible(View.INVISIBLE); } if (messageList != null && !messageList.isEmpty()) { iv_message_default.setVisibility(View.GONE); rl_message_list.setVisibility(View.VISIBLE); } } else { messageList.get(id).setContent(entity.getContent()); messageList.get(id).setTime( MessageInfo.formatMessageItemTime(entity.getTime())); messageList.get(id).setFullTime(entity.getFullTime()); if (isNumShow && userList.get(id).get((messageList.get(id).getId())) .size() > 0) { Log.i("test", "sizej :" + userList.get(id) .get((messageList.get(id).getId())) .size()); messageList.get(id).setIsMessageNumVisible(View.VISIBLE); messageList.get(id).setMessageNum( userList.get(id).get((messageList.get(id).getId())) .size()); } else { messageList.get(id).setIsMessageNumVisible(View.INVISIBLE); } MessageItemInfo item = new MessageItemInfo(); item = messageList.get(id); messageList.remove(id); messageList.addFirst(item); HashMap<String, List<ChatMsgEntity>> map = new HashMap<String, List<ChatMsgEntity>>(); HashMap<String, Boolean> mapbool = new HashMap<String, Boolean>(); map = userList.get(id); mapbool = boolList.get(id); userList.remove(id); boolList.remove(id); userList.addFirst(map); boolList.addFirst(mapbool); } lstAdapter.notifyDataSetChanged(); } public void initView() { rl_message_layout = (RelativeLayout) getActivity().findViewById( R.id.rl_message_layout); listView = (ListView) getActivity().findViewById(R.id.message_list); rl_message_layout.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { for (int i = 0; i < messageList.size(); i++) { if (messageList.get(i).getIsDelShow() == View.VISIBLE) messageList.get(i).setIsDelShow(View.GONE); } lstAdapter.notifyDataSetChanged(); return false; } }); leftBtn = (ImageButton) getActivity().findViewById( R.id.message_left_btn); rl_message_list = (RelativeLayout) getActivity().findViewById( R.id.rl_message_list); iv_message_default = (RelativeLayout) getActivity().findViewById( R.id.rl_message_default); if (messageList != null && messageList.isEmpty()) { iv_message_default.setVisibility(View.VISIBLE); rl_message_list.setVisibility(View.GONE); } leftBtn.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View arg0, MotionEvent arg1) { // TODO Auto-generated method stub int unReadMessageCount = 0; for (int i = 0; i < userList.size(); i++) { unReadMessageCount += userList.get(i) .get((messageList.get(i).getId())).size(); } Log.i("test", "messagecount is " + unReadMessageCount); MessageInfo.unReadedMessageCount = unReadMessageCount; sendMessageBroadcast(); return false; } }); rightBtn = (ImageButton) getActivity().findViewById( R.id.message_right_btn); rightBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getActivity(), SelectMemberActivity.class); intent.putExtra("type", "startChat"); startActivity(intent); getActivity().overridePendingTransition(R.anim.in_from_down, R.anim.out_of_up); } }); lstAdapter = new MessageAdapter(getActivity(), messageList); listView.setAdapter(lstAdapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { /* * for (int i = 0; i < messageList.size(); i++) { if * (messageList.get(i).getIsDelShow() == View.VISIBLE) * messageList.get(i).setIsDelShow(View.GONE); } */ if (messageList.get(arg2).getIsDelShow() == View.VISIBLE) { messageList.get(arg2).setIsDelShow(View.GONE); lstAdapter.notifyDataSetChanged(); return; } Intent intent = new Intent(getActivity(), ChatActivity.class); intent.putExtra("Id", messageList.get(arg2).getId()); intent.putExtra("name", messageList.get(arg2).getName()); // intent.putExtra("listId", arg2); intent.putExtra( "chatmsgList", (Serializable) (userList.get(arg2).get(messageList.get( arg2).getId()))); startActivityForResult(intent, 1); getActivity().overridePendingTransition(R.anim.in_from_right, R.anim.out_of_left); messageList.get(arg2).setIsMessageNumVisible(View.INVISIBLE); lstAdapter.notifyDataSetChanged(); userList.get(arg2).get(messageList.get(arg2).getId()).clear(); boolList.get(arg2).put(messageList.get(arg2).getId(), true); } }); listView.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub if (messageList.get(arg2).getIsDelShow() == View.GONE) messageList.get(arg2).setIsDelShow(View.VISIBLE); else messageList.get(arg2).setIsDelShow(View.GONE); lstAdapter.notifyDataSetChanged(); // Button delBtn = (Button) arg1.findViewById(R.id.del); /* * if(delBtn.getVisibility() == View.GONE){ * delBtn.setVisibility(View.VISIBLE); } */ return true; } }); } public class MessageBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.e("test", "message receive broadcast**************"); ChatMsgEntity entity = new ChatMsgEntity(); Bundle bundle = intent.getExtras(); Serializable data = bundle.getSerializable("message"); if (data != null) { entity = (ChatMsgEntity) data; if (entity.getType() == 4) { return; } Log.i("test", "getchatType :" + entity.getChatType()); if (entity.getFromname() != null && !entity.getFromname().equals("")) { return; } if (entity.getIsChangeGroupInfo()) { Log.e("test", "****************************************"); Log.e("test", "new groupInfo: " + entity.getReceiverId()); Log.e("test", "userId :" + MessageInfo.groupMap.get(entity .getReceiverId())); updateGroupInfo(entity.getReceiverId()); return; } if (entity.getStatus() != MessageInfo.RECEIVE_MESSAGE || entity.getSenderId().equals( UserInfo.companyNews_dbId) || entity.getSenderId().equals(UserInfo.feedback_dbId)) return; int type = entity.getChatType(); String idKey = ""; String groupId = ""; if (type == MessageInfo.GROUP) { Log.i("test", "group............."); if (MessageInfo.groupMap != null && MessageInfo.groupMap.containsKey(entity .getReceiverId())) idKey = MessageInfo.groupMap .get(entity.getReceiverId()); groupId = entity.getReceiverId(); entity.setGroupId(groupId); } else { Log.i("test", "individual"); // if (entity.getSenderId().equals(UserInfo.db_id)) { idKey = entity.getSenderId(); // } else { // idKey = entity.getSenderId(); // } } // String id = entity.getSenderId(); String content = entity.getContent(); String time = entity.getTime(); if (type == MessageInfo.INDIVIDUAL && idKey.equals(UserInfo.db_id)) return; if (isNameShow(idKey, entity, true, true)) { try { String names = ""; if (type == MessageInfo.GROUP) { String[] strId = idKey.split("、"); for (int j = 0; j < strId.length; j++) { if (j == strId.length - 1) names += getNameFromDB(strId[j]); else names += getNameFromDB(strId[j]) + "、"; } } else { names = getNameFromDB(idKey); } String sex = ""; String headurl = ""; if (type == MessageInfo.GROUP) { sex = "2"; headurl = ""; } else { sex = getSexFromDB(idKey); headurl = getHeadUrlFromDB(idKey); } updateMessageView(new MessageItemInfo(idKey, content, MessageInfo.formatMessageItemTime(time), names, sex/* getSexFromDB(idKey) */, headurl/* * getHeadUrlFromDB * (idKey) */, View.GONE, entity.getFullTime(), groupId), -1, null, idKey, true); } catch (Exception e) { e.printStackTrace(); } } } } } public void updateGroupInfo(String groupId) { String newId; String oldId; String names = ""; int i = 0; for (i = 0; i < messageList.size(); i++) { Log.e("test", "groupId :::" + groupId); Log.e("test", "messageList.get(i).getGroupId() :" + messageList.get(i).getGroupId()); if (messageList.get(i).getGroupId() != null && messageList.get(i).getGroupId().equals(groupId)) { newId = MessageInfo.groupMap.get(groupId); oldId = messageList.get(i).getId(); if (newId.equals(oldId)) continue; Log.e("test", "update group's user id............"); if (!newId.contains(UserInfo.db_id)) { messageList.remove(i); userList.remove(i); boolList.remove(i); if (ChatActivity.instance != null && ChatActivity.userId.equals(oldId)) { Toast.makeText(getActivity(), getActivity().getString(R.string.quit_group), Toast.LENGTH_SHORT).show(); ChatActivity.instance.finish(); } lstAdapter.notifyDataSetChanged(); return; } Log.e("test", "newiD ......... :::::" + newId); Log.e("test", "oldiD ......... :::::" + oldId); messageList.get(i).setId(newId); List<ChatMsgEntity> map = new ArrayList<ChatMsgEntity>(); Boolean bool; map = userList.get(i).get(oldId); bool = boolList.get(i).get(oldId); userList.get(i).remove(oldId); boolList.get(i).remove(oldId); userList.get(i).put(newId, map); boolList.get(i).put(newId, bool); String[] strId = newId.split("、"); for (int j = 0; j < strId.length; j++) { if (j == strId.length - 1) names += getNameFromDB(strId[j]); else names += getNameFromDB(strId[j]) + "、"; } Log.e("test", "names :" + names); messageList.get(i).setName(names); lstAdapter.notifyDataSetChanged(); if (ChatActivity.instance == null) { if (messageSharedPre == null) messageSharedPre = new SharedPreferencesUtil( getActivity()); List<ChatMsgEntity> chatMsgList = new ArrayList<ChatMsgEntity>(); chatMsgList = messageSharedPre.readDataFromShared(oldId + "_" + UserInfo.db_id); if (chatMsgList != null && chatMsgList.size() > 0) messageSharedPre.saveDatatoShared(newId + "_" + UserInfo.db_id, chatMsgList); if (chatMsgList != null) chatMsgList.clear(); messageSharedPre.saveDatatoShared(oldId + "_" + UserInfo.db_id, chatMsgList); } else { Log.e("test", "idD ......... :::::" + ChatActivity.userId); if (ChatActivity.userId.equals(oldId)) { /* * if (messageSharedPre == null) messageSharedPre = new * SharedPreferencesUtil( getActivity()); * List<ChatMsgEntity> chatMsgList = * (List<ChatMsgEntity>) * ChatActivity.mDataArrays.clone(); * Log.e("test","size :::::::::::" + * chatMsgList.size()); * messageSharedPre.saveDatatoShared(newId + "_" + * UserInfo.db_id, chatMsgList); */ } else { if (messageSharedPre == null) messageSharedPre = new SharedPreferencesUtil( getActivity()); List<ChatMsgEntity> chatMsgList = new ArrayList<ChatMsgEntity>(); chatMsgList = messageSharedPre.readDataFromShared(oldId + "_" + UserInfo.db_id); if (chatMsgList != null && chatMsgList.size() > 0) messageSharedPre.saveDatatoShared(newId + "_" + UserInfo.db_id, chatMsgList); if (chatMsgList != null) chatMsgList.clear(); messageSharedPre.saveDatatoShared(oldId + "_" + UserInfo.db_id, chatMsgList); } } break; } } if (messageSharedPre == null) messageSharedPre = new SharedPreferencesUtil(getActivity()); messageSharedPre.saveMessagetoShared(UserInfo.db_id, messageList, userList, boolList); } public boolean isNameShow(String id, ChatMsgEntity entity, boolean isSave, boolean isNumShow) { Log.i("test", "id.... : " + id); Log.e("test", "issave :" + isSave); for (int i = 0; i < userList.size(); i++) { if (userList.get(i).containsKey(id)) { Log.e("test", "boolean: " + boolList.get(i).get(id).booleanValue()); if (boolList.get(i).get(id).booleanValue() == false && isSave) { Log.i("test", "entity contet :" + entity.getContent()); userList.get(i).get(id).add(entity); } Log.i("test", "entity.content 1:" + entity.getContent()); updateMessageView(null, i, entity, id, isNumShow); return false; } } HashMap<String, List<ChatMsgEntity>> map = new HashMap<String, List<ChatMsgEntity>>(); HashMap<String, Boolean> mapbool = new HashMap<String, Boolean>(); map.put(id, new ArrayList<ChatMsgEntity>()); if (isSave) { map.get(id).add(entity); } userList.addFirst(map); mapbool.put(id, false); boolList.addFirst(mapbool); return true; } // for deliver unreaded message count private void sendMessageBroadcast() { Intent intent = new Intent(); // Bundle bundle = new Bundle(); // bundle.putSerializable("message", entity); intent.setAction(MessageInfo.MessageBroadCastName); // intent.putExtras(bundle); intent.putExtra("name", getActivity().getResources() .getString(R.string.company_message)); getActivity().sendBroadcast(intent); } @SuppressLint("NewApi") @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.e("test", "onActivityResult.........................."); if (data == null) { Log.e("test", "messagefragment null..............."); return; } String content = data.getExtras().getString("content"); String time = data.getExtras().getString("time"); String userId = data.getExtras().getString("userId"); String fullTime = data.getExtras().getString("fullTime"); String name = data.getExtras().getString("names"); String newUserId = data.getExtras().getString("newUserId"); String groupId = data.getExtras().getString("groupId"); Log.e("test", "userId :" + userId); Log.e("test", "names :" + name); Log.e("test", "fulltime :" + fullTime); if (fullTime == null || fullTime.isEmpty()) return; if (newUserId != null) { Log.e("test", "newuserId :" + newUserId); } // if (content != null && time != null) { for (int i = 0; i < messageList.size(); i++) { if (messageList.get(i).getGroupId() != null && messageList.get(i).getGroupId().equals(groupId)) { if (!messageList.get(i).getId().equals(userId)) { if (messageSharedPre == null) messageSharedPre = new SharedPreferencesUtil( getActivity()); List<ChatMsgEntity> chatMsgList = (List<ChatMsgEntity>) ChatActivity.mDataArrays .clone(); /* * chatMsgList = messageSharedPre.readDataFromShared(userId * + "_" + UserInfo.db_id); */Log.e("test", "chatmsglist.size........." + chatMsgList.size()); Log.e("test", "id........................ :" + messageList.get(i).getId()); Log.e("test", "userId........................ :" + userId); Log.e("test,", "key is " + messageList.get(i).getId() + "_" + UserInfo.db_id); messageSharedPre.saveDatatoShared(messageList.get(i) .getId() + "_" + UserInfo.db_id, chatMsgList); if (chatMsgList != null) chatMsgList.clear(); messageSharedPre.saveDatatoShared(userId + "_" + UserInfo.db_id, chatMsgList); } } if (messageList.get(i).getId().equals(userId) || (messageList.get(i).getGroupId() != null && messageList .get(i).getGroupId().equals(groupId))) { if (content != null) messageList.get(i).setContent(content); /* * messageList.get(i).setName(name); Log.e("test", "name :" + * name); */ if (time != null) messageList.get(i).setTime( MessageInfo.formatMessageItemTime(time)); if (fullTime != null) messageList.get(i).setFullTime(fullTime); boolList.get(i).put(messageList.get(i).getId(), false); break; } } Collections.sort(messageList, new Comparator<MessageItemInfo>() { @Override public int compare(MessageItemInfo lhs, MessageItemInfo rhs) { Date date1 = MessageInfo.stringToDate(lhs.getFullTime()); Date date2 = MessageInfo.stringToDate(rhs.getFullTime()); if (date1.before(date2)) { return 1; } return -1; } }); LinkedList<HashMap<String, List<ChatMsgEntity>>> tempUserList = new LinkedList<HashMap<String, List<ChatMsgEntity>>>(); LinkedList<HashMap<String, Boolean>> tempBoolList = new LinkedList<HashMap<String, Boolean>>(); for (int i = 0; i < messageList.size(); i++) { String id = messageList.get(i).getId(); for (int j = 0; j < userList.size(); j++) { if (userList.get(j).containsKey(id)) { HashMap<String, List<ChatMsgEntity>> map = new HashMap<String, List<ChatMsgEntity>>(); HashMap<String, Boolean> mapbool = new HashMap<String, Boolean>(); /* * if (messageList.get(i).getId().equals(userId) && * newUserId != null) { messageList.get(i).setId(newUserId); * map.put(newUserId, userList.get(j).get(id)); * mapbool.put(newUserId, boolList.get(j).get(id)); } else { */map.put(id, userList.get(j).get(id)); mapbool.put(id, boolList.get(j).get(id)); // } tempUserList.add(map); tempBoolList.add(mapbool); break; } } } userList = tempUserList; boolList = tempBoolList; Log.e("test", "u.size ::" + userList.size()); Log.e("test", "b.size ::" + boolList.size()); /* * messageList.get(resultCode).setContent(content); * messageList.get(resultCode).setTime( * MessageInfo.formatMessageItemTime(time)); * boolList.get(resultCode).put(messageList.get(resultCode).getId(), * false); */lstAdapter.notifyDataSetChanged(); // } } @Override public void onStart() { super.onStart(); Log.i("test", "message onStart"); if (UserInfo.isHomePressed) { for (int i = 0; i < boolList.size(); i++) { if (boolList.get(i) != null && messageList.get(i) != null) boolList.get(i).put(messageList.get(i).getId(), false); } ClientSocket client = new ClientSocket(getActivity()); UserInfo.isSendBroadCast = false; client.sendMessage(null, 0, StringWidthWeightRandom.getNextString(), null, null, null, null, null, null, null, null, true); UserInfo.isHomePressed = false; } instance = this; getDataFromLocal(); } @Override public void onResume() { super.onResume(); Log.i("test", "message onResume"); } @Override public void onPause() { super.onPause(); Log.i("test", "message onPause"); } @Override public void onStop() { super.onStop(); instance = null; if (messageSharedPre == null) messageSharedPre = new SharedPreferencesUtil(getActivity()); messageSharedPre.saveMessagetoShared(UserInfo.db_id, messageList, userList, boolList); Log.e("test", "messageList....size :" + messageList.size()); Log.e("test", "userList....size :" + userList.size()); Log.e("test", "boolList....size :" + boolList.size()); Log.i("test", "message onStop"); } public void onDestroy() { super.onDestroy(); if (mbr != null) { getActivity().unregisterReceiver(mbr); mbr = null; } /* * if (gbr != null) { getActivity().unregisterReceiver(gbr); gbr = null; * } */ /********************************************/ messageList.clear(); userList.clear(); boolList.clear(); Log.i("test", "message onDestroy"); } }