com.easemob.chatuidemo.activity.GroupDetailsActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.easemob.chatuidemo.activity.GroupDetailsActivity.java

Source

/**
 * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved.
 * <p/>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.easemob.chatuidemo.activity;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.TextUtils;
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.OnLongClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.Volley;
import com.boshu.utils.Model;
import com.boshu.utils.StrUtils;
import com.easemob.chat.EMChatManager;
import com.easemob.chat.EMGroup;
import com.easemob.chat.EMGroupManager;
import com.easemob.chatuidemo.utils.UserUtils;
import com.easemob.chatuidemo.widget.ExpandGridView;
import com.easemob.exceptions.EaseMobException;
import com.easemob.util.EMLog;
import com.easemob.util.NetUtils;
import com.lifeisle.android.R;
import com.lifeisle.jekton.util.network.AutoLoginRequest;

import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class GroupDetailsActivity extends BaseActivity implements OnClickListener {
    private static final String TAG = "GroupDetailsActivity";
    private static final int REQUEST_CODE_ADD_USER = 0;
    private static final int REQUEST_CODE_EXIT = 1;
    private static final int REQUEST_CODE_EXIT_DELETE = 2;
    private static final int REQUEST_CODE_CLEAR_ALL_HISTORY = 3;
    private static final int REQUEST_CODE_ADD_TO_BALCKLIST = 4;
    private static final int REQUEST_CODE_EDIT_GROUPNAME = 5;
    String longClickUsername = null;

    private ExpandGridView userGridview;
    private String groupId;
    private ProgressBar loadingPB;
    private Button exitBtn;
    private Button deleteBtn;
    private EMGroup group;
    private GridAdapter adapter;
    private int referenceWidth;
    private int referenceHeight;
    private ProgressDialog progressDialog;
    private ProgressDialog deleteDialog;

    private RelativeLayout rl_switch_block_groupmsg;
    /**
     * ??imageView
     */
    private ImageView iv_switch_block_groupmsg;
    /**
     * ??imageview
     */
    private ImageView iv_switch_unblock_groupmsg;

    public static GroupDetailsActivity instance;

    String st = "";
    // ?
    private RelativeLayout clearAllHistory;
    private RelativeLayout blacklistLayout;
    private RelativeLayout changeGroupNameLayout;
    private RelativeLayout idLayout;
    private TextView idText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // ??groupid
        groupId = getIntent().getStringExtra("groupId");
        group = EMGroupManager.getInstance().getGroup(groupId);

        // we are not supposed to show the group if we don't find the group
        if (group == null) {
            finish();
            return;
        }

        setContentView(R.layout.activity_group_details);
        instance = this;
        st = getResources().getString(R.string.people);
        clearAllHistory = (RelativeLayout) findViewById(R.id.clear_all_history);
        userGridview = (ExpandGridView) findViewById(R.id.gridview);
        loadingPB = (ProgressBar) findViewById(R.id.progressBar);
        exitBtn = (Button) findViewById(R.id.btn_exit_grp);
        deleteBtn = (Button) findViewById(R.id.btn_exitdel_grp);
        blacklistLayout = (RelativeLayout) findViewById(R.id.rl_blacklist);
        changeGroupNameLayout = (RelativeLayout) findViewById(R.id.rl_change_group_name);
        idLayout = (RelativeLayout) findViewById(R.id.rl_group_id);
        idLayout.setVisibility(View.VISIBLE);
        idText = (TextView) findViewById(R.id.tv_group_id_value);

        rl_switch_block_groupmsg = (RelativeLayout) findViewById(R.id.rl_switch_block_groupmsg);

        iv_switch_block_groupmsg = (ImageView) findViewById(R.id.iv_switch_block_groupmsg);
        iv_switch_unblock_groupmsg = (ImageView) findViewById(R.id.iv_switch_unblock_groupmsg);

        rl_switch_block_groupmsg.setOnClickListener(this);

        Drawable referenceDrawable = getResources().getDrawable(R.drawable.smiley_add_btn);
        referenceWidth = referenceDrawable.getIntrinsicWidth();
        referenceHeight = referenceDrawable.getIntrinsicHeight();

        idText.setText(groupId);
        if (group.getOwner() == null || "".equals(group.getOwner())
                || !group.getOwner().equals(EMChatManager.getInstance().getCurrentUser())) {
            exitBtn.setVisibility(View.GONE);
            deleteBtn.setVisibility(View.GONE);
            blacklistLayout.setVisibility(View.GONE);
            changeGroupNameLayout.setVisibility(View.GONE);
        }
        // 
        if (EMChatManager.getInstance().getCurrentUser().equals(group.getOwner())) {
            exitBtn.setVisibility(View.GONE);
            deleteBtn.setVisibility(View.VISIBLE);
        }

        ((TextView) findViewById(R.id.group_name))
                .setText(group.getGroupName() + "(" + group.getAffiliationsCount() + st);

        List<String> members = new ArrayList<String>();
        members.addAll(group.getMembers());

        adapter = new GridAdapter(this, R.layout.grid, members);
        userGridview.setAdapter(adapter);

        // ???group
        updateGroup();

        // OnTouchListener
        userGridview.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    if (adapter.isInDeleteMode) {
                        adapter.isInDeleteMode = false;
                        adapter.notifyDataSetChanged();
                        return true;
                    }
                    break;
                default:
                    break;
                }
                return false;
            }
        });

        clearAllHistory.setOnClickListener(this);
        blacklistLayout.setOnClickListener(this);
        changeGroupNameLayout.setOnClickListener(this);

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        String st1 = getResources().getString(R.string.being_added);
        String st2 = getResources().getString(R.string.is_quit_the_group_chat);
        String st3 = getResources().getString(R.string.chatting_is_dissolution);
        String st4 = getResources().getString(R.string.are_empty_group_of_news);
        String st5 = getResources().getString(R.string.is_modify_the_group_name);
        final String st6 = getResources().getString(R.string.Modify_the_group_name_successful);
        final String st7 = getResources().getString(R.string.change_the_group_name_failed_please);
        String st8 = getResources().getString(R.string.Are_moving_to_blacklist);
        final String st9 = getResources().getString(R.string.failed_to_move_into);

        final String stsuccess = getResources().getString(R.string.Move_into_blacklist_success);
        if (resultCode == RESULT_OK) {
            if (progressDialog == null) {
                progressDialog = new ProgressDialog(GroupDetailsActivity.this);
                progressDialog.setMessage(st1);
                progressDialog.setCanceledOnTouchOutside(false);
            }
            switch (requestCode) {
            case REQUEST_CODE_ADD_USER:// ?
                final String[] newmembers = data.getStringArrayExtra("newmembers");
                progressDialog.setMessage(st1);
                progressDialog.show();
                addMembersToGroup(newmembers);
                break;
            case REQUEST_CODE_EXIT: // 
                progressDialog.setMessage(st2);
                progressDialog.show();
                exitGrop();
                break;
            case REQUEST_CODE_EXIT_DELETE: // 
                progressDialog.setMessage(st3);
                progressDialog.show();
                deleteGrop();
                break;
            case REQUEST_CODE_CLEAR_ALL_HISTORY:
                // ??
                progressDialog.setMessage(st4);
                progressDialog.show();
                clearGroupHistory();
                break;

            case REQUEST_CODE_EDIT_GROUPNAME: //??
                final String returnData = data.getStringExtra("data");
                if (!TextUtils.isEmpty(returnData)) {
                    progressDialog.setMessage(st5);
                    progressDialog.show();

                    new Thread(new Runnable() {
                        public void run() {
                            try {
                                EMGroupManager.getInstance().changeGroupName(groupId, returnData);
                                runOnUiThread(new Runnable() {
                                    public void run() {
                                        ((TextView) findViewById(R.id.group_name))
                                                .setText(returnData + "(" + group.getAffiliationsCount() + st);
                                        progressDialog.dismiss();
                                        Toast.makeText(getApplicationContext(), st6, 0).show();
                                    }
                                });

                            } catch (EaseMobException e) {
                                e.printStackTrace();
                                runOnUiThread(new Runnable() {
                                    public void run() {
                                        progressDialog.dismiss();
                                        Toast.makeText(getApplicationContext(), st7, 0).show();
                                    }
                                });
                            }
                        }
                    }).start();
                }
                break;
            case REQUEST_CODE_ADD_TO_BALCKLIST:
                progressDialog.setMessage(st8);
                progressDialog.show();
                new Thread(new Runnable() {
                    public void run() {
                        try {
                            EMGroupManager.getInstance().blockUser(groupId, longClickUsername);
                            runOnUiThread(new Runnable() {
                                public void run() {
                                    refreshMembers();
                                    progressDialog.dismiss();
                                    Toast.makeText(getApplicationContext(), stsuccess, 0).show();
                                }
                            });
                        } catch (EaseMobException e) {
                            runOnUiThread(new Runnable() {
                                public void run() {
                                    progressDialog.dismiss();
                                    Toast.makeText(getApplicationContext(), st9, 0).show();
                                }
                            });
                        }
                    }
                }).start();

                break;
            default:
                break;
            }
        }
    }

    private void refreshMembers() {
        adapter.clear();

        List<String> members = new ArrayList<String>();
        members.addAll(group.getMembers());
        adapter.addAll(members);
        adapter.notifyDataSetChanged();
    }

    /**
     * 
     *
     * @param view
     */
    public void exitGroup(View view) {
        startActivityForResult(new Intent(this, ExitGroupDialog.class), REQUEST_CODE_EXIT);

    }

    /**
     * 
     *
     * @param view
     */
    public void exitDeleteGroup(View view) {
        startActivityForResult(new Intent(this, ExitGroupDialog.class).putExtra("deleteToast",
                getString(R.string.dissolution_group_hint)), REQUEST_CODE_EXIT_DELETE);

    }

    /**
     * ?
     */
    public void clearGroupHistory() {

        EMChatManager.getInstance().clearConversation(group.getGroupId());
        progressDialog.dismiss();
        // adapter.refresh(EMChatManager.getInstance().getConversation(toChatUsername));

    }

    /**
     * 
     *
     * @param groupId
     */
    private void exitGrop() {
        deleteGroup(groupId, 4, null);
        /*  String st1 = getResources().getString(R.string.Exit_the_group_chat_failure);
          new Thread(new Runnable() {
        public void run() {
            try {
                EMGroupManager.getInstance().exitFromGroup(groupId);
                runOnUiThread(new Runnable() {
                    public void run() {
                        progressDialog.dismiss();
                        setResult(RESULT_OK);
                        finish();
                        if (ChatActivity.activityInstance != null)
                            ChatActivity.activityInstance.finish();
                    }
                });
            } catch (final Exception e) {
                runOnUiThread(new Runnable() {
                    public void run() {
                        progressDialog.dismiss();
                        Toast.makeText(getApplicationContext(), getResources().getString(R.string.Exit_the_group_chat_failure) + " " + e.getMessage(), 1).show();
                    }
                });
            }
        }
          }).start();*/
    }

    /**
     * 
     *
     * @param groupId
     */
    private void deleteGrop() {
        //   deleteGroup(groupId,1);
        deleteGroup(groupId, 0, null);
        // changeGroupMsg(groupId,"","?","1");
        /*final String st5 = getResources().getString(R.string.Dissolve_group_chat_tofail);
        new Thread(new Runnable() {
         public void run() {
        try {
            EMGroupManager.getInstance().exitAndDeleteGroup(groupId);
           runOnUiThread(new Runnable() {
              public void run() {
                 progressDialog.dismiss();
                 setResult(RESULT_OK);
                 finish();
                 if(ChatActivity.activityInstance != null)
                     ChatActivity.activityInstance.finish();
              }
           });
        } catch (final Exception e) {
           runOnUiThread(new Runnable() {
              public void run() {
                 progressDialog.dismiss();
                 Toast.makeText(getApplicationContext(), st5 + e.getMessage(), 1).show();
              }
           });
        }
         }
        }).start();*/
    }

    /**
     * ?
     *
     * @param newmembers
     */
    private void addMembersToGroup(final String[] newmembers) {

        deleteGroup(groupId, 2, newmembers);
        /* final String st6 = getResources().getString(R.string.Add_group_members_fail);
         new Thread(new Runnable() {
            
        public void run() {
            try {
                 add
                if (EMChatManager.getInstance().getCurrentUser().equals(group.getOwner())) {
                    EMGroupManager.getInstance().addUsersToGroup(groupId, newmembers);
                } else {
                    // ?invite
                    EMGroupManager.getInstance().inviteUser(groupId, newmembers, null);
                }
                runOnUiThread(new Runnable() {
                    public void run() {
                        refreshMembers();
                        ((TextView) findViewById(R.id.group_name)).setText(group.getGroupName() + "(" + group.getAffiliationsCount()
                                + st);
                        progressDialog.dismiss();
                    }
                });
            } catch (final Exception e) {
                runOnUiThread(new Runnable() {
                    public void run() {
                        progressDialog.dismiss();
                        Toast.makeText(getApplicationContext(), st6 + e.getMessage(), 1).show();
                    }
                });
            }
        }
         }).start();*/
    }

    private void addMembersToGroup1(final String[] newmembers) {

        /*if (EMChatManager.getInstance().getCurrentUser().equals(group.getOwner())) {
            EMGroupManager.getInstance().addUsersToGroup(groupId, newmembers);
        } else {
            // ?invite
            EMGroupManager.getInstance().inviteUser(groupId, newmembers, null);
        }*/
    }

    @Override
    public void onClick(View v) {
        String st6 = getResources().getString(R.string.Is_unblock);
        final String st7 = getResources().getString(R.string.remove_group_of);
        switch (v.getId()) {
        case R.id.rl_switch_block_groupmsg: // ?
            if (iv_switch_block_groupmsg.getVisibility() == View.VISIBLE) {
                EMLog.d(TAG, "change to unblock group msg");
                if (progressDialog == null) {
                    progressDialog = new ProgressDialog(GroupDetailsActivity.this);
                    progressDialog.setCanceledOnTouchOutside(false);
                }
                progressDialog.setMessage(st6);
                progressDialog.show();
                new Thread(new Runnable() {
                    public void run() {
                        try {
                            EMGroupManager.getInstance().unblockGroupMessage(groupId);
                            runOnUiThread(new Runnable() {
                                public void run() {
                                    iv_switch_block_groupmsg.setVisibility(View.INVISIBLE);
                                    iv_switch_unblock_groupmsg.setVisibility(View.VISIBLE);
                                    progressDialog.dismiss();
                                }
                            });
                        } catch (Exception e) {
                            e.printStackTrace();
                            runOnUiThread(new Runnable() {
                                public void run() {
                                    progressDialog.dismiss();
                                    Toast.makeText(getApplicationContext(), st7, 1).show();
                                }
                            });

                        }
                    }
                }).start();

            } else {
                String st8 = getResources().getString(R.string.group_is_blocked);
                final String st9 = getResources().getString(R.string.group_of_shielding);
                EMLog.d(TAG, "change to block group msg");
                if (progressDialog == null) {
                    progressDialog = new ProgressDialog(GroupDetailsActivity.this);
                    progressDialog.setCanceledOnTouchOutside(false);
                }
                progressDialog.setMessage(st8);
                progressDialog.show();
                new Thread(new Runnable() {
                    public void run() {
                        try {
                            EMGroupManager.getInstance().blockGroupMessage(groupId);
                            runOnUiThread(new Runnable() {
                                public void run() {
                                    iv_switch_block_groupmsg.setVisibility(View.VISIBLE);
                                    iv_switch_unblock_groupmsg.setVisibility(View.INVISIBLE);
                                    progressDialog.dismiss();
                                }
                            });
                        } catch (Exception e) {
                            e.printStackTrace();
                            runOnUiThread(new Runnable() {
                                public void run() {
                                    progressDialog.dismiss();
                                    Toast.makeText(getApplicationContext(), st9, 1).show();
                                }
                            });
                        }

                    }
                }).start();
            }
            break;

        case R.id.clear_all_history: // ?
            String st9 = getResources().getString(R.string.sure_to_empty_this);
            Intent intent = new Intent(GroupDetailsActivity.this, AlertDialog.class);
            intent.putExtra("cancel", true);
            intent.putExtra("titleIsCancel", true);
            intent.putExtra("msg", st9);
            startActivityForResult(intent, REQUEST_CODE_CLEAR_ALL_HISTORY);
            break;

        case R.id.rl_blacklist: // ???
            startActivity(new Intent(GroupDetailsActivity.this, GroupBlacklistActivity.class).putExtra("groupId",
                    groupId));
            break;

        case R.id.rl_change_group_name:
            startActivityForResult(new Intent(this, EditActivity.class).putExtra("data", group.getGroupName()),
                    REQUEST_CODE_EDIT_GROUPNAME);
            break;
        default:
            break;
        }

    }

    /**
     * ?gridadapter
     *
     * @author admin_new
     */
    private class GridAdapter extends ArrayAdapter<String> {

        private int res;
        public boolean isInDeleteMode;
        private List<String> objects;

        public GridAdapter(Context context, int textViewResourceId, List<String> objects) {
            super(context, textViewResourceId, objects);
            this.objects = objects;
            res = textViewResourceId;
            isInDeleteMode = false;
        }

        @Override
        public View getView(final int position, View convertView, final ViewGroup parent) {
            ViewHolder holder = null;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = LayoutInflater.from(getContext()).inflate(res, null);
                holder.imageView = (ImageView) convertView.findViewById(R.id.iv_avatar);
                holder.textView = (TextView) convertView.findViewById(R.id.tv_name);
                holder.badgeDeleteView = (ImageView) convertView.findViewById(R.id.badge_delete);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            final LinearLayout button = (LinearLayout) convertView.findViewById(R.id.button_avatar);
            // ?item?
            if (position == getCount() - 1) {
                holder.textView.setText("");
                // ?
                holder.imageView.setImageResource(R.drawable.smiley_minus_btn);
                //            button.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.smiley_minus_btn, 0, 0);
                // ???????
                if (!group.getOwner().equals(EMChatManager.getInstance().getCurrentUser())) {
                    // if current user is not group admin, hide add/remove btn
                    convertView.setVisibility(View.INVISIBLE);
                } else { // 
                    if (isInDeleteMode) {
                        // ???
                        convertView.setVisibility(View.INVISIBLE);
                    } else {
                        // ?
                        convertView.setVisibility(View.VISIBLE);
                        convertView.findViewById(R.id.badge_delete).setVisibility(View.INVISIBLE);
                    }
                    final String st10 = getResources().getString(R.string.The_delete_button_is_clicked);
                    button.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            EMLog.d(TAG, st10);
                            isInDeleteMode = true;
                            notifyDataSetChanged();
                        }
                    });
                }
            } else if (position == getCount() - 2) { // ?
                holder.textView.setText("");
                holder.imageView.setImageResource(R.drawable.smiley_add_btn);
                //            button.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.smiley_add_btn, 0, 0);
                // ???
                if (!group.isAllowInvites()
                        && !group.getOwner().equals(EMChatManager.getInstance().getCurrentUser())) {
                    // if current user is not group admin, hide add/remove btn
                    convertView.setVisibility(View.INVISIBLE);
                } else {
                    // ?,??
                    if (isInDeleteMode) {
                        convertView.setVisibility(View.INVISIBLE);
                    } else {
                        convertView.setVisibility(View.VISIBLE);
                        convertView.findViewById(R.id.badge_delete).setVisibility(View.INVISIBLE);
                    }
                    final String st11 = getResources().getString(R.string.Add_a_button_was_clicked);
                    button.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            EMLog.d(TAG, st11);
                            // ?
                            startActivityForResult(
                                    (new Intent(GroupDetailsActivity.this, GroupPickContactsActivity.class)
                                            .putExtra("groupId", groupId)),
                                    REQUEST_CODE_ADD_USER);
                        }
                    });
                }
            } else { // item?
                final String username = getItem(position);
                convertView.setVisibility(View.VISIBLE);
                button.setVisibility(View.VISIBLE);
                //            Drawable avatar = getResources().getDrawable(R.drawable.default_avatar);
                //            avatar.setBounds(0, 0, referenceWidth, referenceHeight);
                //            button.setCompoundDrawables(null, avatar, null, null);
                holder.textView.setText(username);
                UserUtils.setUserAvatar(getContext(), username, holder.imageView);
                // demo?????
                if (isInDeleteMode) {
                    // ??
                    convertView.findViewById(R.id.badge_delete).setVisibility(View.VISIBLE);
                } else {
                    convertView.findViewById(R.id.badge_delete).setVisibility(View.INVISIBLE);
                }
                final String st12 = getResources().getString(R.string.not_delete_myself);
                final String st13 = getResources().getString(R.string.Are_removed);
                final String st14 = getResources().getString(R.string.Delete_failed);
                final String st15 = getResources().getString(R.string.confirm_the_members);
                button.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (isInDeleteMode) {
                            // return
                            if (EMChatManager.getInstance().getCurrentUser().equals(username)) {
                                startActivity(new Intent(GroupDetailsActivity.this, AlertDialog.class)
                                        .putExtra("msg", st12));
                                return;
                            }
                            if (!NetUtils.hasNetwork(getApplicationContext())) {
                                Toast.makeText(getApplicationContext(), getString(R.string.network_unavailable), 0)
                                        .show();
                                return;
                            }
                            EMLog.d("group", "remove user from group:" + username);
                            deleteMembersFromGroup(username);
                        } else {
                            // user???
                            // startActivity(new
                            // Intent(GroupDetailsActivity.this,
                            // ChatActivity.class).putExtra("userId",
                            // user.getUsername()));

                        }
                    }

                    /**
                     * ?
                     *
                     * @param username
                     */
                    protected void deleteMembersFromGroup(final String username) {
                        deleteDialog = new ProgressDialog(GroupDetailsActivity.this);
                        deleteDialog.setMessage(st13);
                        deleteDialog.setCanceledOnTouchOutside(false);
                        deleteDialog.show();
                        deleteGroup(groupId, 3, new String[] { username });
                        /*new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                // ?
                                EMGroupManager.getInstance().removeUserFromGroup(groupId, username);
                                isInDeleteMode = false;
                                runOnUiThread(new Runnable() {
                            
                                    @Override
                                    public void run() {
                                        deleteDialog.dismiss();
                                        refreshMembers();
                                        ((TextView) findViewById(R.id.group_name)).setText(group.getGroupName() + "("
                                                + group.getAffiliationsCount() + st);
                                    }
                                });
                            } catch (final Exception e) {
                                deleteDialog.dismiss();
                                runOnUiThread(new Runnable() {
                                    public void run() {
                                        Toast.makeText(getApplicationContext(), st14 + e.getMessage(), 1).show();
                                    }
                                });
                            }
                            
                        }
                         }).start();*/
                    }
                });

                button.setOnLongClickListener(new OnLongClickListener() {

                    @Override
                    public boolean onLongClick(View v) {
                        if (EMChatManager.getInstance().getCurrentUser().equals(username))
                            return true;
                        if (group.getOwner().equals(EMChatManager.getInstance().getCurrentUser())) {
                            Intent intent = new Intent(GroupDetailsActivity.this, AlertDialog.class);
                            intent.putExtra("msg", st15);
                            intent.putExtra("cancel", true);
                            startActivityForResult(intent, REQUEST_CODE_ADD_TO_BALCKLIST);
                            longClickUsername = username;
                        }
                        return false;
                    }
                });
            }
            return convertView;
        }

        @Override
        public int getCount() {
            return super.getCount() + 2;
        }
    }

    protected void updateGroup() {
        new Thread(new Runnable() {
            public void run() {
                try {
                    final EMGroup returnGroup = EMGroupManager.getInstance().getGroupFromServer(groupId);
                    // ?
                    EMGroupManager.getInstance().createOrUpdateLocalGroup(returnGroup);

                    runOnUiThread(new Runnable() {
                        public void run() {
                            ((TextView) findViewById(R.id.group_name))
                                    .setText(group.getGroupName() + "(" + group.getAffiliationsCount() + ")");
                            loadingPB.setVisibility(View.INVISIBLE);
                            refreshMembers();
                            if (EMChatManager.getInstance().getCurrentUser().equals(group.getOwner())) {
                                // 
                                exitBtn.setVisibility(View.GONE);
                                deleteBtn.setVisibility(View.VISIBLE);
                            } else {
                                // 
                                exitBtn.setVisibility(View.VISIBLE);
                                deleteBtn.setVisibility(View.GONE);
                            }

                            // update block
                            EMLog.d(TAG, "group msg is blocked:" + group.getMsgBlocked());
                            if (group.isMsgBlocked()) {
                                iv_switch_block_groupmsg.setVisibility(View.VISIBLE);
                                iv_switch_unblock_groupmsg.setVisibility(View.INVISIBLE);
                            } else {
                                iv_switch_block_groupmsg.setVisibility(View.INVISIBLE);
                                iv_switch_unblock_groupmsg.setVisibility(View.VISIBLE);
                            }
                        }
                    });

                } catch (Exception e) {
                    runOnUiThread(new Runnable() {
                        public void run() {
                            loadingPB.setVisibility(View.INVISIBLE);
                        }
                    });
                }
            }
        }).start();
    }

    public void back(View view) {
        setResult(RESULT_OK);
        finish();
    }

    @Override
    public void onBackPressed() {
        setResult(RESULT_OK);
        finish();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        instance = null;
    }

    private static class ViewHolder {
        ImageView imageView;
        TextView textView;
        ImageView badgeDeleteView;
    }

    //0
    //1
    //2
    //3
    //4
    public void deleteGroup(final String groupId, final int flag, final String[] friends) {
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.start();
        requestQueue.add(new AutoLoginRequest(this, Request.Method.POST, Model.PathLoad,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        if (flag == 0) {
                            try {
                                if (response.getString("status").equals("0")) {
                                    progressDialog.dismiss();
                                    setResult(RESULT_OK);
                                    finish();
                                    if (ChatActivity.activityInstance != null)
                                        ChatActivity.activityInstance.finish();

                                }

                            } catch (Exception e) {
                                progressDialog.dismiss();
                                Toast.makeText(GroupDetailsActivity.this, "?", 0).show();
                                Log.e(TAG, "????");
                            }
                        }

                        if (flag == 1) {
                            Log.i(TAG, response.toString());
                            progressDialog.dismiss();

                        }
                        if (flag == 2) {
                            try {
                                if (response.getString("status").equals("0")) {
                                    for (String str : friends) {
                                        group.addMember(str);
                                    }
                                    group.setAffiliationsCount(group.getMembers().size());
                                    refreshMembers();
                                    ((TextView) findViewById(R.id.group_name)).setText(
                                            group.getGroupName() + "(" + group.getAffiliationsCount() + st);
                                } else {
                                    Toast.makeText(GroupDetailsActivity.this, "?", 0).show();
                                }
                                progressDialog.dismiss();
                            } catch (Exception e) {
                                Log.e(TAG, "?????");
                                progressDialog.dismiss();
                            }
                        }
                        if (flag == 3) {
                            deleteDialog.dismiss();
                            for (String str : friends) {
                                group.removeMember(str);
                            }
                            group.setAffiliationsCount(group.getMembers().size());
                            refreshMembers();
                            ((TextView) findViewById(R.id.group_name))
                                    .setText(group.getGroupName() + "(" + group.getAffiliationsCount() + st);
                            Log.i(TAG, response.toString());
                        }
                        if (flag == 4) {
                            try {
                                if (response.getString("status").equals("0")) {
                                    setResult(RESULT_OK);
                                    finish();
                                    if (ChatActivity.activityInstance != null)
                                        ChatActivity.activityInstance.finish();
                                } else {
                                    Log.i(TAG, "?");
                                }
                                progressDialog.dismiss();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }

                        }

                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        progressDialog.dismiss();
                        Toast.makeText(GroupDetailsActivity.this, "?", 0).show();
                        Log.e(TAG, "");

                    }
                }) {

            @Override
            protected void setParams(Map<String, String> params) {

                if (flag == 0) {
                    params.put("sys", "msg");
                    params.put("ctrl", "msger");
                    params.put("group_sn", groupId);
                    params.put("action", "del_group");
                }
                if (flag == 1) {
                    params.put("sys", "msg");
                    params.put("ctrl", "msger");
                    params.put("group_sn", groupId);
                    params.put("group_name", "");
                    params.put("introduce", "??");
                    params.put("public", "1");
                    params.put("approval", "1");
                    params.put("allow_invite", "1");
                    params.put("maxusers", "5999");
                    params.put("action", "upd_group");
                }
                if (flag == 2) {
                    params.put("sys", "msg");
                    params.put("ctrl", "msger");
                    params.put("group_sn", groupId);
                    params.put("action", "add_group");
                    params.put("friends", StrUtils.changeArrToStr(friends));

                }
                if (flag == 3) {
                    params.put("sys", "msg");
                    params.put("ctrl", "msger");
                    params.put("group_sn", groupId);
                    params.put("action", "pop_group");
                    params.put("friends", StrUtils.changeArrToStr(friends));
                }
                if (flag == 4) {
                    params.put("sys", "msg");
                    params.put("ctrl", "msger");
                    params.put("group_sn", groupId);
                    params.put("action", "quit_group");
                }

            }
        });
    }

    public void changeGroupMsg(final String groupId, final String group_name, final String introduce,
            final String pub) {
        RequestQueue requestQueue = Volley.newRequestQueue(this);

        requestQueue.start();

        requestQueue.add(new AutoLoginRequest(this, Request.Method.POST, Model.PathLoad,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.i(TAG, response.toString());
                        progressDialog.dismiss();
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        progressDialog.dismiss();
                    }
                }) {

            @Override
            protected void setParams(Map<String, String> params) {
                params.put("sys", "msg");
                params.put("ctrl", "msger");
                params.put("group_sn", groupId);
                params.put("group_name", group_name);
                params.put("introduce", introduce);
                params.put("public", pub);
                params.put("approval", "1");
                params.put("allow_invite", "1");
                params.put("maxusers", "5999");
                params.put("action", "upd_group");
            }
        });
    }

}