admin
2020-08-08 3945f9a2c70335958c64c73894e3a1a14a7113b3
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/RecommendNewAdapter.java
@@ -1,7 +1,6 @@
package com.weikou.beibeivideo.ui.recommend;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Rect;
@@ -18,88 +17,58 @@
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.VideoView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bytedance.sdk.openadsdk.TTAdDislike;
import com.bytedance.sdk.openadsdk.TTAdConstant;
import com.bytedance.sdk.openadsdk.TTFeedAd;
import com.lcjian.library.util.SystemCommon;
import com.lcjian.library.util.common.DimenUtils;
import com.lcjian.library.util.common.StringUtils;
import com.lcjian.library.widget.RatioLayout;
import com.viewpagerindicator.LinePageIndicator;
import com.weikou.beibeivideo.entity.HomeAd;
import com.weikou.beibeivideo.entity.HomeType;
import com.weikou.beibeivideo.entity.HomeVideo;
import com.weikou.beibeivideo.entity.VideoInfo;
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.test.MyViewPager;
import com.weikou.beibeivideo.ui.media.VideoDetailActivity;
import com.weikou.beibeivideo.util.ad.CSJAdUtil;
import com.weikou.beibeivideo.util.ad.ExpressAdManager;
import com.yeshi.buwanshequ.R;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class RecommendNewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    //广告Container
    private ExpressAdContainer firstAd;
    private List<ExpressAdContainer> bigImgAdList;//大图广告列表
    private Activity mContext;
    private List<HomeType> homeTypeList;
    private List<HomeAd> homeAdList;
    private final static int TYPE_HOME_BANNER = 1;
    private final static int TYPE_HOME_TYPE = 2;
    private final static int TYPE_HOME_AD = 3;
    List<RecommendContent> contentList;
    private LayoutInflater inflater;
    public RecommendNewAdapter(Activity context, List<HomeType> homeTypeList, List<HomeAd> homeAdList) {
    public RecommendNewAdapter(Activity context, List<RecommendContent> contentList) {
        this.mContext = context;
        this.homeTypeList = homeTypeList;
        this.homeAdList = homeAdList;
        this.contentList = contentList;
        inflater = LayoutInflater.from(mContext);
    }
    public void setBigImgAdList(List<ExpressAdContainer> bigImgAdList) {
        this.bigImgAdList = bigImgAdList;
    }
    public void setFirstAd(ExpressAdContainer firstAd) {
        this.firstAd = firstAd;
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        switch (viewType) {
            case TYPE_HOME_BANNER:
            case RecommendContent.TYPE_BANNER:
                return new HomeBannerHolder(inflater.inflate(R.layout.recommend_top, parent, false));
            case TYPE_HOME_TYPE:
            case RecommendContent.TYPE_HOMETYPE:
                return new HomeTypeHolder(inflater.inflate(R.layout.item_recommend_home_type, null, false), new RecyclerView.RecycledViewPool());
            case TYPE_HOME_AD:
            case RecommendContent.TYPE_AD:
                return new AdHolder(inflater.inflate(R.layout.item_recommend_home_type_ad, parent, false));
        }
        return null;
    }
    private int getHomeTypeByAbsolutePosition(int p) {
        int position = p;
        if (p == 0)
            position = p;
        else if (p == 1) {
            if (hasBanner())
                position--;
        } else {
            if (hasBanner())
                position--;
            if (hasAd())
                position--;
        }
        return position;
    }
    private Runnable autoPlayBanner = null;
@@ -109,9 +78,10 @@
            autoPlayBanner = new Runnable() {
                @Override
                public void run() {
                    if (homeAdList == null || homeAdList.size() <= 0)
                        return;
                    if (viewPager.getCurrentItem() >= homeAdList.size() - 1) {
                    if (contentList != null && contentList.size() > 0 && contentList.get(0).getType() == RecommendContent.TYPE_BANNER)
                        if (contentList.get(0).getHomeBannerList() == null || contentList.get(0).getHomeBannerList().size() <= 0)
                            return;
                    if (viewPager.getCurrentItem() >= contentList.get(0).getHomeBannerList().size() - 1) {
                        viewPager.setCurrentItem(0, true);
                    } else {
                        viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, true);
@@ -179,10 +149,11 @@
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
        final RecommendContent content = contentList.get(i);
        if (viewHolder instanceof HomeBannerHolder) {
            int width = (int) SystemCommon.getScreenWidth(mContext);
            HomeBannerHolder holder = (HomeBannerHolder) viewHolder;
            holder.vp_recommend.setAdapter(new RecommendTopAdapter(homeAdList, mContext, false));
            holder.vp_recommend.setAdapter(new RecommendTopAdapter(content.getHomeBannerList(), mContext, false));
            holder.indicator_recommend.setScreenWidth(width);
            holder.indicator_recommend.setSelectedColor(holder.vp_recommend.getContext().getResources()
                    .getColor(R.color.yellow));
@@ -190,11 +161,13 @@
            holder.indicator_recommend.setViewPager(holder.vp_recommend);
            autoPlayBanner(holder.vp_recommend);
        } else if (viewHolder instanceof HomeTypeHolder) {
            int position = getHomeTypeByAbsolutePosition(i);
            if (position >= homeTypeList.size())
                return;
            HomeType homeType = homeTypeList.get(position);
            HomeType homeType = content.getHomeType();
            HomeTypeHolder holder = (HomeTypeHolder) viewHolder;
            if (homeType == null) {
                holder.view.setVisibility(View.GONE);
                return;
            }
            holder.view.setVisibility(View.VISIBLE);
            if (holder.rv_content.getLayoutManager() == null || !(holder.rv_content.getLayoutManager() instanceof GridLayoutManager)) {
                RecyclerView.LayoutManager layoutManager = new GridLayoutManager(mContext, 4);
@@ -207,8 +180,16 @@
                    return 2;
                }
            });
            boolean isFirst = false;
            for (RecommendContent content1 : contentList)
                if (content1.getType() == RecommendContent.TYPE_HOMETYPE) {
                    if (content1.getHomeType().getId().equalsIgnoreCase(content.getHomeType().getId())) {
                        isFirst = true;
                    }
                    break;
                }
            HomeTypeContentAdapter adapter = new HomeTypeContentAdapter(mContext, homeType.getHomeVideoList(), position == 0 ? firstAd : null, 8);
            HomeTypeContentAdapter adapter = new HomeTypeContentAdapter(mContext, homeType.getHomeVideoList(), isFirst ? true : false, 8);
            holder.rv_content.setAdapter(adapter);
            //设置间距
@@ -226,56 +207,34 @@
        } else if (viewHolder instanceof AdHolder) {
            AdHolder holder = (AdHolder) viewHolder;
            holder.fl_ad.removeAllViews();
            ExpressAdContainer ad = null;
            if (i <= 2) {//加载第一个广告
                if (bigImgAdList != null && bigImgAdList.size() > 0) {
                    ad = bigImgAdList.get(0);
                }
            } else {//加载第二个广告
                if (bigImgAdList != null && bigImgAdList.size() > 1) {
                    ad = bigImgAdList.get(1);
                }
            }
            ExpressAdContainer ad = content.getAd();
            if (ad != null) {
                holder.view.setVisibility(View.VISIBLE);
                if (ad.getGdt() != null) {
                    ViewParent parent= ad.getGdt().getParent();
                    if(parent!=null) {
                    ViewParent parent = ad.getGdt().getParent();
                    if (parent != null) {
                        FrameLayout parentContainer = (FrameLayout) parent;
                        parentContainer.removeAllViews();
                    }
                    ad.getGdt().render();
                    holder.fl_ad.addView(ad.getGdt());
                } else if (ad.getCsj() != null) {
                    ViewParent parent= ad.getCsj().getExpressAdView().getParent();
                    if(parent!=null) {
                        FrameLayout parentContainer = (FrameLayout) parent;
                        parentContainer.removeAllViews();
                    holder.fl_ad.addView(holder.csjAdHolder.view);
                    //填充广告内容
                    ArrayList<View> images = new ArrayList<>();
                    if (ad.getCsj().getImageMode() == TTAdConstant.IMAGE_MODE_VIDEO) {
                        holder.csjAdHolder.iv_pic.setVisibility(View.GONE);
                        holder.csjAdHolder.vv_video.setVisibility(View.VISIBLE);
                        images.add(holder.csjAdHolder.vv_video);
                    } else {
                        holder.csjAdHolder.iv_pic.setVisibility(View.VISIBLE);
                        holder.csjAdHolder.vv_video.setVisibility(View.GONE);
                        images.add(holder.csjAdHolder.iv_pic);
                    }
                    ad.getCsj().render();
                    final ExpressAdContainer adTemp = ad;
                    ad.getCsj().setDislikeCallback(mContext, new TTAdDislike.DislikeInteractionCallback() {
                        @Override
                        public void onSelected(int i, String s) {
                            bigImgAdList.remove(adTemp);
                            notifyDataSetChanged();
                        }
                        @Override
                        public void onCancel() {
                        }
                        @Override
                        public void onRefuse() {
                        }
                    });
                    holder.fl_ad.addView(ad.getCsj().getExpressAdView());
                    CSJAdUtil.bindData(holder.csjAdHolder.view, holder.csjAdHolder.iv_close, holder.csjAdHolder.tv_title, images, ad.getCsj());
                }
            }else{
            } else {
                holder.view.setVisibility(View.GONE);
            }
        }
@@ -283,26 +242,7 @@
    @Override
    public int getItemCount() {
        int count = 0;
        if (homeTypeList != null && homeTypeList.size() > 0)
            count += homeTypeList.size();
        if (homeAdList != null && homeAdList.size() > 0)
            count += 1;
        if (bigImgAdList != null && bigImgAdList.size() > 0)
            count += bigImgAdList.size();
        return count;
    }
    private boolean hasBanner() {
        return homeAdList != null && homeAdList.size() > 0;
    }
    private boolean hasHomeType() {
        return homeTypeList != null && homeTypeList.size() > 0;
    }
    private boolean hasAd() {
        return bigImgAdList != null && bigImgAdList.size() > 0;
        return this.contentList.size();
    }
    /**
@@ -314,35 +254,7 @@
    //获取类型
    @Override
    public int getItemViewType(int position) {
        if (position == 0) {
            if (hasBanner())
                return TYPE_HOME_BANNER;
            else
                return TYPE_HOME_TYPE;
        } else if (position == getItemCount() - 1) {//最后一栏
            if (hasAd())
                return TYPE_HOME_AD;
            else
                return TYPE_HOME_TYPE;
        } else {//中间栏
            if (position == 1) {
                if (hasBanner()) {
                    return TYPE_HOME_TYPE;
                } else {
                    if (hasAd())
                        return TYPE_HOME_AD;
                    else
                        return TYPE_HOME_TYPE;
                }
            } else if (position == 2) {
                if (hasBanner() && hasHomeType() && hasAd())
                    return TYPE_HOME_AD;
                else
                    return TYPE_HOME_TYPE;
            } else {
                return TYPE_HOME_TYPE;
            }
        }
        return this.contentList.get(position).getType();
    }
    class HomeBannerHolder extends RecyclerView.ViewHolder {
@@ -368,9 +280,11 @@
        TextView tv_more;
        RecyclerView rv_content;
        RelativeLayout rl_title_item;
        View view;
        public HomeTypeHolder(View convertView, RecyclerView.RecycledViewPool recycledViewPool) {
            super(convertView);
            this.view = convertView;
            rl_title_item = convertView
                    .findViewById(R.id.rl_title_item);
            tv_category_name = convertView
@@ -390,10 +304,13 @@
        FrameLayout fl_ad;
        View view;
        CSJAdHolder csjAdHolder;
        public AdHolder(View view) {
            super(view);
            this.view=view;
            this.view = view;
            csjAdHolder = new CSJAdHolder(inflater.inflate(R.layout.item_ad_csj_list_column1, null));
            fl_ad = view.findViewById(R.id.fl_ad);
        }
@@ -402,31 +319,34 @@
    public class HomeTypeContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
        private Activity mContext;
        private List<ExpressAdContainer> adList;
        private List<HomeVideo> homeVideoList;
        private List<HomeTypeContent> contentList;
        private int maxItemNum;
        private final int TYPE_CONTENT = 1;
        private final int TYPE_AD = 0;
        private ExpressAdManager expressAdManager;
        private boolean needAd;
        public HomeTypeContentAdapter(Activity context, List<HomeVideo> homeVideoList, ExpressAdContainer ad, int maxItemNum) {
        public HomeTypeContentAdapter(final Activity context, List<HomeVideo> videoList, boolean needAd, int maxItemNum) {
            this.needAd = needAd;
            this.mContext = context;
            this.homeVideoList = homeVideoList;
            if (adList == null)
                adList = new ArrayList<>();
            adList.clear();
            if (ad != null)
                adList.add(ad);
            if (contentList == null)
                this.contentList = new ArrayList<>();
            this.contentList.clear();
            for (HomeVideo hv : videoList) {
                this.contentList.add(new HomeTypeContent(HomeTypeContent.TYPE_CONTENT, hv));
            }
            this.maxItemNum = maxItemNum;
        }
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int type) {
            switch (type) {
                case TYPE_AD:
                case HomeTypeContent.TYPE_AD:
                    return new HomeTypeAdHolder(inflater.inflate(R.layout.item_ad_list_small, parent, false));
                case TYPE_CONTENT:
                case HomeTypeContent.TYPE_CONTENT:
                    return new HomeTypeContentHolder(inflater.inflate(R.layout.item_movie, parent, false));
            }
            return null;
@@ -434,15 +354,10 @@
        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int p) {
            final HomeTypeContent content = contentList.get(p);
            if (viewHolder instanceof HomeTypeContentHolder) {
                HomeTypeContentHolder holder = (HomeTypeContentHolder) viewHolder;
                int position = p;
                if (adList != null && adList.size() > 0) {
                    position -= 1;
                }
                if (position >= homeVideoList.size())
                    return;
                final HomeVideo info = homeVideoList.get(position);
                final HomeVideo info = content.getHomeVideo();
                //设置内容
                holder.ll_video_show.setVisibility(View.VISIBLE);
                if (StringUtils.isEmpty(info.getPicture())) {
@@ -484,59 +399,61 @@
                            }
                        });
            } else if (viewHolder instanceof HomeTypeAdHolder) {//广告
                HomeTypeAdHolder holder = (HomeTypeAdHolder) viewHolder;
                final HomeTypeAdHolder holder = (HomeTypeAdHolder) viewHolder;
                holder.fl_container.removeAllViews();
                final ExpressAdContainer ad = adList.get(0);
                if (ad.getGdt() != null) {
                    ViewParent parent= ad.getGdt().getParent();
                    if(parent!=null) {
                        FrameLayout parentContainer = (FrameLayout) parent;
                        parentContainer.removeAllViews();
                final ExpressAdContainer ad = content.getAd();
                if (ad == null) {//广告为空
                    holder.view.setVisibility(View.GONE);
                    if (needAd) {
                        if (expressAdManager == null)
                            expressAdManager = new ExpressAdManager(ExpressAdManager.SOURCE_CSJ, 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();
                                    }
                                }
                            }
                        });
                    }
                    ad.getGdt().render();
                    holder.tv_movie_play_num.setText("112");
                    holder.tv_movie_title.setText(adList.get(0).getGdt().getBoundData().getTitle());
                    holder.fl_container.addView(adList.get(0).getGdt());
                } else if (adList.get(0).getCsj() != null) {
                    Map<String, Object> map= ad.getCsj().getMediaExtraInfo();
                    ViewParent parent= ad.getCsj().getExpressAdView().getParent();
                    if(parent!=null) {
                        FrameLayout parentContainer = (FrameLayout) parent;
                        parentContainer.removeAllViews();
                } else {
                    holder.view.setVisibility(View.VISIBLE);
                    if (ad.getGdt() != null) {
                        ViewParent parent = ad.getGdt().getParent();
                        if (parent != null) {
                            FrameLayout parentContainer = (FrameLayout) parent;
                            parentContainer.removeAllViews();
                        }
                        ad.getGdt().render();
                        holder.tv_movie_play_num.setText("112");
                        holder.tv_movie_title.setText(ad.getGdt().getBoundData().getTitle());
                        holder.fl_container.addView(ad.getGdt());
                    } else if (ad.getCsj() != null) {
                        holder.fl_container.addView(holder.adHolder.view);
                        //填充广告内容
                        ArrayList<View> images = new ArrayList<>();
                        if (ad.getCsj().getImageMode() == TTAdConstant.IMAGE_MODE_VIDEO) {
                            holder.adHolder.iv_pic.setVisibility(View.GONE);
                            holder.adHolder.vv_video.setVisibility(View.VISIBLE);
                            images.add(holder.adHolder.vv_video);
                        } else {
                            holder.adHolder.iv_pic.setVisibility(View.VISIBLE);
                            holder.adHolder.vv_video.setVisibility(View.GONE);
                            images.add(holder.adHolder.iv_pic);
                        }
                        CSJAdUtil.bindData(holder.adHolder.view, holder.adHolder.iv_close, holder.adHolder.tv_title, images, ad.getCsj());
                        holder.tv_movie_title.setText(ad.getCsj().getTitle());
                    }
                    ad.getCsj().render();
                    ad.getCsj().setDislikeCallback(mContext, new TTAdDislike.DislikeInteractionCallback() {
                        @Override
                        public void onSelected(int i, String s) {
                            //点击消失
                            adList.set(0,null);
                            notifyDataSetChanged();
                        }
                        @Override
                        public void onCancel() {
                        }
                        @Override
                        public void onRefuse() {
                        }
                    });
                    holder.fl_container.addView(ad.getCsj().getExpressAdView());
                }
            }
        }
        @Override
        public int getItemCount() {
            int count = 0;
            if (adList != null && adList.size() > 0)
                count++;
            if (homeVideoList != null)
                count += homeVideoList.size();
            int count = contentList.size();
            if (count > maxItemNum)
                return maxItemNum;
            else
@@ -545,10 +462,7 @@
        @Override
        public int getItemViewType(int position) {
            if (position == 0 && adList.size() > 0)
                return TYPE_AD;
            else
                return TYPE_CONTENT;
            return this.contentList.get(position).getType();
        }
@@ -586,15 +500,41 @@
    class HomeTypeAdHolder extends RecyclerView.ViewHolder {
        View view;
        FrameLayout fl_container;
        TextView tv_movie_title;
        TextView tv_movie_play_num;
        CSJAdHolder adHolder;
        public HomeTypeAdHolder(View view) {
            super(view);
            this.view = view;
            fl_container = view.findViewById(R.id.fl_container);
            tv_movie_title = view.findViewById(R.id.tv_movie_title);
            tv_movie_play_num = view.findViewById(R.id.tv_movie_play_num);
//            adHolder = new CSJAdHolder(inflater.inflate(R.layout.item_ad_csj_list_column2, null));
        }
    }
    class CSJAdHolder extends RecyclerView.ViewHolder {
        ImageView iv_pic;
        VideoView vv_video;
        ImageView iv_logo;
        TextView tv_title;
        ImageView iv_close;
        View view;
        public CSJAdHolder(View view) {
            super(view);
            this.view = view;
            iv_pic = view.findViewById(R.id.iv_pic);
            vv_video = view.findViewById(R.id.vv_video);
            iv_logo = view.findViewById(R.id.iv_logo);
            tv_title = view.findViewById(R.id.tv_title);
            iv_close = view.findViewById(R.id.iv_close);
        }
    }