package io.rong.callkit;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import io.rong.calllib.RongCallCommon;
import io.rong.imkit.RongContext;
import io.rong.imkit.widget.AsyncImageView;
import io.rong.imlib.model.UserInfo;
/**
* Created by weiqinxiao on 16/3/15.
*/
public class CallSelectMemberActivity extends Activity {
ArrayList<String> selectedMember;
TextView txtvStart;
ListAdapter mAdapter;
ListView mList;
RongCallCommon.CallMediaType mMediaType;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.rc_voip_activity_select_member);
RongContext.getInstance().getEventBus().register(this);
txtvStart = (TextView) findViewById(R.id.rc_btn_ok);
txtvStart.setEnabled(false);
txtvStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putStringArrayListExtra("invited", selectedMember);
setResult(RESULT_OK, intent);
CallSelectMemberActivity.this.finish();
}
});
findViewById(R.id.rc_btn_cancel).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
setResult(RESULT_CANCELED, intent);
CallSelectMemberActivity.this.finish();
}
});
selectedMember = new ArrayList<>();
Intent intent = getIntent();
int type = intent.getIntExtra("mediaType", RongCallCommon.CallMediaType.VIDEO.getValue());
mMediaType = RongCallCommon.CallMediaType.valueOf(type);
final ArrayList<String> invitedMembers = intent.getStringArrayListExtra("invitedMembers");
ArrayList<String> allMembers = intent.getStringArrayListExtra("allMembers");
String groupId = intent.getStringExtra("groupId");
RongCallKit.GroupMembersProvider provider = RongCallKit.getGroupMemberProvider();
if (groupId != null && allMembers == null && provider != null) {
allMembers = provider.getMemberList(groupId, new RongCallKit.OnGroupMembersResult() {
@Override
public void onGotMemberList(ArrayList<String> members) {
if (mAdapter != null) {
if (members != null && members.size() > 0) {
mAdapter.setAllMembers(members);
mAdapter.notifyDataSetChanged();
}
}
}
});
}
if (allMembers == null) {
allMembers = invitedMembers;
}
mList = (ListView) findViewById(R.id.rc_listview_select_member);
if (invitedMembers != null && invitedMembers.size() > 0) {
mAdapter = new ListAdapter(allMembers, invitedMembers);
mList.setAdapter(mAdapter);
mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
View v = view.findViewById(R.id.rc_checkbox);
String userId = (String) v.getTag();
if (!invitedMembers.contains(userId)) {
if (mMediaType.equals(RongCallCommon.CallMediaType.VIDEO)
&& !v.isSelected() && selectedMember.size() + invitedMembers.size() >= 9) {
Toast.makeText(CallSelectMemberActivity.this, "您最多只能选择9人", Toast.LENGTH_SHORT).show();
return;
}
if (selectedMember.contains(userId)) {
selectedMember.remove(userId);
}
v.setSelected(!v.isSelected());
if (v.isSelected()) {
selectedMember.add(userId);
}
if (selectedMember.size() > 0) {
txtvStart.setEnabled(true);
txtvStart.setTextColor(getResources().getColor(R.color.rc_voip_check_enable));
} else {
txtvStart.setEnabled(false);
txtvStart.setTextColor(getResources().getColor(R.color.rc_voip_check_disable));
}
}
}
});
}
}
@Override
protected void onDestroy() {
RongContext.getInstance().getEventBus().unregister(this);
super.onDestroy();
}
class ListAdapter extends BaseAdapter {
List<String> allMembers;
List<String> invitedMembers;
public ListAdapter(List<String> allMembers, List<String> invitedMembers) {
this.allMembers = allMembers;
this.invitedMembers = invitedMembers;
}
public void setAllMembers(List<String> allMembers) {
this.allMembers = allMembers;
}
@Override
public int getCount() {
return allMembers.size();
}
@Override
public Object getItem(int position) {
return allMembers.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(CallSelectMemberActivity.this).inflate(R.layout.rc_voip_listitem_select_member, null);
holder.checkbox = (ImageView) convertView.findViewById(R.id.rc_checkbox);
holder.portrait = (AsyncImageView) convertView.findViewById(R.id.rc_user_portrait);
holder.name = (TextView) convertView.findViewById(R.id.rc_user_name);
convertView.setTag(holder);
}
holder = (ViewHolder)convertView.getTag();
holder.checkbox.setTag(allMembers.get(position));
if (invitedMembers.contains(allMembers.get(position))) {
holder.checkbox.setClickable(false);
holder.checkbox.setEnabled(false);
holder.checkbox.setImageResource(R.drawable.rc_voip_icon_checkbox_checked);
} else {
if (selectedMember.contains(allMembers.get(position))) {
holder.checkbox.setImageResource(R.drawable.rc_voip_checkbox);
holder.checkbox.setSelected(true);
} else {
holder.checkbox.setImageResource(R.drawable.rc_voip_checkbox);
holder.checkbox.setSelected(false);
}
holder.checkbox.setClickable(true);
holder.checkbox.setEnabled(true);
}
UserInfo userInfo = RongContext.getInstance().getUserInfoFromCache(allMembers.get(position));
if (userInfo != null) {
holder.name.setText(userInfo.getName());
holder.portrait.setAvatar(userInfo.getPortraitUri());
} else {
holder.name.setText(allMembers.get(position));
holder.portrait.setAvatar(null);
}
return convertView;
}
}
public void onEventMainThread(UserInfo userInfo) {
if (mList != null) {
int first = mList.getFirstVisiblePosition() - mList.getHeaderViewsCount();
int last = mList.getLastVisiblePosition() - mList.getHeaderViewsCount();
int index = first - 1;
while (++index <= last && index >= 0 && index < mAdapter.getCount()) {
if (mAdapter.getItem(index).equals(userInfo.getUserId())) {
mAdapter.getView(index, mList.getChildAt(index - mList.getFirstVisiblePosition() + mList.getHeaderViewsCount()), mList);
}
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
class ViewHolder {
ImageView checkbox;
AsyncImageView portrait;
TextView name;
}
}