/**
* Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved.
*
* 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.sxit.dreamiya.activity.chat;
import java.util.ArrayList;
import java.util.List;
import com.easemob.chat.EMGroupManager;
import com.easemob.chatuidemo.activity.ChatActivity;
import com.easemob.chatuidemo.activity.GroupsActivity;
import com.easemob.chatuidemo.activity.SplashActivity;
import com.easemob.exceptions.EaseMobException;
import com.sxit.dreamiya.R;
import com.sxit.dreamiya.adapter.PinyinAdapter;
import com.sxit.dreamiya.base.component.BaseActivity;
import com.sxit.dreamiya.entity.ContactInfo;
import com.sxit.dreamiya.entity.user.UserInfo;
import com.sxit.dreamiya.http.RdaResultPack;
import com.sxit.dreamiya.utils.AssortView;
import com.sxit.dreamiya.utils.AssortView.OnTouchAssortListener;
import com.sxit.dreamiya.utils.SOAP_UTILS;
import com.sxit.dreamiya.webservice.SoapRes;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
/**
* 联系人列表页
*
*/
public class ContactActivity extends BaseActivity {
Context context;
private PinyinAdapter adapter;
private ExpandableListView eListView;
private AssortView assortView;
private List<String> names;
public static ArrayList<ContactInfo> contactList;
public static final int CHATTYPE_SINGLE = 1;
public static final int CHATTYPE_GROUP = 2;
int userid = 0;
Button finish_bt;
public static List<String> contact_checked_arrayStrings;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.nim_fragment_contact_list);
context = this;
eListView = (ExpandableListView) findViewById(R.id.elist);
assortView = (AssortView) findViewById(R.id.assort);
getContactList();
//字母按键回调
assortView.setOnTouchAssortListener(new OnTouchAssortListener() {
View layoutView=LayoutInflater.from(ContactActivity.this)
.inflate(R.layout.alert_dialog_menu_layout, null);
TextView text =(TextView) layoutView.findViewById(R.id.content);
PopupWindow popupWindow ;
public void onTouchAssortListener(String str) {
int index=adapter.getAssort().getHashList().indexOfKey(str);
if(index!=-1)
{
eListView.setSelectedGroup(index);;
}
if(popupWindow!=null){
text.setText(str);
}
else
{
popupWindow = new PopupWindow(layoutView,
80, 80,
false);
// 显示在Activity的根视图中心
popupWindow.showAtLocation(getWindow().getDecorView(),
Gravity.CENTER, 0, 0);
}
text.setText(str);
}
public void onTouchAssortUP() {
if(popupWindow!=null)
popupWindow.dismiss();
popupWindow=null;
}
});
finish_bt = (Button) this.findViewById(R.id.finish_bt);
finish_bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String resString = "";
int members_count = 0;
int count_location = 0;
for (int i = 0; i < contact_checked_arrayStrings.size(); i++) {
if (!contact_checked_arrayStrings.get(i).equals("0")) {
String[] user_array = contact_checked_arrayStrings.get(i).split("%");
if(resString.equals("")){
resString = user_array[2];
}else{
resString = resString + "%" + user_array[2];
}
members_count += 1;
count_location = i;
}
}
if(members_count == 0){
Toast.makeText(context, "请选择联系人", Toast.LENGTH_SHORT).show();
}else if(members_count == 1){
String[] user_array = contact_checked_arrayStrings.get(count_location).toString().split("%");
Intent intent = new Intent();
intent.setClass(ContactActivity.this, ChatActivity.class);
intent.putExtra("chatType", CHATTYPE_SINGLE);
intent.putExtra("userId", user_array[2]);
intent.putExtra("Realname", user_array[0]);
UserInfo userinfo = SplashActivity.userinfo;
intent.putExtra("name", userinfo.getRealName());
intent.putExtra("toname", user_array[0]);
intent.putExtra("pic", SOAP_UTILS.PIC_FILE + userinfo.getHeadPic());
intent.putExtra("topic", SOAP_UTILS.PIC_FILE + contactList.get(count_location).getHeadPic());
startActivity(intent);
finish();
}else{
final String res = resString;
// Toast.makeText(context, resString, Toast.LENGTH_SHORT).show();
final EditText groupname_edit = new EditText(context);
AlertDialog.Builder exitbuilder = new Builder(ContactActivity.this);
exitbuilder.setMessage("请输入群名");
exitbuilder.setTitle("提示");
exitbuilder.setView(groupname_edit);
exitbuilder.setPositiveButton("确定",
new android.content.DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
// Toast.makeText(context, groupname_edit.getText().toString().trim(), Toast.LENGTH_SHORT).show();
new Thread(new Runnable() {
@Override
public void run() {
// 调用sdk创建群组方法
Message msg = new Message();
msg.arg1 = 3;
// msg.obj = group_info_array;
threadMessageHandler.sendMessage(msg);
String groupName = groupname_edit.getText().toString().trim();
String desc = "";//群简介
String[] members = res.split("%");
final String[] group_info_array = new String[2];
group_info_array[0] = groupName;
group_info_array[1] = res;
try {
EMGroupManager.getInstance().createPublicGroup(groupName, desc, members, true);
runOnUiThread(new Runnable() {
public void run() {
// progressDialog.dismiss();
// setResult(RESULT_OK);
Message msg = new Message();
msg.arg1 = 2;
msg.obj = group_info_array;
threadMessageHandler.sendMessage(msg);
finish();
}
});
} catch (final EaseMobException e) {
runOnUiThread(new Runnable() {
public void run() {
// progressDialog.dismiss();
Toast.makeText(ContactActivity.this, e.getLocalizedMessage(), 1).show();
}
});
}
}
}).start();
}
});
exitbuilder.setNegativeButton("取消",
new android.content.DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
exitbuilder.show();
}
}
});
}
// 刷新ui
public void refresh() {
try {
// 可能会在子线程中调到这方法
this.runOnUiThread(new Runnable() {
public void run() {
getContactList();
adapter.notifyDataSetChanged();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
Handler threadMessageHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.arg1 == 1) {
}else if (msg.arg1 == 2) {
String[] group_array = (String[]) msg.obj;
//进入群聊
Intent intent = new Intent(ContactActivity.this, GroupsActivity.class);
// it is group chat
intent.putExtra("chatType", ChatActivity.CHATTYPE_GROUP);
intent.putExtra("userId", "");
intent.putExtra("Realname", group_array[0]);
SharedPreferences sjbSsharedPreferences = getSharedPreferences(
"BBGJ_UserInfo", Context.MODE_PRIVATE); // 私有数据
String name = sjbSsharedPreferences.getString("realName", "");
String pic = sjbSsharedPreferences.getString("headpic", "");
intent.putExtra("name", name);
intent.putExtra("toname", group_array[0]);
intent.putExtra("pic", SOAP_UTILS.PIC_FILE + pic);
intent.putExtra("topic", "");
startActivity(intent);
} else if (msg.arg1 == 3) {
ProgressDialog progressDialog = ProgressDialog.show(context, "正在创建群", "请稍等...", true, false);
}
}
};
/**
* 获取联系人列表,并过滤掉黑名单和排序
*/
private void getContactList() {
Object[] property_va = { SplashActivity.userinfo.getUserId(), 1000, 1 };
soapService.getUserInfoByClass(property_va);
}
@Override
public void onEvent(Object obj) {
super.onEvent(obj);
SoapRes res = (SoapRes) obj;
if (res.getCode().equals(SOAP_UTILS.METHOD.GETUSERINFOBYCLASS)) {
contactList = (ArrayList<ContactInfo>)res.getObj();
contact_checked_arrayStrings = new ArrayList<String>();
names = new ArrayList<String>();
for (int i = 0; i < contactList.size(); i++) {
names.add(contactList.get(i).getPosition());//在SoapService中拼成的参数String
contact_checked_arrayStrings.add("0");
}
adapter = new PinyinAdapter(context, names, eListView);
eListView.setAdapter(adapter);
eListView.setClickable(true);
eListView.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
// TODO Auto-generated method stub
String[] user_array = adapter.getChild(groupPosition, childPosition).toString().split("%");
int position = Integer.valueOf(user_array[1]);
CheckBox checkBox = (CheckBox) v.findViewById(R.id.checkbox);
if (checkBox.isChecked()) {
checkBox.setChecked(false);
contact_checked_arrayStrings.set(position, "0");
}else{
checkBox.setChecked(true);
contact_checked_arrayStrings.set(position, adapter.getChild(groupPosition, childPosition).toString());
}
return true;
}
});
//展开所有
for (int i = 0, length = adapter.getGroupCount(); i < length; i++) {
eListView.expandGroup(i);
}
}
}
/**
* 返回
*
* @param view
*/
public void back(View view) {
finish();
}
@Override
protected void onEventMainThread(RdaResultPack http) {
// TODO Auto-generated method stub
}
}