package io.rong.callkit;
import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import io.rong.imkit.widget.AsyncImageView;
import io.rong.imlib.model.UserInfo;
/**
* Created by weiqinxiao on 16/3/25.
*/
public class CallUserGridView extends ScrollView {
private Context context;
private boolean enableTitle;
private LinearLayout linearLayout;
private final static int CHILDREN_PER_LINE = 4;
private final static int CHILDREN_SPACE = 10;
private int portraitSize;
public CallUserGridView(Context context) {
super(context);
init(context);
}
public CallUserGridView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context) {
this.context = context;
linearLayout = new LinearLayout(context);
linearLayout.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
linearLayout.setOrientation(LinearLayout.VERTICAL);
addView(linearLayout);
}
public int dip2pix(int dipValue) {
float scale = getResources().getDisplayMetrics().density;
return (int)(dipValue * scale + 0.5f);
}
public int getScreenWidth() {
return getResources().getDisplayMetrics().widthPixels;
}
public void setChildPortraitSize(int size) {
portraitSize = size;
}
public void enableShowState(boolean enable) {
enableTitle = enable;
}
public void addChild(String childId, UserInfo userInfo) {
addChild(childId, userInfo, null);
}
public void addChild(String childId, UserInfo userInfo, String state) {
int containerCount = linearLayout.getChildCount();
LinearLayout lastContainer = null;
int i;
for (i = 0; i < containerCount; i++) {
LinearLayout container = (LinearLayout)linearLayout.getChildAt(i);
if (container.getChildCount() < CHILDREN_PER_LINE) {
lastContainer = container;
break;
}
}
if (lastContainer == null) {
lastContainer = new LinearLayout(context);
lastContainer.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
lastContainer.setGravity(Gravity.CENTER);
lastContainer.setPadding(0, dip2pix(CHILDREN_SPACE), 0, 0);
linearLayout.addView(lastContainer);
}
LinearLayout child = (LinearLayout)LayoutInflater.from(context).inflate(R.layout.rc_voip_user_info, null);
child.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
child.setPadding(0, 0, dip2pix(CHILDREN_SPACE), 0);
child.setTag(childId);
if (portraitSize > 0) {
child.findViewById(R.id.rc_user_portrait_layout).setLayoutParams(new LinearLayout.LayoutParams(portraitSize, portraitSize));
}
AsyncImageView imageView = (AsyncImageView)child.findViewById(R.id.rc_user_portrait);
TextView name = (TextView)child.findViewById(R.id.rc_user_name);
name.setVisibility(enableTitle ? VISIBLE : GONE);
TextView stateV = (TextView)child.findViewById(R.id.rc_voip_member_state);
stateV.setVisibility(enableTitle ? VISIBLE : GONE);
if (state != null) {
stateV.setText(state);
} else {
stateV.setVisibility(GONE);
}
if (userInfo != null) {
imageView.setAvatar(userInfo.getPortraitUri());
name.setText(userInfo.getName() == null ? userInfo.getUserId() : userInfo.getName());
} else {
name.setText(childId);
}
lastContainer.addView(child);
}
public void removeChild(String childId) {
int containerCount = linearLayout.getChildCount();
LinearLayout lastContainer = null;
List<LinearLayout> containerList = new ArrayList<>();
for (int i = 0; i < containerCount; i++) {
LinearLayout container = (LinearLayout) linearLayout.getChildAt(i);
containerList.add(container);
}
for (LinearLayout resultContainer : containerList) {
if (lastContainer == null) {
LinearLayout child = (LinearLayout) resultContainer.findViewWithTag(childId);
if (child != null) {
resultContainer.removeView(child);
if (resultContainer.getChildCount() == 0) {
linearLayout.removeView(resultContainer);
break;
} else {
lastContainer = resultContainer;
}
}
} else {
View view = resultContainer.getChildAt(0);
resultContainer.removeView(view);
lastContainer.addView(view);
if (resultContainer.getChildCount() == 0) {
linearLayout.removeView(resultContainer);
break;
} else {
lastContainer = resultContainer;
}
}
}
}
public View findChildById(String childId) {
int containerCount = linearLayout.getChildCount();
for (int i = 0; i < containerCount; i++) {
LinearLayout container = (LinearLayout) linearLayout.getChildAt(i);
LinearLayout child = (LinearLayout) container.findViewWithTag(childId);
if (child != null) {
return child;
}
}
return null;
}
public void updateChildInfo(String childId, UserInfo userInfo) {
int containerCount = linearLayout.getChildCount();
LinearLayout lastContainer = null;
for (int i = 0; i < containerCount; i++) {
LinearLayout container = (LinearLayout) linearLayout.getChildAt(i);
LinearLayout child = (LinearLayout) container.findViewWithTag(childId);
if (child != null) {
AsyncImageView imageView = (AsyncImageView)child.findViewById(R.id.rc_user_portrait);
imageView.setAvatar(userInfo.getPortraitUri());
if (enableTitle) {
TextView textView = (TextView)child.findViewById(R.id.rc_user_name);
textView.setText(userInfo.getName());
}
}
}
}
public void updateChildState(String childId, String state) {
int containerCount = linearLayout.getChildCount();
for (int i = 0; i < containerCount; i++) {
LinearLayout container = (LinearLayout) linearLayout.getChildAt(i);
LinearLayout child = (LinearLayout) container.findViewWithTag(childId);
if (child != null) {
TextView textView = (TextView)child.findViewById(R.id.rc_voip_member_state);
textView.setText(state);
}
}
}
public void updateChildState(String childId, boolean visible) {
int containerCount = linearLayout.getChildCount();
for (int i = 0; i < containerCount; i++) {
LinearLayout container = (LinearLayout) linearLayout.getChildAt(i);
LinearLayout child = (LinearLayout) container.findViewWithTag(childId);
if (child != null) {
TextView textView = (TextView)child.findViewById(R.id.rc_voip_member_state);
textView.setVisibility(visible ? VISIBLE : GONE);
}
}
}
}