admin
2023-10-08 2c5b6e472c368e80d85b8ea2b461c9ea62981d9b
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/RecommendNewAdapter.java
@@ -2,7 +2,9 @@
import android.app.Activity;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -14,37 +16,42 @@
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.alibaba.fastjson.JSONObject;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.bytedance.sdk.openadsdk.TTAdDislike;
import com.bumptech.glide.request.target.DrawableImageViewTarget;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.lcjian.library.util.common.StringUtils;
import com.lcjian.library.util.common.DimenUtils;
import com.lcjian.library.widget.RatioLayout;
import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
import com.weikou.beibeivideo.BeibeiVideoAPI;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.entity.HomeType;
import com.weikou.beibeivideo.entity.HomeVideo;
import com.weikou.beibeivideo.entity.VideoInfo;
import com.weikou.beibeivideo.entity.VideoType;
import com.weikou.beibeivideo.entity.ad.ExpressAdContainer;
import com.weikou.beibeivideo.entity.recommend.HomeTypeContent;
import com.weikou.beibeivideo.entity.recommend.RecommendContent;
import com.weikou.beibeivideo.entity.recommend.holder.RecommendVideoAdHolder;
import com.weikou.beibeivideo.entity.video.holder.FooterViewHolder;
import com.weikou.beibeivideo.entity.video.holder.HeaderViewHolder;
import com.weikou.beibeivideo.entity.video.holder.VideoHolder;
import com.weikou.beibeivideo.ui.common.VideosLiveActivity;
import com.weikou.beibeivideo.ui.discover.StarsActivity;
import com.weikou.beibeivideo.ui.media.VideoDetailActivity2;
import com.weikou.beibeivideo.ui.video.VideoColumn2Adapter;
import com.weikou.beibeivideo.util.VideoUtil;
import com.weikou.beibeivideo.util.ad.AdUtil;
import com.weikou.beibeivideo.ui.video.VideoRecommendAdapter;
import com.weikou.beibeivideo.util.JsonUtil;
import com.weikou.beibeivideo.util.JumpActivityUtil;
import com.weikou.beibeivideo.util.ad.ExpressAdManager;
import com.weikou.beibeivideo.util.downutil.StringUtils;
import java.text.DecimalFormat;
import org.apache.http.Header;
import org.json.JSONArray;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;
import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade;
public class RecommendNewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
@@ -56,16 +63,36 @@
    private TreeSet mADSet = new TreeSet();
    public final int TYPE_HEADER = 10001;
    public final int TYPE_FOOTER = 10002;
    private View headerView;
    private View footerView;
    public void setHeaderView(View view) {
        this.headerView = view;
    }
    public RecommendNewAdapter(Activity context, List contentList) {
    public void setFooterView(View view) {
        this.footerView = view;
        if (contentList != null) {
            notifyItemChanged(contentList.size() + (headerView != null ? 1 : 0));
        }
    }
    public void removeFooterView() {
        if (footerView != null) {
            notifyItemRemoved(contentList.size() + (headerView != null ? 1 : 0));
            this.footerView = null;
        }
    }
    public RecommendNewAdapter(Activity context, List contentList, int recyclerViewWidth) {
        this.mContext = context;
        this.contentList = contentList;
        this.recyclerViewWidth = recyclerViewWidth;
        inflater = LayoutInflater.from(mContext);
    }
@@ -135,6 +162,8 @@
        switch (viewType) {
            case TYPE_HEADER:
                return new HeaderViewHolder(headerView);
            case TYPE_FOOTER:
                return new FooterViewHolder(footerView);
            case RecommendContent.TYPE_HOMETYPE:
                return new HomeTypeHolder(inflater.inflate(R.layout.item_recommend_home_type, null, false), new RecyclerView.RecycledViewPool());
            case RecommendContent.TYPE_AD:
@@ -144,9 +173,13 @@
    }
    private int recyclerViewWidth = -1;
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
        if (viewHolder instanceof HeaderViewHolder)
            return;
        if (viewHolder instanceof FooterViewHolder)
            return;
        int p = i;
        if (headerView != null)
@@ -156,65 +189,181 @@
        if (viewHolder instanceof HomeTypeHolder) {
            final HomeType homeType = (HomeType) contentList.get(p);
            final HomeTypeHolder holder = (HomeTypeHolder) viewHolder;
            if (homeType == null) {
                holder.view.setVisibility(View.GONE);
                return;
            }
            if (homeType.getVideoInfoList() == null) {
                homeType.setVideoInfoList(new ArrayList<VideoInfo>());
                homeType.setVideoInfoList(new ArrayList<>());
            }
            homeType.getVideoInfoList().clear();
            if (homeType.getHomeVideoList() != null)
                for (HomeVideo hv : homeType.getHomeVideoList()) {
                    homeType.getVideoInfoList().add(hv.getVideo());
            ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            holder.view.setLayoutParams(params);
            //是否为广告
            if (homeType.getAd() != null) {
                holder.fl_ad.setVisibility(View.VISIBLE);
                holder.fl_content.setVisibility(View.GONE);
                holder.rl_ad.setRatio(homeType.getAd().getPictureRate().floatValue());
                try {
                    Glide.with(mContext).load(homeType.getAd().getPicture()).transition(withCrossFade())
                            .apply(new RequestOptions().placeholder(R.drawable.shape_default_cover).error(R.drawable.shape_default_cover))
                            .into(new DrawableImageViewTarget(holder.iv_ad, true));
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                }
            holder.view.setVisibility(View.VISIBLE);
                holder.view.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
            boolean isFirst = false;
            for (Object content1 : contentList)
                if (content1 instanceof HomeType) {
                    if (content1 == homeType) {
                        isFirst = true;
                        break;
                    } else {
                        isFirst = false;
                        break;
                        JumpActivityUtil.jumpPage(mContext, homeType.getAd().getJumpDetail(), homeType.getAd().getParams() != null ? JSONObject.parseObject(homeType.getAd().getParams().replace(
                                "\\" + "\"", "\"")) : null);
                    }
                });
                return;
            }
            holder.fl_ad.setVisibility(View.GONE);
            holder.fl_content.setVisibility(View.VISIBLE);
            homeType.getVideoInfoList().clear();
            int bigPictureIndex = -1;
            if (homeType.getHomeVideoList() != null)
                for (int j = 0; j < homeType.getHomeVideoList().size(); j++) {
                    if (homeType.getHomeVideoList().get(j).isBigPicture())
                        bigPictureIndex = j;
                    homeType.getVideoInfoList().add(homeType.getHomeVideoList().get(j).getVideo());
                }
            VideoColumn2Adapter adapter = null;
            //隐藏
            if (homeType.getVideoInfoList() != null && homeType.getVideoInfoList().size() > 0)
                holder.view.setVisibility(View.VISIBLE);
            else
                holder.view.setVisibility(View.GONE);
            if (isFirst) {//第一排为小视频
                adapter = new VideoColumn2Adapter(mContext, mContext, homeType.getVideoInfoList(), true, Integer.MAX_VALUE, null, new ExpressAdManager.IAdShowListener() {
            VideoRecommendAdapter adapter = null;
            holder.rv_content.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
            int contentWidth = recyclerViewWidth - DimenUtils.dip2px(mContext, 16);
            if (homeType.getColumns() > 3) {//第一排为小视频
                adapter = new VideoRecommendAdapter(mContext, mContext, homeType.getVideoInfoList(), homeType.isNeedAd(), Integer.MAX_VALUE, "recommend", homeType.getName(), null, new ExpressAdManager.IAdShowListener() {
                    @Override
                    public void show() {
                        holder.rv_content.scrollToPosition(0);
                    }
                });
                adapter.initRecyclerViewDisplayWidthRow1(holder.rv_content);
                adapter.initRecyclerViewDisplayWidthRow1(holder.rv_content, contentWidth);
            } else {
                adapter = new VideoColumn2Adapter(mContext, mContext, homeType.getVideoInfoList(), false, homeType.getColumns(), null);
                adapter = new VideoRecommendAdapter(mContext, mContext, homeType.getVideoInfoList(), homeType.isNeedAd(), homeType.getColumns(), "recommend", homeType.getName(), null);
                if (homeType.getColumns() == 2)
                    adapter.initRecyclerViewDisplayWidthColumn2(holder.rv_content);
                    adapter.initRecyclerViewDisplayWidthColumn2(holder.rv_content, contentWidth, bigPictureIndex);
                else if (homeType.getColumns() == 3)
                    adapter.initRecyclerViewDisplayWidthColumn3(holder.rv_content);
                    adapter.initRecyclerViewDisplayWidthColumn3(holder.rv_content, contentWidth);
                else
                    adapter.initRecyclerViewDisplayWidthRow1(holder.rv_content);
                    adapter.initRecyclerViewDisplayWidthRow1(holder.rv_content, contentWidth);
            }
            if (homeType.getVideoInfoList() != null && homeType.getVideoInfoList().size() > 0)
            if (homeType.getVideoInfoList() != null && homeType.getVideoInfoList().size() > 0) {
                holder.rv_content.setAdapter(adapter);
            }
            Glide.with(mContext).load(homeType.getIcon())
                    .apply(new RequestOptions().placeholder(R.drawable.ic_stars_collection)).into(holder.tv_category_icon);
            holder.tv_category_name.setText(homeType.getName());
            //更多
            if (Boolean.parseBoolean(homeType.getHasMore())) {
                holder.tv_more.setVisibility(View.VISIBLE);
                if (!StringUtils.isNullOrEmpty(homeType.getMoreTag())) {
                    holder.tv_more.setText(homeType.getMoreTag());
                } else {
                    holder.tv_more.setText("更多" + homeType.getName());
                }
            } else {
                holder.tv_more.setVisibility(View.GONE);
            }
            int refreshP = homeType.getRefreshPosition();
            //右上角且有更多选项
            if (refreshP == 1 && Boolean.parseBoolean(homeType.getHasMore())) {
                refreshP = 2;//移动至下方
            }
            //不足一页不显示刷新
            if (homeType.getCount() <= homeType.getNumber()) {
                refreshP = 0;
            }
            switch (refreshP) {
                case 0:
                    holder.tv_refresh.setVisibility(View.GONE);
                    holder.tv_tag_refresh.setVisibility(View.GONE);
                    break;
                case 1:
                    holder.tv_refresh.setVisibility(View.GONE);
                    holder.tv_tag_refresh.setVisibility(View.VISIBLE);
                    break;
                case 2:
                    holder.tv_refresh.setVisibility(View.VISIBLE);
                    holder.tv_tag_refresh.setVisibility(View.GONE);
                    break;
            }
            //刷新的动作
            View.OnClickListener refreshListener = new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    BeibeiVideoAPI.getHomeVideoList(mContext, homeType.getId(), homeType.getCurrentPage() + 1, new BasicTextHttpResponseHandler() {
                        @Override
                        public void onSuccessPerfect(int statusCode, Header[] headers, org.json.JSONObject jsonObject) throws Exception {
                            if (jsonObject.optBoolean("IsPost")) {
                                org.json.JSONObject data = jsonObject.optJSONObject("Data");
                                int page = data.optInt("page");
                                homeType.setCurrentPage(page);
                                //解析数据
                                homeType.getHomeVideoList().clear();
                                //解析HomeVideo数据
                                int count = data.optInt("count");
                                homeType.setCount(count);
                                JSONArray homeArray = data
                                        .optJSONArray("list");
                                List<HomeVideo> homeList = new ArrayList<>();
                                if (homeArray != null && homeArray.length() > 0) {
                                    for (int j = 0; j < homeArray.length(); j++) {
                                        homeList.add(JsonUtil.videoGson.fromJson(homeArray
                                                        .optJSONObject(j).toString(),
                                                HomeVideo.class));
                                    }
                                }
                                homeType.getHomeVideoList().clear();
                                homeType.getHomeVideoList().addAll(homeList);
                                //改变当前选项
                                notifyItemChanged(i);
                            }
                        }
                    });
                }
            };
            holder.tv_refresh.setOnClickListener(refreshListener);
            holder.tv_tag_refresh.setOnClickListener(refreshListener);
            holder.tv_more
                    .setOnClickListener(new OnClickListener() {
@@ -269,6 +418,8 @@
        int count = this.contentList.size();
        if (headerView != null)
            count++;
        if (footerView != null)
            count++;
        return count;
    }
@@ -288,18 +439,28 @@
        if (headerView != null)
            position--;
        if (position >= contentList.size())
            return TYPE_FOOTER;
        if (contentList.get(position) instanceof HomeType)
            return RecommendContent.TYPE_HOMETYPE;
        else
            return RecommendContent.TYPE_AD;
    }
    class HomeTypeHolder extends RecyclerView.ViewHolder {
        LinearLayout fl_content;
        FrameLayout fl_ad;
        RatioLayout rl_ad;
        TextView tv_category_name;
        ImageView tv_category_icon;
        ImageView iv_ad;
        TextView tv_more;
        RecyclerView rv_content;
        RelativeLayout rl_title_item;
        TextView tv_refresh;
        TextView tv_tag_refresh;
        View view;
        public HomeTypeHolder(View convertView, RecyclerView.RecycledViewPool recycledViewPool) {
@@ -307,14 +468,34 @@
            this.view = convertView;
            rl_title_item = convertView
                    .findViewById(R.id.rl_title_item);
            fl_content = convertView
                    .findViewById(R.id.fl_content);
            fl_ad = convertView
                    .findViewById(R.id.fl_ad);
            iv_ad = convertView
                    .findViewById(R.id.iv_ad);
            rl_ad = convertView
                    .findViewById(R.id.rl_ad);
            tv_category_name = convertView
                    .findViewById(R.id.tv_category_name);
            tv_category_icon = convertView
                    .findViewById(R.id.tv_category_icon);
            tv_more = convertView
                    .findViewById(R.id.tv_more);
            rv_content = convertView
                    .findViewById(R.id.rv_content);
            tv_refresh = convertView
                    .findViewById(R.id.tv_refresh);
            tv_tag_refresh = convertView
                    .findViewById(R.id.tv_tag_refresh);
            if (recycledViewPool != null)
                rv_content.setRecycledViewPool(recycledViewPool);
        }
@@ -332,199 +513,6 @@
            ll_container = view.findViewById(R.id.ll_container);
            fl_ad = view.findViewById(R.id.fl_ad);
            rl_title_item = view.findViewById(R.id.rl_title_item);
        }
    }
    public class HomeTypeContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
        private Activity mContext;
        private List<HomeTypeContent> contentList;
        private int maxItemNum;
        private ExpressAdManager expressAdManager;
        private boolean needAd;
        public HomeTypeContentAdapter(final Activity context, List<HomeVideo> videoList, boolean needAd, int maxItemNum) {
            this.needAd = needAd;
            this.mContext = context;
            if (contentList == null)
                this.contentList = new ArrayList<>();
            this.contentList.clear();
            for (HomeVideo hv : videoList) {
                this.contentList.add(new HomeTypeContent(HomeTypeContent.TYPE_CONTENT, hv));
            }
            if (needAd) {
                if (expressAdManager == null)
                    expressAdManager = new ExpressAdManager(AdUtil.getSmallExpressAdType(), mContext);
                expressAdManager.loadRecommendSmallAd(new ExpressAdManager.IAdLoadListener() {
                    @Override
                    public void onSuccess(List<ExpressAdContainer> adList) {
                        if (adList != null && adList.size() > 0) {
                            if (contentList != null && contentList.size() > 0 && contentList.get(0).getType() == HomeTypeContent.TYPE_CONTENT) {
                                contentList.add(0, new HomeTypeContent(HomeTypeContent.TYPE_AD, adList.get(0)));
                                notifyDataSetChanged();
                            }
                        }
                    }
                });
            }
            this.maxItemNum = maxItemNum;
        }
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int type) {
            switch (type) {
                case HomeTypeContent.TYPE_AD:
                    return new RecommendVideoAdHolder(inflater.inflate(R.layout.item_ad_list_small, parent, false));
                case HomeTypeContent.TYPE_CONTENT:
                    return new VideoHolder(inflater.inflate(R.layout.item_movie, parent, false));
            }
            return null;
        }
        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int p) {
            final HomeTypeContent content = contentList.get(p);
            if (viewHolder instanceof VideoHolder) {
                VideoHolder holder = (VideoHolder) viewHolder;
                final HomeVideo info = content.getHomeVideo();
                //设置内容
                holder.ll_video_show.setVisibility(View.VISIBLE);
                if (StringUtils.isEmpty(info.getPicture())) {
                    Glide.with(mContext).load(info.getVideo().getPicture())
                            .apply(new RequestOptions().centerCrop().placeholder(R.drawable.ic_default_cover).error(R.drawable.ic_default_cover))
                            .into(holder.iv_movie_cover);
                } else {
                    try {
                        Glide.with(mContext).load(info.getPicture())
                                .apply(new RequestOptions().centerCrop().placeholder(R.drawable.ic_default_cover).error(R.drawable.ic_default_cover))
                                .into(holder.iv_movie_cover);
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    }
                }
                holder.tv_movie_title.setText(info.getVideo().getName());
                String tag = StringUtils.isBlank(info
                        .getVideo().getTag()) ? "" : info.getVideo()
                        .getTag();
                holder.tv_movie_rating.setText(tag);
                if (StringUtils.isBlank(tag)) {
                    holder.tv_movie_rating.setVisibility(View.GONE);
                } else {
                    holder.tv_movie_rating.setVisibility(View.VISIBLE);
                }
                DecimalFormat df = new DecimalFormat("###.0");
                holder.tv_movie_play_num.setText(VideoUtil.getWatchCountShortName(info.getVideo().getWatchCount()));
                holder.tv_movie_play_num.setVisibility(View.GONE);
                holder.tv_movie_comment_num.setText(StringUtils.isBlank(info.getVideo().getCommentCount()) ? "0" : info.getVideo().getCommentCount());
                holder.ll_video_show
                        .setOnClickListener(new OnClickListener() {
                            @Override
                            public void onClick(final View v) {
                                //跳转到商品视频播放页
                                myClick(info.getVideo(), v);
                            }
                        });
            } else if (viewHolder instanceof RecommendVideoAdHolder) {//广告
                final RecommendVideoAdHolder holder = (RecommendVideoAdHolder) viewHolder;
                holder.fl_container.removeAllViews();
                final ExpressAdContainer ad = content.getAd();
                if (ad == null) {//广告为空
                    holder.view.setVisibility(View.GONE);
                } else {
                    holder.view.setVisibility(View.VISIBLE);
                    if (ad.getGdt() != null) {
                        holder.rl_container.setRatio(0.88f);
                        holder.tv_movie_title.setVisibility(View.GONE);
//                        ad.getGdt().setAdEventListener(new AdEventListener() {
//                            @Override
//                            public void onClick() {
//
//                            }
//
//                            @Override
//                            public void onExposed() {
//
//                            }
//
//                            @Override
//                            public void onRenderSuccess() {
//                                holder.fl_container.addView(ad.getGdt().getAdView());
//                            }
//
//                            @Override
//                            public void onRenderFail() {
//
//                            }
//
//                            @Override
//                            public void onAdClosed() {
//                                ad.getGdt().destroy();
//                                contentList.remove(content);
//                                notifyDataSetChanged();
//                            }
//                        });
                        ad.getGdt().render();
                        holder.fl_container.addView(ad.getGdt());
                        holder.tv_movie_play_num.setText("112");
                    } else if (ad.getCsj() != null) {
                        holder.rl_container.setRatio(0.88f);
                        holder.tv_movie_title.setVisibility(View.GONE);
                        ad.getCsj().setDislikeCallback(mContext, new TTAdDislike.DislikeInteractionCallback() {
                            @Override
                            public void onSelected(int i, String s) {
                                contentList.remove(content);
                                notifyDataSetChanged();
                            }
                            @Override
                            public void onCancel() {
                            }
                            @Override
                            public void onRefuse() {
                            }
                        });
                        ad.getCsj().render();
                        holder.fl_container.addView(ad.getCsj().getExpressAdView());
                    }
                }
            }
        }
        @Override
        public int getItemCount() {
            int count = contentList.size();
            if (count > maxItemNum)
                return maxItemNum;
            else
                return count % 2 == 0 ? count : count - 1;
        }
        @Override
        public int getItemViewType(int position) {
            return this.contentList.get(position).getType();
        }
        private void myClick(VideoInfo info, final View v) {
            Intent intent = new Intent(v.getContext(), VideoDetailActivity2.class);
            intent.putExtra("video_info", info);
            v.getContext().startActivity(intent);
        }
    }