package com.yyquan.jzh.fragment.friend;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.gson.Gson;
import com.squareup.picasso.Picasso;
import com.yyquan.jzh.R;
import com.yyquan.jzh.activity.ChatActivity;
import com.yyquan.jzh.activity.MainActivity;
import com.yyquan.jzh.activity.ShowMessageActivity;
import com.yyquan.jzh.entity.Ip;
import com.yyquan.jzh.entity.User;
import com.yyquan.jzh.entity.XmppFriend;
import com.yyquan.jzh.entity.XmppUser;
import com.yyquan.jzh.util.SLog;
import com.yyquan.jzh.util.ToastUtil;
import com.yyquan.jzh.view.CircleImageView;
import com.yyquan.jzh.view.DialogView;
import com.yyquan.jzh.xmpp.XmppService;
import com.yyquan.jzh.xmpp.XmppTool;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.RosterGroup;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import me.nereo.multi_image_selector.bean.Image;
/**
* Created by Administrator on 2016/1/1.
*/
public class FriendFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener, ExpandableListView.OnGroupClickListener {
View view;
SwipeRefreshLayout freshLayout;
ExpandableListView expandableListView;
MyFriendExpadableAdapter adapter;
private List<RosterGroup> groups;
private Map<RosterGroup, List<XmppFriend>> childs;
Map<String, Integer> map_is_open;
List<String> list_is_open;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (view == null) {
DialogView.Initial(getActivity(), "正在加载好友列表......");
view = inflater.inflate(R.layout.fragment_friend, container, false);
map_is_open = new HashMap<>();
list_is_open = new ArrayList<>();
freshLayout = (SwipeRefreshLayout) view.findViewById(R.id.fragment_friend_swipe);
freshLayout.setOnRefreshListener(this);
freshLayout.setColorSchemeResources(android.R.color.holo_blue_bright,
android.R.color.holo_green_dark,
android.R.color.holo_red_light,
android.R.color.holo_orange_dark);
expandableListView = (ExpandableListView) view.findViewById(R.id.fragment_friend_expandableListView);
expandableListView.setOnGroupClickListener(this);
DialogView.show();
getData();
}
return view;
}
public void getData() {
if (XmppTool.getInstance().isConnection() == false) {
ToastUtil.show(getActivity(), "已断开,正在重连中....");
return;
}
new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
groups = XmppTool.getInstance().getGroups();
childs = new HashMap<RosterGroup, List<XmppFriend>>();
HashMap<String, Object> map = XmppService.map;
for (int i = 0; i < groups.size(); i++) {
List<RosterEntry> child = XmppTool.getInstance().getEntrysByGroup(groups.get(i).getName());
List<XmppFriend> lists = new ArrayList<XmppFriend>();
list_is_open.add(groups.get(i).getName());
for (int j = 0; j < child.size(); j++) {
List<XmppUser> list = XmppTool.getInstance().searchUsers(child.get(j).getUser().split("@")[0]);
// String str[] = list.get(0).getName().split(";");
User users = new Gson().fromJson(list.get(0).getName(), User.class);
int status = 6;
if (map.containsKey(users.getUser())) {
status = (int) map.get(users.getUser());
}
XmppFriend xf = new XmppFriend(users, status);
lists.add(xf);
}
Collections.sort(lists, COMPARATOR);
childs.put(groups.get(i), lists);
}
handler.sendEmptyMessage(1);
}
}.start();
}
@Override
public void onRefresh() {
getData();
}
private Handler handler = new Handler() {
public void handleMessage(android.os.Message m) {
if (m.what == 1) {
if (groups.size() == 0) {
freshLayout.setVisibility(View.GONE);
} else {
freshLayout.setVisibility(View.VISIBLE);
setAdapter();
}
DialogView.dismiss();
}
}
};
protected void setAdapter() {
adapter = new MyFriendExpadableAdapter();
expandableListView.setAdapter(adapter);
int groupCount = expandableListView.getCount();
if (groupCount > 0) {
for (int i = 0; i < groupCount; i++) {
if (map_is_open.containsKey(list_is_open.get(i))) {
if (map_is_open.get(list_is_open.get(i)) == 1) {
if (expandableListView != null) {
expandableListView.expandGroup(i);
}
}
}
}
}
adapter.notifyDataSetChanged();
freshLayout.setRefreshing(false);
}
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
if (map_is_open.containsKey(list_is_open.get(groupPosition))) {
if (expandableListView.isGroupExpanded(groupPosition)) {
map_is_open.put(list_is_open.get(groupPosition), 0);
} else {
map_is_open.put(list_is_open.get(groupPosition), 1);
}
} else {
map_is_open.put(list_is_open.get(groupPosition), 1);
}
return false;
}
class MyFriendExpadableAdapter extends BaseExpandableListAdapter {
@Override
public int getGroupCount() {
return groups.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return childs.get(groups.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return groups.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return childs.get(groups.get(groupPosition)).get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupHolder holder;
if (convertView == null) {
holder = new GroupHolder();
convertView = LayoutInflater.from(getActivity()).inflate(R.layout.friend_group_layout, parent, false);
holder.tv = (TextView) convertView.findViewById(R.id.textView);
holder.iv = (ImageView) convertView.findViewById(R.id.imageView);
convertView.setTag(holder);
} else {
holder = (GroupHolder) convertView.getTag();
}
if (isExpanded) {
holder.iv.setImageResource(R.mipmap.friend_group_point_xia);
} else {
holder.iv.setImageResource(R.mipmap.friend_group_point);
}
RosterGroup group = (RosterGroup) getGroup(groupPosition);
holder.tv.setText(group.getName() + "[" + childs.get(groups.get(groupPosition)).size() + "]");
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ChildHolder holder;
final XmppFriend xf = (XmppFriend) getChild(groupPosition, childPosition);
// RosterEntry childEntry = (RosterEntry) getChild(groupPosition, childPosition);
if (null == convertView) {
holder = new ChildHolder();
convertView = LayoutInflater.from(getActivity()).inflate(R.layout.friend_child_layout, null);
holder.cv_icon = (CircleImageView) convertView.findViewById(R.id.friend_child_imageview_icon);
holder.iv_statu = (ImageView) convertView.findViewById(R.id.friend_child_imageview_status);
holder.tv_name = (TextView) convertView.findViewById(R.id.friend_child_textView_name);
holder.tv_statu = (TextView) convertView.findViewById(R.id.friend_child_textView_status);
// convertView.setOnLongClickListener(new View.OnLongClickListener() {
// @Override
// public boolean onLongClick(View v) {
// AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());
// dialog.setTitle("删除好友");
// dialog.setMessage("是否删除好友?");
// dialog.setPositiveButton("是", new DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface dialog, int which) {
// if (XmppTool.getInstance().removeUser(xf.getUser().getUser())) {
// ToastUtil.show(getActivity(), "删除成功");
// getData();
// } else {
// ToastUtil.show(getActivity(), "删除失败,请重试.");
// }
// }
// });
// dialog.setNegativeButton("否", null);
// dialog.show();
// return true;
// }
// });
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (XmppTool.getInstance().isConnection() == false) {
ToastUtil.show(getActivity(), "已断开,正在重连中....");
return;
}
Intent intent = new Intent(getActivity(), ShowMessageActivity.class);
intent.putExtra("user", xf.getUser().getUser());
startActivity(intent);
}
});
convertView.setTag(holder);
} else {
holder = (ChildHolder) convertView.getTag();
}
holder.tv_name.setText(xf.getUser().getNickname());
switch (xf.getStatus()) {
//0.在线 1.Q我吧 2.忙碌 3.勿扰 4.离开 5.隐身 6.离线
case 5:
case 6:
holder.iv_statu.setVisibility(View.INVISIBLE);
holder.tv_statu.setTextColor(getResources().getColor(R.color.tab_text_bg));
holder.tv_statu.setText("离线");
break;
case 0:
holder.iv_statu.setVisibility(View.VISIBLE);
holder.iv_statu.setImageResource(R.mipmap.status_online);
holder.tv_statu.setTextColor(Color.GREEN);
holder.tv_statu.setText("在线");
break;
case 2:
holder.iv_statu.setVisibility(View.VISIBLE);
holder.iv_statu.setImageResource(R.mipmap.status_busy);
holder.tv_statu.setTextColor(Color.RED);
holder.tv_statu.setText("忙碌");
break;
case 3:
holder.iv_statu.setVisibility(View.VISIBLE);
holder.iv_statu.setImageResource(R.mipmap.status_shield);
holder.tv_statu.setTextColor(Color.RED);
holder.tv_statu.setText("勿扰");
break;
case 4:
holder.iv_statu.setVisibility(View.VISIBLE);
holder.iv_statu.setImageResource(R.mipmap.status_leave);
holder.tv_statu.setTextColor(getResources().getColor(R.color.tab_text_bg));
holder.tv_statu.setText("离开");
break;
case 1:
holder.iv_statu.setVisibility(View.VISIBLE);
holder.iv_statu.setImageResource(R.mipmap.status_qme);
holder.tv_statu.setTextColor(Color.GREEN);
holder.tv_statu.setText("Q我吧");
break;
}
if (xf.getUser().getIcon().equals("")) {
if (xf.getUser().getSex().equals("男")) {
holder.cv_icon.setImageResource(R.mipmap.me_icon_man);
} else {
holder.cv_icon.setImageResource(R.mipmap.me_icon_woman);
}
} else {
if (xf.getUser().getIcon().substring(0, 4).equals("http")) {
Picasso.with(getActivity()).load(xf.getUser().getIcon()).resize(200, 200).placeholder(R.mipmap.qq_addfriend_search_friend).error(R.mipmap.qq_addfriend_search_friend).centerInside().into(holder.cv_icon);
} else {
Picasso.with(getActivity()).load(Ip.ip_icon + xf.getUser().getIcon()).resize(200, 200).placeholder(R.mipmap.qq_addfriend_search_friend).error(R.mipmap.qq_addfriend_search_friend).centerInside().into(holder.cv_icon);
}
}
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
class GroupHolder {
TextView tv;
ImageView iv;
}
class ChildHolder {
CircleImageView cv_icon;
ImageView iv_statu;
TextView tv_name;
TextView tv_statu;
}
private Comparator<XmppFriend> COMPARATOR = new Comparator<XmppFriend>() {
public int compare(XmppFriend o1, XmppFriend o2) {
return o1.compareTo(o2);// 运用User类的compareTo方法比较两个对象
}
};
}