package com.bestapp.yikuair.fragments; import java.io.File; import java.io.IOException; 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.media.MediaRecorder; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.IBinder; import android.provider.MediaStore; 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.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageButton; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; import com.bestapp.yikuair.R; import com.bestapp.yikuair.database.DBOpenHelper; import com.bestapp.yikuair.utils.FriendEntity; 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 FeedBackFragment extends Fragment implements OnClickListener { private Button mBtnSend; private Button pressTalkBtn; private EditText mEditTextContent; private ListView mListView; private ChatMsgViewAdapter mAdapter; private GridView menuGridView; private ImageButton voiceBtn; private ImageButton keyboardBtn; private GridView topGridView; private ImageButton plusBtn; private ImageButton menuBtn; private boolean isGridShow = false; private boolean isTopGridShow = false; private RelativeLayout ll_fasong; private RelativeLayout ll_yuyin; 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 List<gridItemInfo> lstMenuItem = new ArrayList<gridItemInfo>(); private List<gridItemInfo> topMenuItem = new ArrayList<gridItemInfo>(); private HashMap<String, Integer> msguidMap = new HashMap<String, Integer>(); private ChatBroadcastReceiver cbr; private long downTime; private long upTime; private long LOWLIMITTIME = 400; private long HIGHLIMITTIME = 1000; private MediaRecorder mRecorder; private File tempFile; private PopupWindow menuWindow = null; private File mRecAudioPath; private static final String STORE_RECORDS_PATH = "STORE_RECORDS_PATH"; private TextView talkLabel; private FriendEntity friendEntity; private static int RESULT_LOAD_IMAGE = 1; private static int RESULT_SHOW_IMAGE = 2; private static int SHOW_MAX_COUNT = 5; public static final int RESULT_OK = -1; private int itemCount; private String userId; private SharedPreferencesUtil chatSharedPre; private UploadFileUtil uploadFileInstance; private PullToRefreshListView mPullRefreshListView; private ImageButton leftBtn; private String prevDate; public static FeedBackFragment instance = null; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { instance = this; return inflater.inflate(R.layout.user_feedback_chat_message, null); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getActivity().getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); if (UserInfo.feedback_dbId == null || UserInfo.feedback_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.user_feedback) }); if (cursor.moveToFirst()) { dbid = cursor.getString(14); } UserInfo.feedback_dbId = dbid; userId = dbid; cursor.close(); dbOpenHelper.close(); } else userId = UserInfo.feedback_dbId; Log.e("test", "fedback dbid :" + userId); initChatView(); updateChatListView(); } public class ChatBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i("test", "feedback 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", "feedback new ..........."); 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)) { 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++) { lstMessage.get(j).setSenderId(userId); updateChatView(lstMessage.get(j), null, false); } } } if (chatInfoList != null) { Log.i("test", "chatInfoList.size : " + chatInfoList.size()); for (int i = 0; i < chatInfoList.size(); i++) { Log.i("test", "content :" + chatInfoList.get(i).getContent()); 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) { hideSoftInput(v.getWindowToken()); return false; } }); leftBtn = (ImageButton) getActivity().findViewById(R.id.btn_back); leftBtn.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View arg0, MotionEvent arg1) { // TODO Auto-generated method stub hideSoftInput(arg0.getWindowToken()); sendMessageBroadcast(); return false; } }); mBtnSend = (Button) getActivity().findViewById(R.id.btn_send); mBtnSend.setOnClickListener(this); mEditTextContent = (EditText) getActivity().findViewById( R.id.et_sendmessage); mEditTextContent.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { setGridViewVisibility(false); } }); mAdapter = new ChatMsgViewAdapter(getActivity(), mDataArrays); mListView.setAdapter(mAdapter); Log.i("test", "userID: " + userId); chatMsgList.addAll(MessageInfo.menuFeedbackList); MessageInfo.menuFeedbackList.clear(); uploadFileInstance = new UploadFileUtil(getActivity()); chatSharedPre = new SharedPreferencesUtil(getActivity()); getLocalMessage(chatMsgList); menuGridView = (GridView) getActivity().findViewById( R.id.message_gridView); menuBtn = (ImageButton) getActivity().findViewById(R.id.ib_open_menu); menuBtn.setOnClickListener(this); topGridView = (GridView) getActivity().findViewById(R.id.top_gridView); ll_fasong = (RelativeLayout) getActivity().findViewById(R.id.ll_fasong); ll_yuyin = (RelativeLayout) getActivity().findViewById(R.id.ll_yuyin); pressTalkBtn = (Button) getActivity().findViewById(R.id.btn_yuyin); voiceBtn = (ImageButton) getActivity().findViewById( R.id.chatting_voice_btn); voiceBtn.setOnClickListener(this); keyboardBtn = (ImageButton) getActivity().findViewById( R.id.chatting_keyboard_btn); keyboardBtn.setOnClickListener(this); plusBtn = (ImageButton) getActivity().findViewById( R.id.chatting_plus_btn); plusBtn.setOnClickListener(this); menuBtn = (ImageButton) getActivity().findViewById(R.id.ib_open_menu); menuBtn.setOnClickListener(this); topMenuItem.add(new gridItemInfo(getResources().getString( R.string.menu_phone), R.drawable.ico_phone)); topMenuItem.add(new gridItemInfo(getResources().getString( R.string.menu_data), R.drawable.ico_data)); topMenuItem.add(new gridItemInfo(getResources().getString( R.string.menu_invite), R.drawable.ico_invite)); topGridView.setAdapter(new TopGridViewAdapter(getActivity(), topMenuItem)); topGridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub switch (arg2) { case 0: String phoneNum = friendEntity.getMobile(); if (phoneNum == null || "".equals(phoneNum.trim())) { Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.dial_error), Toast.LENGTH_SHORT).show(); } else { Intent intent = new Intent(Intent.ACTION_CALL, Uri .parse("tel:" + phoneNum)); startActivity(intent); } break; case 1: Intent intent = new Intent(getActivity(), PersonalProfileActivity.class); Bundle bundle = new Bundle(); friendEntity = getEntityFromUserID(userId);// for individual // chat bundle.putSerializable("friendEntity", friendEntity); intent.putExtras(bundle); startActivity(intent); getActivity().overridePendingTransition( R.anim.in_from_right, R.anim.out_of_left); break; case 2: Intent intent_1 = new Intent(getActivity(), SelectMemberActivity.class); startActivity(intent_1); getActivity().overridePendingTransition( R.anim.in_from_right, R.anim.out_of_left); break; default: break; } } }); lstMenuItem.add(new gridItemInfo(getResources().getString( R.string.take_photo), R.drawable.ico_photo)); lstMenuItem.add(new gridItemInfo(getResources().getString( R.string.photo), R.drawable.ico_take_photo)); /* * lstMenuItem.add(new gridItemInfo(getResources().getString( * R.string.location), R.drawable.ico_location)); lstMenuItem.add(new * gridItemInfo(getResources().getString( R.string.video), * R.drawable.ico_video)); */ lstMenuItem.add(new gridItemInfo(getResources() .getString(R.string.task), R.drawable.ico_task)); lstMenuItem.add(new gridItemInfo(getResources().getString( R.string.meeting), R.drawable.ico_meeting)); /* * lstMenuItem.add(new gridItemInfo(getResources().getString( * R.string.white_board), R.drawable.ico_whiteboard)); */ menuGridView .setAdapter(new gridViewAdapter(getActivity(), lstMenuItem)); menuGridView .setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { switch (arg2) { case 0: Intent intent0 = new Intent( "android.media.action.IMAGE_CAPTURE"); startActivityForResult(intent0, Activity.DEFAULT_KEYS_DIALER); break; case 1: Intent intent1 = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent1, RESULT_LOAD_IMAGE); break; case 2: Intent intent4 = new Intent(getActivity(), ScheduleAddActivity.class); intent4.putExtra("type", 0); startActivity(intent4); break; case 3: Intent intent5 = new Intent(getActivity(), ScheduleAddActivity.class); intent5.putExtra("type", 1); startActivity(intent5); break; default: break; } } }); pressTalkBtn.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_UP: upTime = System.currentTimeMillis(); if (mRecorder != null) { mRecorder.stop(); mRecorder.release(); mRecorder = null; } if ((upTime - downTime) < HIGHLIMITTIME && (upTime - downTime) > LOWLIMITTIME) { tempFile.delete(); Toast toast = Toast.makeText(getActivity(), "too short", Toast.LENGTH_SHORT); toast.setGravity(Gravity.BOTTOM, 0, 150); toast.show(); } else if ((upTime - downTime) <= LOWLIMITTIME) { tempFile.delete(); } else { String msguuid = StringWidthWeightRandom .getNextString(); createLocalmsgEntity(MessageInfo.VOICE, tempFile.getAbsolutePath(), (upTime - downTime) / 1000 + "''", userId, msguuid, null, null, null, null, 0); uploadFileInstance.uploadFile( tempFile.getAbsolutePath(), userId, MessageInfo.VOICE, msguuid, MessageInfo.INDIVIDUAL); } if (menuWindow != null) menuWindow.dismiss(); break; case MotionEvent.ACTION_DOWN: if (checkSDCard()) { mRecAudioPath = new File(Environment .getExternalStorageDirectory().getPath() + File.separator + STORE_RECORDS_PATH); mRecAudioPath.mkdirs(); } else { Toast toast = Toast.makeText(getActivity(), "Please Insert SdCard", Toast.LENGTH_SHORT); toast.setGravity(Gravity.BOTTOM, 0, 150); toast.show(); break; } downTime = System.currentTimeMillis(); View view = LayoutInflater.from(getActivity()).inflate( R.layout.audio_recorder_ring, null); menuWindow = new PopupWindow(view, 200, 200); view.findViewById(R.id.recorder_ring).setVisibility( View.VISIBLE); talkLabel = (TextView) view.findViewById(R.id.talk_label); view.setBackgroundResource(R.drawable.pls_talk); menuWindow .showAtLocation(mListView, Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL, 0, 0); try { if (mRecAudioPath.isDirectory()) { mRecAudioPath.mkdir(); } tempFile = File.createTempFile("tmp_record", ".aac", mRecAudioPath); } catch (IOException e) { } mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder .setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mRecorder .setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); mRecorder.setOutputFile(tempFile.getAbsolutePath()); try { mRecorder.prepare(); mRecorder.start(); new Thread(mUpdateMicStatusTimer).start(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } break; } return true; } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { Uri selectedImage = data.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getActivity().getContentResolver().query( selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); cursor.close(); Intent intent = new Intent(getActivity(), ImageResultActivity.class); intent.putExtra("path", picturePath); startActivityForResult(intent, RESULT_SHOW_IMAGE); } else if (requestCode == RESULT_SHOW_IMAGE && resultCode == RESULT_OK && null != data) { String picturePath = data.getStringExtra("path"); String msguuid = StringWidthWeightRandom.getNextString(); createLocalmsgEntity(MessageInfo.PICTURE, picturePath, null, userId, msguuid, null, null, null, null, 0); Log.i("test", "userId 2 :" + userId); uploadFileInstance.uploadFile(picturePath, userId, MessageInfo.PICTURE, msguuid, MessageInfo.INDIVIDUAL); } } private final Handler mHandler = new Handler(); private Runnable mUpdateMicStatusTimer = new Runnable() { public void run() { updateMicStatus(); } }; private void updateMicStatus() { if (mRecorder != null) { int vuSize = 10 * mRecorder.getMaxAmplitude() / 32768; // talkLabel.setText(vuSize + ""); mHandler.postDelayed(mUpdateMicStatusTimer, 300); } } public boolean checkSDCard() { return Environment.MEDIA_MOUNTED.equals(Environment .getExternalStorageState()); } public void updateChatStatus(ChatMsgEntity entity) { int status = entity.getStatus(); entity.setSenderId(userId); 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 && mDataArrays.get(listId) != null) { 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) != null) { 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.USER_FEEDBACK); mDataArrays.add(entity); mAdapter.notifyDataSetChanged(); if (isSend) { msguidMap.put(msguuid, mAdapter.getCount() - 1); } mEditTextContent.setText(""); mListView.setSelection(mListView.getCount() - 1); } public void openTaskMember() { Intent intent = new Intent(getActivity(), TaskMemberActivity.class); startActivity(intent); getActivity().overridePendingTransition(R.anim.in_from_right, R.anim.out_of_left); } private void createLocalmsgEntity(int type, String content, String voiceSec, String receiverId, String msguuid, String title, String beginTime, String endTime, String address, int scheduleType) { ChatMsgEntity entity = new ChatMsgEntity(); entity.setTime(MessageInfo.getChatTime()); entity.setType(type); entity.setIsComing(false); entity.setReceiverId(userId); entity.setBackground(R.drawable.ima_sent); entity.setChatState(getResources().getString(R.string.sent)); entity.setMsguuid(msguuid); entity.setAnimVisibile(View.VISIBLE); entity.setStateVisible(View.GONE); 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)) { 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); } } if (type == MessageInfo.TEXT) { entity.setContent(content); // if (UserInfo.clientsocket != null) UserInfo.clientsocket.sendMessage(content, 1, msguuid, UserInfo.db_id, userId, null, null, null, null, "1", null, false); } else if (type == MessageInfo.PICTURE) { entity.setBigPicUrl(content); entity.setContent(getResources().getString(R.string.picture)); entity.setReceiverId(receiverId); } else if (type == MessageInfo.VOICE) { entity.setSecond(voiceSec); entity.setVoiceUrl(content); entity.setContent(getResources().getString(R.string.voice)); entity.setReceiverId(receiverId); } else { entity.setScheduleTitle(title); entity.setScheduleBeginTime(beginTime); entity.setScheduleEndTime(endTime); entity.setScheduleAddress(address); entity.setScheduleType(scheduleType); String[] str = receiverId.split(","); if (str.length == 1 && str[0].equals(UserInfo.db_id)) { entity.setAnimVisibile(View.GONE); entity.setStateVisible(View.VISIBLE); entity.setBackground(R.drawable.ima_readed); entity.setChatState(getResources().getString(R.string.readed)); } } updateChatView(entity, msguuid, true); } 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); } friendEntity = getEntityFromUserID(userId);// for individual chat // register broadcast IntentFilter myIntentFilter = new IntentFilter(); myIntentFilter.addAction(MessageInfo.MessageBroadCastName); cbr = new ChatBroadcastReceiver(); getActivity().registerReceiver(cbr, myIntentFilter); Log.i("test", "chatactivity onStart"); } @Override public void onResume() { super.onResume(); Log.i("test", "feedbackfragment onResume"); } @Override public void onPause() { super.onPause(); Log.i("test", "feedbackfragment onPause"); } @Override public void onStop() { super.onStop(); instance = null; chatSharedPre.saveDatatoShared(userId + "_" + UserInfo.db_id, mDataArrays); if (prevDate == null) prevDate = MessageInfo.getChattingDate(); chatSharedPre.saveChatDate(userId + "_" + UserInfo.db_id, prevDate); getActivity().unregisterReceiver(cbr); Log.i("test", "feedbackfragment onStop"); } @Override public void onDestroy() { Log.i("test", "feedbackfragment onDestroy"); mDataArrays.clear(); super.onDestroy(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_send: String messageContent = mEditTextContent.getText().toString(); if (messageContent.length() > 0) { createLocalmsgEntity(MessageInfo.TEXT, messageContent, null, null, StringWidthWeightRandom.getNextString(), null, null, null, null, 0); } break; case R.id.chatting_voice_btn: setGridViewVisibility(false); voiceBtn.setVisibility(View.GONE); keyboardBtn.setVisibility(View.VISIBLE); ll_fasong.setVisibility(View.GONE); ll_yuyin.setVisibility(View.VISIBLE); break; case R.id.chatting_keyboard_btn: setGridViewVisibility(false); voiceBtn.setVisibility(View.VISIBLE); keyboardBtn.setVisibility(View.GONE); ll_fasong.setVisibility(View.VISIBLE); ll_yuyin.setVisibility(View.GONE); break; case R.id.chatting_plus_btn: hideSoftInput(getActivity().getCurrentFocus().getWindowToken()); if (!isGridShow) { setGridViewVisibility(true); } else { setGridViewVisibility(false); } break; case R.id.ib_open_menu: if (!isTopGridShow) { setTopGridViewVisibility(true); menuBtn.setImageDrawable(getResources().getDrawable( R.drawable.ico_close)); } else { setTopGridViewVisibility(false); menuBtn.setImageDrawable(getResources().getDrawable( R.drawable.ico_open)); } break; } } public FriendEntity getEntityFromUserID(String userId) { FriendEntity entity = new FriendEntity(); DBOpenHelper dbOpenHelper = new DBOpenHelper(getActivity()); Cursor cursor = dbOpenHelper.get(userId); if (cursor.moveToFirst()) { cursor.moveToFirst(); String name = cursor.getString(2); String duty = cursor.getString(6); String signature = cursor.getString(9); String department = cursor.getString(7); String team = cursor.getString(12); String sex = cursor.getString(13); String mobile = cursor.getString(4); String headUrl = cursor.getString(8); entity.setDbId(userId); entity.setRealName(name); entity.setDepartmentName(department); entity.setDuty(duty); entity.setSignature(signature); entity.setTeam(team); entity.setSex(sex); entity.setMobile(mobile); entity.setHeadUrl(headUrl); } dbOpenHelper.close(); cursor.close(); return entity; } // for deliver unreaded message count private void sendMessageBroadcast() { Intent intent = new Intent(); intent.setAction(MessageInfo.MessageBroadCastName); intent.putExtra("name", getActivity().getResources().getString(R.string.user_feedback)); getActivity().sendBroadcast(intent); } public void setTopGridViewVisibility(boolean isVisible) { if (isVisible == true) { topGridView.setVisibility(View.VISIBLE); isTopGridShow = true; } else { topGridView.setVisibility(View.GONE); isTopGridShow = false; } } public void setGridViewVisibility(boolean isVisible) { if (isVisible == true) { menuGridView.setVisibility(View.VISIBLE); isGridShow = true; } else { menuGridView.setVisibility(View.GONE); isGridShow = false; } } public void hideSoftInput(IBinder token) { if (token != null) { InputMethodManager im = (InputMethodManager) getActivity() .getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS); } } }