package net.cgt.weixin.fragment; import http.common.SchemaDef; import java.util.ArrayList; import java.util.List; import net.cgt.weixin.R; import net.cgt.weixin.activity.UserDetailedInfoActivity; import net.cgt.weixin.domain.User; import net.cgt.weixin.utils.AppToast; import net.cgt.weixin.utils.DensityUtil; import net.cgt.weixin.utils.HandlerTypeUtils; import net.cgt.weixin.utils.LogUtil; import net.cgt.weixin.view.adapter.PinyinAdapter; import net.cgt.weixin.view.manager.XmppManager; import net.cgt.weixin.view.pinyin.AssortView; import net.cgt.weixin.view.pinyin.AssortView.OnTouchAssortListener; import org.jivesoftware.smack.Roster; import android.app.Dialog; import android.content.Intent; import android.os.Bundle; import android.os.Message; import android.view.Display; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; import android.widget.PopupWindow; import android.widget.TextView; /** * 通讯录 * * @author lijian-pc * @date 2014-11-27 */ public class AddressBookFragment extends BaseFragment implements OnItemLongClickListener, OnChildClickListener { private static final String LOGTAG = LogUtil.makeLogTag(AddressBookFragment.class); /** * 可扩展的ListView */ private ExpandableListView mElv_addressbook; /** * 右侧拼音导航 */ private AssortView mV_addressbook_right; /** * 可扩展ListView的适配器 */ private PinyinAdapter mAdpt_pingyin; /** * 泡泡 */ private PopupWindow popupWindow; /** * 用户信息集合 */ private List<User> mList_user; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.cgt_fragment_addressbook, null); init(v); return v; } @Override protected void requset(int schemaDef) { switch (schemaDef) { case SchemaDef.PULL_ALL_FRIENDS: pullAllFriends(); break; } } /** * 拉取所有好友信息 */ private void pullAllFriends() { Roster roster = XmppManager.getInstance().getConnection().getRoster(); List<User> list = XmppManager.getInstance().getAllUser(roster); if (list.size() == 0) { mHandler.sendEmptyMessage(HandlerTypeUtils.WX_HANDLER_TYPE_LOAD_DATA_EMPTY); } else { // if (list.get(0).getUserAccount() == mList_user.get(0).getUserAccount()) { // mHandler.sendEmptyMessage(HandlerTypeUtils.WX_HANDLER_TYPE_LOAD_DATA_SAME); // } else { mList_user.addAll(list); mHandler.sendEmptyMessage(HandlerTypeUtils.WX_HANDLER_TYPE_LOAD_DATA_SUCCESS); // } } } @Override protected void parseMessage(Message msg) { switch (msg.what) { case HandlerTypeUtils.WX_HANDLER_TYPE_LOAD_DATA_SUCCESS: setData(); break; case HandlerTypeUtils.WX_HANDLER_TYPE_LOAD_DATA_EMPTY: break; default: break; } } private void setData() { if (mAdpt_pingyin == null) { mAdpt_pingyin = new PinyinAdapter(getActivity(), mList_user); } else { mAdpt_pingyin.notifyDataSetChanged(); } } private void init(View v) { initView(v); initData(); } private void initView(View v) { mElv_addressbook = (ExpandableListView) v.findViewById(R.id.cgt_elv_addressbook); mV_addressbook_right = (AssortView) v.findViewById(R.id.cgt_v_addressbook_right); mElv_addressbook.setOnItemLongClickListener(this); mElv_addressbook.setOnChildClickListener(this); } private void initData() { if (mList_user == null) { mList_user = new ArrayList<User>(); } requestData(SchemaDef.PULL_ALL_FRIENDS); // ArrayList<String> mItems = new ArrayList<String>(); // mItems.add("admin"); // mItems.add("lijian"); // mItems.add("lijian1"); // mItems.add("lijian2"); // mItems.add("lijian3"); // mItems.add("lijian4"); // mItems.add("lijian5"); // mItems.add("李建"); // mItems.add("李建1"); // mItems.add("李建2"); // mItems.add("李建3"); // mItems.add("李建4"); // mItems.add("李建5"); // mItems.add("Diary of a Wimpy Kid 6: Cabin Fever"); // mItems.add("Steve Jobs"); // mItems.add("Inheritance (The Inheritance Cycle)"); // mItems.add("11/22/63: A Novel"); // mItems.add("张三"); // mItems.add("The Hunger Games"); // mItems.add("李四"); // mItems.add("王五"); // mItems.add("赵六"); // mItems.add("The LEGO Ideas Book"); // mItems.add("田七"); // mItems.add("Explosive Eighteen: A Stephanie Plum Novel"); // mItems.add("Catching Fire (The Second Book of the Hunger Games)"); // mItems.add("Elder Scrolls V: Skyrim: Prima Official Game Guide"); // mItems.add("Death Comes to Pemberley"); // mItems.add("Diary of a Wimpy Kid 6: Cabin Fever"); // mItems.add("Steve Jobs"); // mItems.add("Inheritance (The Inheritance Cycle)"); // mItems.add("11/22/63: A Novel"); // mItems.add("The Hunger Games"); // mItems.add("The LEGO Ideas Book"); // mItems.add("Explosive Eighteen: A Stephanie Plum Novel"); // mItems.add("Catching Fire (The Second Book of the Hunger Games)"); // mItems.add("Elder Scrolls V: Skyrim: Prima Official Game Guide"); // mItems.add("Death Comes to Pemberley"); // // mItems.add("张三"); // mItems.add("李四"); // mItems.add("王五"); // mItems.add("赵六"); // mItems.add("田七"); // mItems.add("韩千叶"); // mItems.add("柳辰飞"); // mItems.add("夏舒征"); // mItems.add("慕容冲"); // mItems.add("萧合凰"); // mItems.add("阮停"); // mItems.add("西粼宿"); // mItems.add("孙祈钒"); // mItems.add("狄云"); // mItems.add("丁典"); // mItems.add("花错"); // mItems.add("顾西风"); // mItems.add("统月"); // mItems.add("苏普"); // mItems.add("江城子"); // mItems.add("柳长街"); // mItems.add("韦好客"); // mItems.add("袁冠南"); // mItems.add("燕七"); // mItems.add("金不换 "); // // mItems.add("장삼"); // mItems.add("영희"); // mItems.add("王五"); // mItems.add("赵六"); // mItems.add("삼칠초"); // mItems.add("韩千叶"); // mItems.add("柳辰飞"); // mItems.add("夏舒征"); // mItems.add("慕容冲"); // mItems.add("萧合凰"); // mItems.add("阮停"); // mItems.add("서 노인 맑고 깨끗하다"); // mItems.add("孙祈钒"); // mItems.add("성 구름"); // mItems.add("丁典"); // mItems.add("잘못 썼다"); // mItems.add("顾西风"); // mItems.add("전부 달"); // mItems.add("소 보편적"); // mItems.add("장청 아들"); // mItems.add("버드나무 장거리"); // mItems.add("위 손님 접대를 좋아한다"); // mItems.add("袁冠南"); // mItems.add("연 일곱"); // mItems.add("먹"); // Collections.sort(mItems); // // mList = new ArrayList<User>(); // for (int i = 0; i < mItems.size(); i++) { // User user = new User(); // user.setUserAccount(mItems.get(i)); // if (i % 5 == 0) { // user.setUserPhote(String.valueOf(R.drawable.icon)); // } else { // user.setUserPhote(String.valueOf(R.drawable.user_picture)); // } // // mList.add(user); // } User user1 = new User(); user1.setUserAccount(" 1新的朋友"); user1.setUserPhote(String.valueOf(R.drawable.cgt_addressbook_newfriend)); User user2 = new User(); user2.setUserAccount(" 2群聊"); user2.setUserPhote(String.valueOf(R.drawable.cgt_addressbook_groupchat)); User user3 = new User(); user3.setUserAccount(" 3标签"); user3.setUserPhote(String.valueOf(R.drawable.cgt_addressbook_mark)); User user4 = new User(); user4.setUserAccount(" 4公众号"); user4.setUserPhote(String.valueOf(R.drawable.cgt_addressbook_publicnumber)); // mList.add(user1); // mList.add(user2); // mList.add(user3); // mList.add(user4); mList_user.add(user1); mList_user.add(user2); mList_user.add(user3); mList_user.add(user4); if (mAdpt_pingyin == null) { mAdpt_pingyin = new PinyinAdapter(getActivity(), mList_user); } else { mAdpt_pingyin.notifyDataSetChanged(); } mElv_addressbook.setAdapter(mAdpt_pingyin); // 展开所有 for (int i = 0, length = mAdpt_pingyin.getGroupCount(); i < length; i++) { mElv_addressbook.expandGroup(i); } // 字母按键回调 mV_addressbook_right.setOnTouchAssortListener(new OnTouchAssortListener() { View layoutView = LayoutInflater.from(getActivity()).inflate(R.layout.cgt_layout_addressbook_middle_alert_dialog, null); TextView text = (TextView) layoutView.findViewById(R.id.cgt_tv_addressbook_content); @Override public void onTouchAssortListener(String str) { int index = mAdpt_pingyin.getAssort().getHashList().indexOfKey(str); if (index != -1) { mElv_addressbook.setSelectedGroup(index); } if (popupWindow != null) { text.setText(str); } else { popupWindow = new PopupWindow(layoutView, DensityUtil.dip2px(getActivity(), 80), DensityUtil.dip2px(getActivity(), 80), false); // 显示在Activity的根视图中心 popupWindow.showAtLocation(getActivity().getWindow().getDecorView(), Gravity.CENTER, 0, 0); } text.setText(str); } @Override public void onTouchAssortUP() { if (popupWindow != null) { popupWindow.dismiss(); popupWindow = null; } } }); } @Override public void onStop() { if (popupWindow != null) { popupWindow.dismiss(); popupWindow = null; } super.onStop(); } @Override public void onDestroy() { if (popupWindow != null) { popupWindow.dismiss(); popupWindow = null; } super.onDestroy(); } @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { if (groupPosition == 0) { switch (childPosition) { case 0: AppToast.getToast().show(R.string.text_addressbook_newFriend); break; case 1: AppToast.getToast().show(R.string.text_addressbook_groupChat); break; case 2: AppToast.getToast().show(R.string.text_addressbook_mark); break; case 3: AppToast.getToast().show(R.string.text_addressbook_publicNumber); break; default: break; } } else { Intent intent = new Intent(); intent.setClass(getActivity(), UserDetailedInfoActivity.class); Bundle bundle = new Bundle(); bundle.putParcelable("user", (User) mAdpt_pingyin.getChild(groupPosition, childPosition)); intent.putExtras(bundle); startActivity(intent); AppToast.getToast().show(((User) mAdpt_pingyin.getChild(groupPosition, childPosition)).getUserAccount()); } return false; } @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { int groupPosition = (Integer) view.getTag(R.id.cgt_tv_addressbook_content); int childPosition = (Integer) view.getTag(R.id.cgt_tv_addressbook_group_item); if (childPosition != -1) { String userName = ((User) mAdpt_pingyin.getChild(groupPosition, childPosition)).getUserAccount(); AppToast.getToast().show(userName); final Dialog dialog = new Dialog(getActivity(), R.style.cgt_dialog); View v = View.inflate(getActivity(), R.layout.cgt_layout_addressbook_item_alert_dialog, null); TextView mTv_item_alert_dialog_userName = (TextView) v.findViewById(R.id.cgt_tv_item_alert_dialog_userName); TextView mTv_item_alert_dialog_click = (TextView) v.findViewById(R.id.cgt_tv_item_alert_dialog_click); mTv_item_alert_dialog_userName.setText(userName); mTv_item_alert_dialog_click.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { AppToast.getToast().show("设置标签及备注"); dialog.cancel(); } }); dialog.setCancelable(true); dialog.setContentView(v); dialog.show(); Window dialogWindow = dialog.getWindow(); WindowManager m = getActivity().getWindowManager(); Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值 // p.height = (int) (d.getHeight() * 0.6); // 高度设置为屏幕的0.6 p.width = (int) (d.getWidth() * 0.8); // 宽度设置为屏幕的0.65 dialogWindow.setAttributes(p); } return true;//设置为true,长点击完后,消耗该事件 } }