package com.yidianling.avchatkit.teamavchat.holder; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import com.netease.nimlib.sdk.avchat.video.AVChatTextureViewRenderer; import com.netease.nimlib.sdk.nos.model.NosThumbParam; import com.netease.nimlib.sdk.nos.util.NosThumbImageUtil; import com.netease.nimlib.sdk.uinfo.model.UserInfo; import com.netease.nrtc.video.render.IVideoRender; import com.yidianling.avchatkit.AVChatKit; import com.yidianling.im.R; import com.yidianling.avchatkit.common.recyclerview.adapter.BaseMultiItemFetchLoadAdapter; import com.yidianling.avchatkit.common.recyclerview.holder.BaseViewHolder; import com.yidianling.avchatkit.teamavchat.module.TeamAVChatItem; import static android.view.View.GONE; /** * Created by huangjun on 2017/5/4. */ public class TeamAVChatItemViewHolder extends TeamAVChatItemViewHolderBase { private static final int DEFAULT_AVATAR_THUMB_SIZE = (int) AVChatKit.getContext().getResources().getDimension(R.dimen.im_avatar_max_size); private ImageView avatarImage; private ImageView loadingImage; private AVChatTextureViewRenderer surfaceView; private TextView nickNameText; private TextView stateText; private ProgressBar volumeBar; public TeamAVChatItemViewHolder(BaseMultiItemFetchLoadAdapter adapter) { super(adapter); } protected void inflate(final BaseViewHolder holder) { avatarImage = holder.getView(R.id.avatar_image); loadingImage = holder.getView(R.id.loading_image); surfaceView = holder.getView(R.id.surface); nickNameText = holder.getView(R.id.nick_name_text); stateText = holder.getView(R.id.avchat_state_text); volumeBar = holder.getView(R.id.avchat_volume); } protected void refresh(final TeamAVChatItem data) { nickNameText.setText(AVChatKit.getTeamDataProvider().getDisplayNameWithoutMe(data.teamId, data.account)); final UserInfo userInfo = AVChatKit.getUserInfoProvider().getUserInfo(data.account); final int defaultResId = R.drawable.im_t_avchat_avatar_default; final String thumbUrl = makeAvatarThumbNosUrl(userInfo != null ? userInfo.getAvatar() : null, DEFAULT_AVATAR_THUMB_SIZE); Glide.with(AVChatKit.getContext()) .asBitmap() .load(thumbUrl) .apply(new RequestOptions().centerCrop() .placeholder(defaultResId) .error(defaultResId) .override(DEFAULT_AVATAR_THUMB_SIZE, DEFAULT_AVATAR_THUMB_SIZE)) .into(avatarImage); if (data.state == TeamAVChatItem.STATE.STATE_WAITING) { // 等待接听 Glide.with(AVChatKit.getContext()) .asGif() .load(R.drawable.im_t_avchat_loading) .into(loadingImage); loadingImage.setVisibility(View.VISIBLE); surfaceView.setVisibility(View.INVISIBLE); stateText.setVisibility(GONE); } else if (data.state == TeamAVChatItem.STATE.STATE_PLAYING) { // 正在通话 loadingImage.setVisibility(GONE); surfaceView.setVisibility(data.videoLive ? View.VISIBLE : View.INVISIBLE); // 有视频流才需要SurfaceView stateText.setVisibility(GONE); } else if (data.state == TeamAVChatItem.STATE.STATE_END || data.state == TeamAVChatItem.STATE.STATE_HANGUP) { // 未接听/挂断 loadingImage.setVisibility(GONE); surfaceView.setVisibility(GONE); stateText.setVisibility(View.VISIBLE); stateText.setText(data.state == TeamAVChatItem.STATE.STATE_HANGUP ? R.string.im_avchat_has_hangup : R.string.im_avchat_no_pick_up); } updateVolume(data.volume); } /** * 生成头像缩略图NOS URL地址(用作ImageLoader缓存的key) */ private static String makeAvatarThumbNosUrl(final String url, final int thumbSize) { if (TextUtils.isEmpty(url)) { return url; } return thumbSize > 0 ? NosThumbImageUtil.makeImageThumbUrl(url, NosThumbParam.ThumbType.Crop, thumbSize, thumbSize) : url; } public IVideoRender getSurfaceView() { return surfaceView; } public void updateVolume(int volume) { volumeBar.setProgress(volume); } }