public class VideoUserWindow extends RelativeLayout {
private PaasPlusRederView ppv;
private ImageView ivSwitchCamera;
private ImageView ivAvatar;
private ImageView ivVoice;
private TextView tvName;
private String userId;
private Context context;
private User user;
private OnLayoutChangeListener listener;
public VideoUserWindow(@NonNull @NotNull Context context) {
this(context, null);
}
public VideoUserWindow(@NonNull @NotNull Context context, @Nullable @org.jetbrains.annotations.Nullable AttributeSet attrs) {
super(context, attrs);
this.context = context;
initView(context);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
if (changed) {
if (listener != null) {
listener.onLayoutChange(this);
}
}
}
private void initView(Context context) {
View view = LayoutInflater.from(context).inflate(R.layout.layout_user_window, this);
ppv = view.findViewById(R.id.ppv);
ivSwitchCamera = view.findViewById(R.id.iv_switch_camera);
ivAvatar = view.findViewById(R.id.iv_avatar);
ivVoice = view.findViewById(R.id.iv_voice);
tvName = view.findViewById(R.id.tv_name);
setBackgroundResource(R.drawable.shape_multi_video_window_bg);
user = UserUtil.getUserUtil(context).getUserData();
}
public void updateUser() {
String name = MeetingManager.getInstance().getUser(userId).getName();
if (!TextUtils.isEmpty(name)) {
tvName.setText(name);
}
String avatarUrl = MeetingManager.getInstance().getUser(userId).getAvatarUrl();
if (!TextUtils.isEmpty(avatarUrl)) {
GlideShowUtil.showCircleImage(context, ivAvatar, avatarUrl);
}
}
public void switchCamera() {
if (MeetingManager.getInstance().getUser(userId).isOpenCamera()) {
if (userId.equals(user.getUserId()) || MeetingManager.getInstance().getUser(userId).isVideoStream()) {
ppv.setRenderViewVisibility(true);
ppv.setVisibility(View.VISIBLE);
ivAvatar.setVisibility(View.GONE);
if (userId.equals(user.getUserId())) {
setPreviewView();
ivSwitchCamera.setVisibility(View.VISIBLE);
}
} else {
cameraDisable();
}
} else {
cameraDisable();
}
}
private void cameraDisable() {
if (userId.equals(user.getUserId())) {
stopPreviewView();
ivSwitchCamera.setVisibility(View.GONE);
}
ppv.setRenderViewVisibility(false);
ppv.setVisibility(View.GONE);
ivAvatar.setVisibility(View.VISIBLE);
}
public void switchMic() {
if (MeetingManager.getInstance().getUser(userId).isOpenMic()) {
ivVoice.setVisibility(View.VISIBLE);
ivVoice.setImageResource(R.drawable.audiovideo_voice_small);
} else {
ivVoice.setVisibility(View.GONE);
}
}
public void setMaxVoice(boolean isMaxVoice) {
if (isMaxVoice) {
setBackgroundResource(R.drawable.shape_video_window_voice_big_bg);
ivVoice.setImageResource(R.drawable.audiovideo_voice_big);
} else {
setBackgroundResource(R.drawable.shape_multi_video_window_bg);
ivVoice.setImageResource(R.drawable.audiovideo_voice_small);
}
}
public void bindUser(String userId) {
this.userId = userId;
if (userId.equals(user.getUserId())) {
ivSwitchCamera.setVisibility(View.VISIBLE);
ivSwitchCamera.setOnClickListener(v -> MeetingManager.getInstance().transCamera());
tvName.setText("我");
GlideShowUtil.showCircleImage(context, ivAvatar, user.getAvatarUrl());
} else {
ivSwitchCamera.setVisibility(View.GONE);
}
}
public String getUserId() {
return userId;
}
public PaasPlusRederView getRenderView() {
return ppv;
}
public void startPlay() {
if (userId.equals(user.getUserId())) {
return;
}
if (MeetingManager.getInstance().getUser(userId).isAvailableStream()) {
MeetingManager.getInstance().startPlay(userId, PaasPlusSDKStreamType.VIDEO, ppv);
ppv.setClipToOutline(true, 20f);
}
}
public void stopPlay() {
if (userId.equals(user.getUserId())) {
return;
}
if (null != MeetingManager.getInstance().getUser(userId)) {
MeetingManager.getInstance().stopPlay(userId, ppv);
}
}
public void setPreviewView() {
MeetingManager.getInstance().setPreviewView(ppv);
}
public void stopPreviewView() {
MeetingManager.getInstance().stopPreviewView();
}
public void setOnLayoutChangeListener(OnLayoutChangeListener listener) {
this.listener = listener;
}
public interface OnLayoutChangeListener {
void onLayoutChange(VideoUserWindow userWindow);
}
}