package com.tencent.hq.qq.ui.fragment; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import com.tencent.hq.qq.CustomApplcation; import com.tencent.hq.qq.R; import com.tencent.hq.qq.adapter.UserFriendAdapter; import com.tencent.hq.qq.entity.User; import com.tencent.hq.qq.ui.AddFriendActivity; import com.tencent.hq.qq.ui.FragmentBase; import com.tencent.hq.qq.ui.MainActivity; import com.tencent.hq.qq.ui.NearPeopleActivity; import com.tencent.hq.qq.ui.NewFriendActivity; import com.tencent.hq.qq.ui.SetMyInfoActivity; import com.tencent.hq.qq.util.CharacterParser; import com.tencent.hq.qq.util.CollectionUtils; import com.tencent.hq.qq.util.PinyinComparator; import com.tencent.hq.qq.widget.CircleImageView; import com.tencent.hq.qq.widget.ClearEditText; import com.tencent.hq.qq.widget.HeaderLayout; import com.tencent.hq.qq.widget.HeaderLayout.onRightImageButtonClickListener; import com.tencent.hq.qq.widget.MyLetterView; import com.tencent.hq.qq.widget.MyLetterView.OnTouchingLetterChangedListener; import com.tencent.hq.qq.widget.dialog.DialogTips; import com.tencent.hq.qq.widget.residemenu.ResideMenu; import android.annotation.SuppressLint; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; import cn.bmob.im.bean.BmobChatUser; import cn.bmob.im.db.BmobDB; import cn.bmob.v3.listener.UpdateListener; /** * @author htq * @github:https://github.com/HuTianQi * @blog:http://blog.csdn.net/htq__ */ @SuppressLint("DefaultLocale") public class ContactFragment extends FragmentBase implements OnItemClickListener,OnItemLongClickListener{ ClearEditText mClearEditText; TextView dialog; ListView list_friends; MyLetterView right_letter; private UserFriendAdapter userAdapter;// List<User> friends = new ArrayList<User>(); private InputMethodManager inputMethodManager; private CharacterParser characterParser; /** * */ private PinyinComparator pinyinComparator; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub return inflater.inflate(R.layout.fragment_contacts, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); init(); initTitleBarAvatar(); } private void initTitleBarAvatar() { HeaderLayout mHeaderLayout=(HeaderLayout) getActivity().findViewById(R.id.common_actionbar); CircleImageView avatar=(CircleImageView)mHeaderLayout.findViewById(R.id.title_bar_avatar); avatar.setVisibility(View.VISIBLE); avatar.setOnClickListener(openMenu); } private OnClickListener openMenu=new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub if(((MainActivity)getActivity()).resideMenu.isOpened()) ((MainActivity)getActivity()).resideMenu.closeMenu(); else ((MainActivity)getActivity()).resideMenu.openMenu(ResideMenu.DIRECTION_LEFT); } }; private void init() { characterParser = CharacterParser.getInstance(); pinyinComparator = new PinyinComparator(); initTopBarForRight("联系人", R.drawable.base_action_bar_add_bg_selector, new onRightImageButtonClickListener() { @Override public void onClick() { // TODO Auto-generated method stub startAnimActivity(AddFriendActivity.class); } }); initListView(); initRightLetterView(); initEditText(); } private void initEditText() { mClearEditText = (ClearEditText)findViewById(R.id.et_msg_search); mClearEditText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // ������������ֵΪ�գ�����Ϊԭ�����б?����Ϊ��������б� filterData(s.toString()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }); } /** * ���������е�ֵ��������ݲ�����ListView * * @param filterStr */ private void filterData(String filterStr) { List<User> filterDateList = new ArrayList<User>(); if (TextUtils.isEmpty(filterStr)) { filterDateList = friends; } else { filterDateList.clear(); for (User sortModel : friends) { String name = sortModel.getUsername(); if (name != null) { if (name.indexOf(filterStr.toString()) != -1 || characterParser.getSelling(name).startsWith( filterStr.toString())) { filterDateList.add(sortModel); } } } } // ���a-z�������� Collections.sort(filterDateList, pinyinComparator); userAdapter.updateListView(filterDateList); } /** * ΪListView������ * @param date * @return */ private void filledData(List<BmobChatUser> datas) { friends.clear(); int total = datas.size(); for (int i = 0; i < total; i++) { BmobChatUser user = datas.get(i); User sortModel = new User(); sortModel.setAvatar(user.getAvatar()); sortModel.setNick(user.getNick()); sortModel.setUsername(user.getUsername()); sortModel.setObjectId(user.getObjectId()); sortModel.setContacts(user.getContacts()); // ����ת����ƴ�� String username = sortModel.getUsername(); // ��û��username if (username != null) { String pinyin = characterParser.getSelling(sortModel.getUsername()); String sortString = pinyin.substring(0, 1).toUpperCase(); // ������ʽ���ж�����ĸ�Ƿ���Ӣ����ĸ if (sortString.matches("[A-Z]")) { sortModel.setSortLetters(sortString.toUpperCase()); } else { sortModel.setSortLetters("#"); } } else { sortModel.setSortLetters("#"); } friends.add(sortModel); } // ���a-z�������� Collections.sort(friends, pinyinComparator); } ImageView iv_msg_tips; TextView tv_new_name; LinearLayout layout_new;//������ LinearLayout layout_near;//������� private void initListView() { list_friends= (ListView)findViewById(R.id.list_friends); RelativeLayout headView = (RelativeLayout) mInflater.inflate(R.layout.include_new_friend, null); iv_msg_tips = (ImageView)headView.findViewById(R.id.iv_msg_tips); layout_new =(LinearLayout)headView.findViewById(R.id.layout_new); layout_near =(LinearLayout)headView.findViewById(R.id.layout_near); layout_new.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(getActivity(), NewFriendActivity.class); intent.putExtra("from", "contact"); startAnimActivity(intent); } }); layout_near.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(getActivity(), NearPeopleActivity.class); startAnimActivity(intent); } }); list_friends.addHeaderView(headView); userAdapter = new UserFriendAdapter(getActivity(), friends); list_friends.setAdapter(userAdapter); list_friends.setOnItemClickListener(this); list_friends.setOnItemLongClickListener(this); list_friends.setOnTouchListener(new OnTouchListener() { @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouch(View v, MotionEvent event) { // ��������� if (getActivity().getWindow().getAttributes().softInputMode != WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) { if (getActivity().getCurrentFocus() != null) inputMethodManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } return false; } }); } @Override public void setUserVisibleHint(boolean isVisibleToUser) { // TODO Auto-generated method stub if (isVisibleToUser) { queryMyfriends(); } super.setUserVisibleHint(isVisibleToUser); } private void initRightLetterView() { right_letter = (MyLetterView)findViewById(R.id.right_letter); dialog = (TextView)findViewById(R.id.dialog); right_letter.setTextView(dialog); right_letter.setOnTouchingLetterChangedListener(new LetterListViewListener()); } private class LetterListViewListener implements OnTouchingLetterChangedListener { @Override public void onTouchingLetterChanged(String s) { // ����ĸ�״γ��ֵ�λ�� int position = userAdapter.getPositionForSection(s.charAt(0)); if (position != -1) { list_friends.setSelection(position); } } } /** ��ȡ�����б� * queryMyfriends * @return void * @throws */ private void queryMyfriends() { //�Ƿ����µĺ������� if(BmobDB.create(getActivity()).hasNewInvite()){ iv_msg_tips.setVisibility(View.VISIBLE); }else{ iv_msg_tips.setVisibility(View.GONE); } CustomApplcation.getInstance().setContactList(CollectionUtils.list2map(BmobDB.create(getActivity()).getContactList())); Map<String,BmobChatUser> users = CustomApplcation.getInstance().getContactList(); //��װ�µ�User filledData(CollectionUtils.map2list(users)); if(userAdapter==null){ userAdapter = new UserFriendAdapter(getActivity(), friends); list_friends.setAdapter(userAdapter); }else{ userAdapter.notifyDataSetChanged(); } } private boolean hidden; @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); this.hidden = hidden; if(!hidden){ refresh(); } } @Override public void onResume() { super.onResume(); initTitleBarAvatar(); if(!hidden){ refresh(); } } public void refresh(){ try { getActivity().runOnUiThread(new Runnable() { public void run() { queryMyfriends(); } }); } catch (Exception e) { e.printStackTrace(); } } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { // TODO Auto-generated method stub User user = (User) userAdapter.getItem(position-1); //�Ƚ�����ѵ���ϸ����ҳ�� Intent intent =new Intent(getActivity(),SetMyInfoActivity.class); intent.putExtra("from", "other"); intent.putExtra("username", user.getUsername()); startAnimActivity(intent); } @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int position, long arg3) { // TODO Auto-generated method stub User user = (User) userAdapter.getItem(position-1); showDeleteDialog(user); return true; } public void showDeleteDialog(final User user) { DialogTips dialog = new DialogTips(getActivity(),user.getUsername(),"删除该好友", "确定",true,true); // ���óɹ��¼� dialog.SetOnSuccessListener(new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int userId) { deleteContact(user); } }); // ��ʾȷ�϶Ի��� dialog.show(); dialog = null; } /** ɾ����ϵ�� * deleteContact * @return void * @throws */ private void deleteContact(final User user){ final ProgressDialog progress = new ProgressDialog(getActivity()); progress.setMessage("正在删除..."); progress.setCanceledOnTouchOutside(false); progress.show(); userManager.deleteContact(user.getObjectId(), new UpdateListener() { @Override public void onSuccess() { // TODO Auto-generated method stub ShowToast("删除成功"); //ɾ���ڴ� CustomApplcation.getInstance().getContactList().remove(user.getUsername()); //���½��� getActivity().runOnUiThread(new Runnable() { public void run() { progress.dismiss(); userAdapter.remove(user); } }); } @Override public void onFailure(int arg0, String arg1) { // TODO Auto-generated method stub ShowToast("删除失败"+arg1); progress.dismiss(); } }); } }