package com.bestapp.yikuair.fragments; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import android.app.Activity; 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.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.widget.ImageButton; import android.widget.ListView; import com.bestapp.yikuair.R; import com.bestapp.yikuair.database.DBOpenHelper; import com.bestapp.yikuair.utils.MessageInfo; import com.bestapp.yikuair.utils.PullToRefreshListView; import com.bestapp.yikuair.utils.SharedPreferencesUtil; import com.bestapp.yikuair.utils.StringWidthWeightRandom; import com.bestapp.yikuair.utils.UploadFileUtil; import com.bestapp.yikuair.utils.UserInfo; import com.bestapp.yikuair.utils.PullToRefreshBase.OnRefreshListener; public class CompanyNewsFragment extends Fragment implements OnClickListener { private ListView mListView; private ChatMsgViewAdapter mAdapter; private List<ChatMsgEntity> chatMsgList = new ArrayList<ChatMsgEntity>(); public static LinkedList<ChatMsgEntity> mDataArrays = new LinkedList<ChatMsgEntity>(); private List<ChatMsgEntity> lstMessage = new ArrayList<ChatMsgEntity>(); private List<ChatMsgEntity> tempList = new ArrayList<ChatMsgEntity>(); private HashMap<String, Integer> msguidMap = new HashMap<String, Integer>(); private ChatBroadcastReceiver cbr; private static int SHOW_MAX_COUNT = 5; public static final int RESULT_OK = -1; private int itemCount; private String userId; private SharedPreferencesUtil chatSharedPre; private PullToRefreshListView mPullRefreshListView; private ImageButton leftBtn; private String prevDate = null; private ClientSocket client; public static CompanyNewsFragment instance = null; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { instance = this; return inflater.inflate(R.layout.company_news, null); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getActivity().getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); client = new ClientSocket(getActivity()); if (UserInfo.companyNews_dbId == null || UserInfo.companyNews_dbId.length() == 0) { String dbid = ""; DBOpenHelper dbOpenHelper = new DBOpenHelper(getActivity()); SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); Cursor cursor = db.rawQuery( "select * from contactsTable where name=?", new String[] { getActivity().getResources().getString( R.string.company_news) }); if (cursor.moveToFirst()) { dbid = cursor.getString(14); } userId = dbid; cursor.close(); dbOpenHelper.close(); } else userId = UserInfo.companyNews_dbId; Log.e("test", "companynews dbid :" + userId); initChatView(); updateChatListView(); // register broadcast IntentFilter myIntentFilter = new IntentFilter(); myIntentFilter.addAction(MessageInfo.MessageBroadCastName); cbr = new ChatBroadcastReceiver(); getActivity().registerReceiver(cbr, myIntentFilter); } public class ChatBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i("test", "companynews broadcast receive..................."); ChatMsgEntity entity = new ChatMsgEntity(); Bundle bundle = intent.getExtras(); Serializable data = bundle.getSerializable("message"); if (data != null) { entity = (ChatMsgEntity) data; if (entity.getSenderId().equals(userId) || entity.getReceiverId().equals(userId)) { Log.i("test", "company news new ..........."); if (prevDate == null) { if (chatSharedPre.getChatDate(userId + "_" + UserInfo.db_id) != null && chatSharedPre.getChatDate( userId + "_" + UserInfo.db_id).length() > 0) { // Log.e("test", "asdfasdfafasdfasdfasdf"); prevDate = chatSharedPre.getChatDate(userId + "_" + UserInfo.db_id); if (MessageInfo.getChattingDate().equals(prevDate)) { entity.setDate(""); } else { prevDate = MessageInfo.getChattingDate(); entity.setDate(prevDate); } } else { prevDate = MessageInfo.getChattingDate(); entity.setDate(prevDate); } } else { if (prevDate.equals(MessageInfo.getChattingDate())) { entity.setDate(""); } else { prevDate = MessageInfo.getChattingDate(); entity.setDate(prevDate); } } updateChatStatus(entity); } } } } public void getLocalMessage(List<ChatMsgEntity> chatInfoList) { List<ChatMsgEntity> tempList = new ArrayList<ChatMsgEntity>(); // chatSharedPre.getUserInfo(); if (chatSharedPre.readDataFromShared(userId + "_" + UserInfo.db_id) != null) { lstMessage = chatSharedPre.readDataFromShared(userId + "_" + UserInfo.db_id); itemCount = lstMessage.size(); if (itemCount > SHOW_MAX_COUNT) { tempList = lstMessage.subList(itemCount - SHOW_MAX_COUNT, itemCount); itemCount -= SHOW_MAX_COUNT; for (int j = 0; j < tempList.size(); j++) { updateChatView(tempList.get(j), null, false); } } else { itemCount = 0; for (int j = 0; j < lstMessage.size(); j++) { updateChatView(lstMessage.get(j), null, false); } } } if (chatInfoList != null) { Log.i("test", "company news chatInfoList.size : " + chatInfoList.size()); for (int i = 0; i < chatInfoList.size(); i++) { Log.e("test", "receive localnew message"); String tempReceiver = UserInfo.db_id; String tempSender = userId; int tempType = 1; client.sendMessage(null, 8, chatInfoList.get(i).getMsguuid(), tempSender, tempReceiver, null, null, null, null, String.valueOf(tempType), null, false); if (prevDate == null) { if (chatSharedPre .getChatDate(userId + "_" + UserInfo.db_id) != null && chatSharedPre.getChatDate( userId + "_" + UserInfo.db_id).length() > 0) { prevDate = chatSharedPre.getChatDate(userId + "_" + UserInfo.db_id); if (MessageInfo.getChattingDate().equals(prevDate)) { chatInfoList.get(i).setDate(""); } else { prevDate = MessageInfo.getChattingDate(); chatInfoList.get(i).setDate(prevDate); } } else { prevDate = MessageInfo.getChattingDate(); chatInfoList.get(i).setDate(prevDate); } } else { if (prevDate.equals(MessageInfo.getChattingDate())) { chatInfoList.get(i).setDate(""); } else { prevDate = MessageInfo.getChattingDate(); chatInfoList.get(i).setDate(prevDate); } } updateChatView(chatInfoList.get(i), null, false); } } } private class GetDataTask extends AsyncTask<Void, Void, List<ChatMsgEntity>> { @Override protected List<ChatMsgEntity> doInBackground(Void... params) { // Simulates a background job. try { tempList.clear(); if (itemCount > 0) { int count = (itemCount - SHOW_MAX_COUNT > 0 ? SHOW_MAX_COUNT : itemCount); int begin = (count == SHOW_MAX_COUNT ? (itemCount - SHOW_MAX_COUNT - 1) : 0); for (int i = itemCount - 1; i > begin - 1; i--) { tempList.add(lstMessage.get(i)); } itemCount -= count; } Thread.sleep(500); } catch (Exception e) { } return mDataArrays; } @Override protected void onPostExecute(List<ChatMsgEntity> result) { if (tempList.size() > 0) { for (int i = 0; i < tempList.size(); i++) mDataArrays.addFirst(tempList.get(i)); mAdapter.notifyDataSetChanged(); } // Call onRefreshComplete when the list has been refreshed. mPullRefreshListView.onRefreshComplete(); super.onPostExecute(result); } } public void initChatView() { mPullRefreshListView = (PullToRefreshListView) getActivity() .findViewById(R.id.pull_refresh_list); mPullRefreshListView.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh() { new GetDataTask().execute(); } }); mListView = mPullRefreshListView.getRefreshableView(); mListView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return false; } }); leftBtn = (ImageButton) getActivity().findViewById( R.id.message_left_btn); leftBtn.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View arg0, MotionEvent arg1) { sendMessageBroadcast(); return false; } }); chatSharedPre = new SharedPreferencesUtil(getActivity()); mAdapter = new ChatMsgViewAdapter(getActivity(), mDataArrays); mListView.setAdapter(mAdapter); Log.i("test", "userID: " + userId); chatMsgList.addAll(MessageInfo.menuCompanyNewsList); MessageInfo.menuCompanyNewsList.clear(); getLocalMessage(chatMsgList); } public void updateChatStatus(ChatMsgEntity entity) { int status = entity.getStatus(); if (status == MessageInfo.RECEIVE_MESSAGE) { String senderId = entity.getSenderId(); DBOpenHelper dbOpenHelper = new DBOpenHelper(getActivity()); Cursor cursor; SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); String sex = ""; cursor = db.rawQuery("select * from contactsTable where dbid=?", new String[] { senderId }); if (cursor.moveToFirst()) { sex = cursor.getString(13); } dbOpenHelper.close(); cursor.close(); entity.setSex(sex); updateChatView(entity, null, false); return; } else { if (entity.getMsguuid() == null) return; int listId = msguidMap.get(entity.getMsguuid()); Log.i("test", "listId :" + msguidMap.get(entity.getMsguuid())); if (status == MessageInfo.SEND_ARRIVAL) { Log.i("test", "listId :" + listId); Log.i("test", "TYPE :" + mDataArrays.get(listId).getType()); mDataArrays.get(listId).setAnimVisibile(View.GONE); mDataArrays.get(listId).setStateVisible(View.VISIBLE); } else if (status == MessageInfo.SEND_READED) { mDataArrays.get(listId).setBackground(R.drawable.ima_readed); mDataArrays.get(listId).setChatState( getResources().getString(R.string.readed)); } } mAdapter.notifyDataSetChanged(); } public void updateChatView(ChatMsgEntity entity, String msguuid, boolean isSend) { if (entity == null) { return; } entity.setMessageType(MessageInfo.COMPANY_NEWS); mDataArrays.add(entity); mAdapter.notifyDataSetChanged(); if (isSend) { msguidMap.put(msguuid, mAdapter.getCount() - 1); } mListView.setSelection(mListView.getCount() - 1); } public void messageMenu() { Intent intent = new Intent(getActivity(), MessageTopDialog.class); intent.putExtra("userId", userId); startActivity(intent); } public void openTaskMember() { Intent intent = new Intent(getActivity(), TaskMemberActivity.class); startActivity(intent); getActivity().overridePendingTransition(R.anim.in_from_right, R.anim.out_of_left); } public void updateChatListView() { if (MessageInfo.messageEntityList != null && MessageInfo.messageEntityList.size() > 0) { for (int i = 0; i < MessageInfo.messageEntityList.size(); i++) { ChatMsgEntity entity = MessageInfo.messageEntityList.get(i); if (entity.getSenderId().equals(userId) || entity.getReceiverId().equals(userId)) { updateChatStatus(entity); MessageInfo.messageEntityList.remove(i); } } } } @Override public void onStart() { super.onStart(); if (UserInfo.isHomePressed) { ClientSocket client = new ClientSocket(getActivity()); UserInfo.isSendBroadCast = false; UserInfo.isHomePressed = false; client.sendMessage(null, 0, StringWidthWeightRandom.getNextString(), null, null, null, null, null, null, null, null, true); } Log.i("test", "companynews onStart"); } @Override public void onResume() { super.onResume(); Log.i("test", "companynews onResume"); } @Override public void onPause() { super.onPause(); MessageInfo.isChatting = false; Log.i("test", "companynews onPause"); } @Override public void onStop() { super.onStop(); Log.e("test", "companynews :" + userId); Log.e("test", "size :" + mDataArrays.size()); instance = null; chatSharedPre.saveDatatoShared(userId + "_" + UserInfo.db_id, mDataArrays); if(prevDate == null || prevDate.length() == 0) prevDate = MessageInfo.getChattingDate(); chatSharedPre.saveChatDate(userId + "_" + UserInfo.db_id, prevDate); if (cbr != null) { getActivity().unregisterReceiver(cbr); cbr = null; } Log.i("test", "companynews onStop"); } @Override public void onDestroy() { Log.i("test", "companynews onDestroy"); mDataArrays.clear(); super.onDestroy(); } // for deliver unreaded message count private void sendMessageBroadcast() { Intent intent = new Intent(); intent.setAction(MessageInfo.MessageBroadCastName); intent.putExtra("name", getActivity().getResources().getString(R.string.company_news)); getActivity().sendBroadcast(intent); } @Override public void onClick(View arg0) { // TODO Auto-generated method stub } }