package com.bestapp.yikuair.officialaccount; import java.io.Serializable; import java.util.ArrayList; import java.util.LinkedList; import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; 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.OnClickListener; import android.view.View.OnFocusChangeListener; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.Button; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.bestapp.yikuair.MainApp; import com.bestapp.yikuair.R; import com.bestapp.yikuair.adapter.SubscripionAccountAdapter; import com.bestapp.yikuair.database.DBOpenHelper; import com.bestapp.yikuair.fragments.ChatActivity; import com.bestapp.yikuair.fragments.ChatMsgEntity; import com.bestapp.yikuair.fragments.ClientSocket; import com.bestapp.yikuair.utils.AccountInfomation; import com.bestapp.yikuair.utils.AsyncImageLoader; import com.bestapp.yikuair.utils.DBlog; import com.bestapp.yikuair.utils.MessageInfo; import com.bestapp.yikuair.utils.SharedPreferencesUtil; import com.bestapp.yikuair.utils.UserInfo; public class OfficialAccountFragment extends Fragment implements OnClickListener, OnItemClickListener, OnItemLongClickListener { private ListView mListView; private SubscripionAccountAdapter mAdapter; private ArrayList<AccountInfomation> mInfos = new ArrayList<AccountInfomation>(); private ImageView NO_DATA; public static OfficialAccountFragment instance; private Dialog mDialog; private int showDeleteId = 0; private boolean change = false; public DBOpenHelper mDBOpenHelper; public AsyncImageLoader asyncImageLoader; public ClientSocket mClientSocket; public void removeInfo(String id) { mDBOpenHelper.delete(id, null); MainApp.preference.removeSetting(UserInfo.db_id + id + "id"); MainApp.preference.removeSetting(UserInfo.db_id + id + "info"); MainApp.preference.removeSetting(UserInfo.db_id + id + "time"); MainApp.preference.removeSetting(UserInfo.db_id + id + "num"); } public void showRoundProcessDialog() { if (mDialog != null && !mDialog.isShowing()) { mDialog.show(); mDialog.setCanceledOnTouchOutside(false); mDialog.setContentView(R.layout.loading_dialog); } } public void closeLoadingDialog() { if (mDialog != null && mDialog.isShowing()) { mDialog.dismiss(); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.activity_main, null); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initView(); chatSharedPre = new SharedPreferencesUtil(getActivity()); instance = this; } @Override public void onDestroy() { Loaded = false; instance = null; DBlog.e("destory", "---------------------"); super.onDestroy(); }; @Override public void onPause() { // for (AccountInfomation iterable_element : mInfos) { // saveInfo(iterable_element); // } unregisterBroadcast(); for (AccountInfomation iterable_element : MessageInfo.OfficeAccountList_MINE) { saveInfo(iterable_element); } sendBroadcast(); super.onPause(); }; private void sendBroadcast() { Intent intent = new Intent(); intent.putExtra("name", "office"); intent.putExtra("number", MessageInfo.OfficeAccountList.size()); intent.setAction(MessageInfo.FriendBroadCastName); getActivity().sendBroadcast(intent); } private static boolean Loaded = false; @Override public void onResume() { id = ""; registerBroadcast(); super.onResume(); }; private void initView() { registerBroadcast(); // mInfos = (ArrayList<AccountInfomation>) // MessageInfo.OfficeAccountList_MINE; mClientSocket = new ClientSocket(getActivity()); mDBOpenHelper = new DBOpenHelper(getActivity()); asyncImageLoader = new AsyncImageLoader(getActivity()); View view = getActivity().findViewById(R.id.offcical_content); NO_DATA = (ImageView) getActivity().findViewById(R.id.no_data); if (MessageInfo.OfficeAccountList_MINE.size() > 0) { NO_DATA.setVisibility(View.GONE); for (AccountInfomation element : MessageInfo.OfficeAccountList_MINE) { getInfo(element); } } else { NO_DATA.setVisibility(View.VISIBLE); } mListView = (ListView) getActivity() .findViewById(R.id.accout_info_list); mAdapter = new SubscripionAccountAdapter( getActivity(), (ArrayList<AccountInfomation>) MessageInfo.OfficeAccountList_MINE); mListView.setAdapter(mAdapter); ImageButton suButton = (ImageButton) getActivity().findViewById( R.id.sub_button); mListView.setOnItemClickListener(this); mListView.setOnItemLongClickListener(this); view.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN && showDeleteId != 0) { mAdapter.notifyDataSetChanged(); showDeleteId = 0; } return false; } }); getMessage(); suButton.setOnClickListener(this); } public void getMessage() { if (MessageInfo.OfficeAccountList.size() > 0) { for (ChatMsgEntity entity : MessageInfo.OfficeAccountList) { AccountInfomation accountInfomation = new AccountInfomation(); accountInfomation.setId(entity.getSenderId()); accountInfomation.setTime(entity.getTime()); accountInfomation.setInformation(entity.getContent()); if (MessageInfo.OfficeAccountList_MINE .contains(accountInfomation)) { int index = MessageInfo.OfficeAccountList_MINE .indexOf(accountInfomation); AccountInfomation older = MessageInfo.OfficeAccountList_MINE .get(index); if (entity.getStatus() != MessageInfo.SEND_READED) { accountInfomation .setInfor_num(older.getInfor_num() + 1); } accountInfomation.setRealname(older.getRealname()); accountInfomation.setHeadurl(older.getHeadurl()); accountInfomation.setSub(older.isSub()); MessageInfo.OfficeAccountList_MINE.set(index, accountInfomation); } } } mAdapter.notifyDataSetChanged(); if (MessageInfo.OfficeAccountList_MINE.size() == 0) { NO_DATA.setVisibility(View.VISIBLE); } else { NO_DATA.setVisibility(View.GONE); } if (!id.equals("")) { Log.e("test", "send officialaccotn broadcast"); Intent intent = new Intent(); intent.setAction(MessageInfo.MessageBroadCastName); intent.putExtra("Id", id); intent.putExtra("name", name); intent.putExtra("type", MessageInfo.OFFICEACCOUNT); intent.putExtra("message", (getChatsById(id).get(0))); getActivity().sendBroadcast(intent); } } private void saveInfo(AccountInfomation accountInfomation) { MainApp.preference.setSettings( UserInfo.db_id + accountInfomation.getId() + "id", accountInfomation.getId()); MainApp.preference.setSettings( UserInfo.db_id + accountInfomation.getId() + "info", accountInfomation.getInformation()); MainApp.preference.setSettings( UserInfo.db_id + accountInfomation.getId() + "time", accountInfomation.getTime()); MainApp.preference.setSettings( UserInfo.db_id + accountInfomation.getId() + "num", accountInfomation.getInfor_num()); } private AccountInfomation getInfo(AccountInfomation accountInfomation) { if (accountInfomation.getInformation() == null || accountInfomation.getInformation().equals("")) { accountInfomation.setInformation(MainApp.preference.getSettings( UserInfo.db_id + accountInfomation.getId() + "info", "")); accountInfomation.setTime(MainApp.preference.getSettings( UserInfo.db_id + accountInfomation.getId() + "time", "")); accountInfomation.setInfor_num(Integer.parseInt(MainApp.preference .getSettings(UserInfo.db_id + accountInfomation.getId() + "num", "0"))); } for (ChatMsgEntity element : MessageInfo.OfficeAccountList) { if (element.getSenderId().equals(accountInfomation.getId())) { accountInfomation.setInfor_num(0); } } return accountInfomation; } public void onActivityResult(int requestCode, int resultCode, Intent data) { if (data == null) return; if (data.hasExtra("AccountInfomationList")) { ArrayList<AccountInfomation> newlist = data .getParcelableArrayListExtra("AccountInfomationList"); if (newlist.size() != MessageInfo.OfficeAccountList_MINE.size()) { change = true; } for (AccountInfomation accountInfomation : MessageInfo.OfficeAccountList_MINE) { if (newlist.contains(accountInfomation)) { int index = newlist.indexOf(accountInfomation); AccountInfomation obj = newlist.get(index); if (obj.getTime() != null && obj.getTime().equals("")) { newlist.get(index).setTime(accountInfomation.getTime()); } else { change = true; } } } MessageInfo.OfficeAccountList_MINE.clear(); MessageInfo.OfficeAccountList_MINE.addAll(newlist); } else if (data.hasExtra("userId")) { String content = data.getStringExtra("content"); String userId = data.getStringExtra("userId"); String fullTime = data.getStringExtra("fullTime"); if (content != null && !content.equals("")) { change = true; // AccountInfomation accountInfomation = new // AccountInfomation(); // accountInfomation.setId(userId); // accountInfomation.setTime(fullTime); // accountInfomation.setInformation(content); // accountInfomation.setSub(true); // int index = mInfos.indexOf(accountInfomation); // if (index != -1) { // accountInfomation.setRealname(mInfos.get(index) // .getRealname()); // accountInfomation // .setHeadurl(mInfos.get(index).getHeadurl()); // mInfos.set(index, accountInfomation); // } } } if (change) { mAdapter.notifyDataSetChanged(); change = false; } } @Override public void onClick(View v) { Intent intent = new Intent(getActivity(), SubActivity.class); // intent.putParcelableArrayListExtra("sub_list", mInfos); startActivityForResult(intent, 1); getActivity().overridePendingTransition(R.anim.in_from_right, R.anim.out_of_left); } private String id = ""; private String name; @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { MessageInfo.OfficeAccountList_MINE.get(arg2).setInfor_num(0); Intent intent = new Intent(getActivity(), ChatActivity.class); id = MessageInfo.OfficeAccountList_MINE.get(arg2).getId(); name = MessageInfo.OfficeAccountList_MINE.get(arg2).getRealname(); intent.putExtra("Id", id); intent.putExtra("name", MessageInfo.OfficeAccountList_MINE.get(arg2) .getRealname()); intent.putExtra("type", MessageInfo.OFFICEACCOUNT); intent.putExtra("chatmsgList", (Serializable) (getChatsById(id))); startActivityForResult(intent, 1); getActivity().overridePendingTransition(R.anim.in_from_right, R.anim.out_of_left); sendBroadcast(); } private ArrayList<ChatMsgEntity> getChatsById(String id) { ArrayList<ChatMsgEntity> newlist = new ArrayList<ChatMsgEntity>(); for (ChatMsgEntity chatMsgEntity : MessageInfo.OfficeAccountList) { if (chatMsgEntity.getSenderId().equals(id)) { newlist.add(chatMsgEntity); DBlog.e("t", chatMsgEntity.getType() + ""); } } MessageInfo.OfficeAccountList.removeAll(newlist); return newlist; } private SharedPreferencesUtil chatSharedPre; public static LinkedList<ChatMsgEntity> mDataArrays = new LinkedList<ChatMsgEntity>(); @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Button textView = (Button) arg1.findViewById(R.id.delete_info); textView.setVisibility(View.VISIBLE); Animation animation = AnimationUtils.loadAnimation(getActivity(), R.anim.in_from_right); textView.setAnimation(animation); animation.start(); showDeleteId++; textView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int position = (Integer) v.getTag(); removeInfo(MessageInfo.OfficeAccountList_MINE.get(position) .getId()); MessageInfo.OfficeAccountList_MINE.get(position) .setInformation(""); MessageInfo.OfficeAccountList_MINE.get(position).setTime(""); mAdapter.notifyDataSetChanged(); chatSharedPre.saveDatatoShared( MessageInfo.OfficeAccountList_MINE.get(position) .getId() + "_" + UserInfo.db_id, mDataArrays); showDeleteId = 0; } }); textView.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { v.setVisibility(View.GONE); showDeleteId = 0; } } }); return true; } BroadcastReceiver fbt = new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { if (arg1 == null) return; if (arg1.getStringExtra("name").equals("office")) { getMessage(); } } }; private void registerBroadcast() { IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(MessageInfo.FriendMessageBroadCastName); getActivity().registerReceiver(fbt, intentFilter); } private void unregisterBroadcast() { getActivity().unregisterReceiver(fbt); } }