admin
2021-03-13 3c853e808d9e617662fd4ce207d609daa8681df3
添加PPTV视频前贴中的免广告权益
1个文件已删除
32个文件已修改
11个文件已添加
1815 ■■■■■ 已修改文件
BuWanVideo/AndroidManifest.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable-xhdpi/icon_high.png 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable-xhdpi/icon_no_ad_reward.png 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable-xhdpi/icon_no_ad_reward_input.png 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable/shape_video_ad_no_ad_reward_bg.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable/shape_video_no_ad_reward_success_notify_bg.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/item_video_detail_ad.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/item_video_search_result_album.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/entity/HomeType.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/entity/VideoInfo.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/entity/ad/AdPositionEnum.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/entity/ad/PlayVideoPreADSetting.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/entity/ad/RewardVideoAdContainer.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/entity/recommend/HomeClass.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/SplashActivity.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/ad/PlayVideoPreADFragment.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/baidu/BaiDuNewsFragment.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/baidu/BaiDuVideosFragment.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/category/MVideosActivity.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/common/VideosFragment.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/main/HomeFragment.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/main/MainActivity.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/main/MineFragment.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/media/VideoDetailActivity.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/media/VideoDetailActivity2.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/mine/BrowserActivity.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/mine/PPTVPlayFragment.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/CommonRecommendFragment.java 718 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/RecommendFragment.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/RecommendNewAdapter.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/SearchActivity.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/video/SearchResultAdapter.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/video/VideoColumn2Adapter.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/util/ExitDialog.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/util/UmengEventUtil.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/util/ad/AdUtil.java 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/util/ad/CSJConstant.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/util/ad/GDTConstant.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/util/ad/RewardVideoAdManager.java 350 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/util/ui/ToastUtil.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
library-GDTSDK/build.gradle 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
library-GDTSDK/libs/GDTSDK.unionNoPlugin.4.270.1140.aar 补丁 | 查看 | 原始文档 | blame | 历史
library-GDTSDK/libs/GDTSDK.unionNormal.4.333.1203.aar 补丁 | 查看 | 原始文档 | blame | 历史
library-common/src/com/lcjian/library/RetainViewFragment.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/AndroidManifest.xml
@@ -26,13 +26,11 @@
        android:protectionLevel="normal" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
BuWanVideo/res/drawable-xhdpi/icon_high.png
BuWanVideo/res/drawable-xhdpi/icon_no_ad_reward.png
BuWanVideo/res/drawable-xhdpi/icon_no_ad_reward_input.png
BuWanVideo/res/drawable/shape_video_ad_no_ad_reward_bg.xml
New file
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#B2000000" />
    <corners android:radius="30dp" />
    <padding android:left="4.5dp" android:bottom="3dp" android:top="3dp" android:right="8.5dp"></padding>
</shape>
BuWanVideo/res/drawable/shape_video_no_ad_reward_success_notify_bg.xml
New file
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#B2000000" />
    <corners android:radius="5dp" />
    <padding android:left="10dp" android:bottom="5dp" android:top="5dp" android:right="10dp"></padding>
</shape>
BuWanVideo/res/layout/item_video_detail_ad.xml
@@ -68,6 +68,24 @@
                        android:textColor="@color/white"
                        android:textSize="14sp"
                        android:visibility="gone"></TextView>
                    <TextView
                        android:id="@+id/tv_no_ad_reward"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal|bottom"
                        android:background="@drawable/shape_video_ad_no_ad_reward_bg"
                        android:drawableLeft="@drawable/icon_no_ad_reward"
                        android:drawablePadding="8.5dp"
                        android:gravity="center"
                        android:text="获取免广告权益"
                        android:textColor="@color/white"
                        android:layout_margin="4dp"
                        android:drawableRight="@drawable/icon_no_ad_reward_input"
                        android:textSize="12sp"></TextView>
                </FrameLayout>
            </LinearLayout>
        </com.qq.e.ads.nativ.widget.NativeAdContainer>
@@ -81,4 +99,5 @@
    </com.lcjian.library.widget.RatioLayout>
</LinearLayout>
BuWanVideo/res/layout/item_video_search_result_album.xml
@@ -29,6 +29,15 @@
                <ImageView
                    android:visibility="gone"
                    android:id="@+id/iv_high"
                    android:layout_width="29dp"
                    android:layout_height="17dp"
                    android:layout_gravity="top|left"
                    android:src="@drawable/icon_high" />
                <ImageView
                    android:visibility="gone"
                    android:id="@+id/iv_vip"
                    android:layout_width="29.5dp"
                    android:layout_height="17.5dp"
BuWanVideo/src/com/weikou/beibeivideo/entity/HomeType.java
@@ -43,6 +43,17 @@
    private List<HomeTypeItem> itemTypeList;
    @Expose
    private String icon;
    @Expose
    private boolean needAd;
    public boolean isNeedAd() {
        return needAd;
    }
    public void setNeedAd(boolean needAd) {
        this.needAd = needAd;
    }
    private List<VideoInfo> videoInfoList;
BuWanVideo/src/com/weikou/beibeivideo/entity/VideoInfo.java
@@ -78,6 +78,18 @@
    @Expose
    private int free;
    //0-普清 1-高清
    @Expose
    private int definition;
    public int getDefinition() {
        return definition;
    }
    public void setDefinition(int definition) {
        this.definition = definition;
    }
    public int getFree() {
        return free;
    }
BuWanVideo/src/com/weikou/beibeivideo/entity/ad/AdPositionEnum.java
New file
@@ -0,0 +1,22 @@
package com.weikou.beibeivideo.entity.ad;
public enum AdPositionEnum {
    splash("splash"),//开屏
    videoPlayPre("videoPlayPre"),//视频播放前贴
    exitApp("exitApp"),//APP退出广告
    videoSearch("videoSearch"),//搜索页广告
    videoDetailFullVideo("videoDetailFullVideo"),//视频全屏广告
    pptvNoAdReward("pptvNoAdReward")//PPTV无广告激励视频
    ;
    private String positionName;
    public String getPositionName() {
        return positionName;
    }
    private AdPositionEnum(String positionName) {
        this.positionName = positionName;
    }
}
BuWanVideo/src/com/weikou/beibeivideo/entity/ad/PlayVideoPreADSetting.java
@@ -13,6 +13,10 @@
    private String gdtPid;//广点通的PID
    private String csjPid;//穿山甲的pid
    //是否需要显示激励视频提示
    private boolean needShowRewardNotify;
    public PlayVideoPreADSetting(AdUtil.AD_TYPE adType, String gdtAppId, String gdtPid, String csjPid) {
        this.adType = adType;
        this.gdtAppId = gdtAppId;
@@ -64,4 +68,11 @@
    }
    public boolean isNeedShowRewardNotify() {
        return needShowRewardNotify;
    }
    public void setNeedShowRewardNotify(boolean needShowRewardNotify) {
        this.needShowRewardNotify = needShowRewardNotify;
    }
}
BuWanVideo/src/com/weikou/beibeivideo/entity/ad/RewardVideoAdContainer.java
New file
@@ -0,0 +1,38 @@
package com.weikou.beibeivideo.entity.ad;
import com.bytedance.sdk.openadsdk.TTRewardVideoAd;
import com.qq.e.ads.rewardvideo.RewardVideoAD;
import com.qq.e.ads.rewardvideo2.ExpressRewardVideoAD;
//信息流原生广告容器
public class RewardVideoAdContainer {
    private TTRewardVideoAd csj;
    private ExpressRewardVideoAD gdt2;
    public RewardVideoAdContainer(ExpressRewardVideoAD gdt2) {
        this.gdt2 = gdt2;
    }
    public RewardVideoAdContainer(TTRewardVideoAd csj) {
        this.csj = csj;
    }
    public TTRewardVideoAd getCsj() {
        return csj;
    }
    public void setCsj(TTRewardVideoAd csj) {
        this.csj = csj;
    }
    public ExpressRewardVideoAD getGdt2() {
        return gdt2;
    }
    public void setGdt2(ExpressRewardVideoAD gdt2) {
        this.gdt2 = gdt2;
    }
}
BuWanVideo/src/com/weikou/beibeivideo/entity/recommend/HomeClass.java
@@ -6,7 +6,11 @@
public class HomeClass extends VideoType {
    @Expose
    private String dataType;//数据类型  "recommend"-推荐  "class"-分类  "novel"-小说
    private String dataType;//数据类型  "recommend"-推荐  "class"-分类  "novel"-小说 "common"-常见
    //数据Key
    @Expose
    private String dataKey;
    public String getDataType() {
        return dataType;
@@ -15,4 +19,12 @@
    public void setDataType(String dataType) {
        this.dataType = dataType;
    }
    public String getDataKey() {
        return dataKey;
    }
    public void setDataKey(String dataKey) {
        this.dataKey = dataKey;
    }
}
BuWanVideo/src/com/weikou/beibeivideo/ui/SplashActivity.java
@@ -33,6 +33,7 @@
import com.weikou.beibeivideo.BeibeiVideoAPI;
import com.weikou.beibeivideo.BeibeiVideoApplication;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.entity.ad.AdPositionEnum;
import com.weikou.beibeivideo.entity.ad.AdTypeVO;
import com.weikou.beibeivideo.ui.dialog.UserProtocolDialog;
import com.weikou.beibeivideo.ui.main.MainActivity;
@@ -501,10 +502,13 @@
                                    JSONObject data = jsonObject.getJSONObject("Data");
                                    JSONObject ad = data.optJSONObject("adNew");
                                    String vipLink = data.optString("vipLink");
                                    int pptvNoAdRewardHour = data.optInt("pptvNoAdRewardHour", 3);
                                    //保存免广告权益持续时间
                                    AdUtil.setPPTVNoAdRewardHour(getApplicationContext(), pptvNoAdRewardHour);
                                    AdUtil.saveAdConfig(getApplicationContext(), ad);
                                    AdUtil.AD_TYPE splash = AdUtil.getAdType(getApplicationContext(), AdUtil.POSITION_SPLASH);
                                    String pid = AdUtil.getAdPid(getApplicationContext(), AdUtil.POSITION_SPLASH);
                                    AdUtil.AD_TYPE splash = AdUtil.getAdType(getApplicationContext(), AdPositionEnum.splash);
                                    String pid = AdUtil.getAdPid(getApplicationContext(), AdPositionEnum.splash);
                                    if (StringUtils.isBlank(pid)) {
                                        if (splash != null) {
                                            if (splash == AdUtil.AD_TYPE.csj) {
BuWanVideo/src/com/weikou/beibeivideo/ui/ad/PlayVideoPreADFragment.java
@@ -34,6 +34,7 @@
import com.qq.e.comm.constants.AdPatternType;
import com.qq.e.comm.util.AdError;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.entity.ad.AdPositionEnum;
import com.weikou.beibeivideo.entity.ad.PlayVideoPreADSetting;
import com.weikou.beibeivideo.util.BeibeiConstant;
import com.weikou.beibeivideo.util.DimenUtils;
@@ -67,9 +68,13 @@
    private TextView tv_skip;
    private TextView tv_no_ad_reward;
    private ProgressBar pb_progress;
    private IPageEventListener pageEventListener;
    private IVideoAdListener videoAdListener;
    public static PlayVideoPreADFragment newInstance() {
        Bundle bundle = new Bundle();
@@ -89,6 +94,11 @@
        super.onCreate(savedInstanceState);
    }
    public void finishPlay() {
        if (videoAdListener != null)
            videoAdListener.finishPlay();
    }
    private ImageView img_poster;
    private void initView(View root) {
@@ -96,6 +106,7 @@
        mContainer = root.findViewById(R.id.native_ad_container);
        img_poster = root.findViewById(R.id.img_poster);
        tv_skip = root.findViewById(R.id.tv_skip);
        tv_no_ad_reward = root.findViewById(R.id.tv_no_ad_reward);
        pb_progress = root.findViewById(R.id.pb_progress);
        fl_ad = root.findViewById(R.id.fl_ad);
    }
@@ -164,10 +175,22 @@
        String pid = setting.getGdtPid();
        //TODO 需要单独判断
        if (AdUtil.getAdType(getContext(), AdUtil.POSITION_VIDEO_PLAY_PRE) != AdUtil.AD_TYPE.gdt)
        if (AdUtil.getAdType(getContext(), AdPositionEnum.videoPlayPre) != AdUtil.AD_TYPE.gdt)
            pid = BeibeiConstant.GDT_DOWNLOAD_HINT_ID;
        tv_skip.setText(AD_DURATION + "s后可跳过");
        if (setting.isNeedShowRewardNotify()) {
            tv_no_ad_reward.setVisibility(View.VISIBLE);
        } else {
            tv_no_ad_reward.setVisibility(View.GONE);
        }
        tv_no_ad_reward.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (videoAdListener != null)
                    videoAdListener.noAdRewardClick();
            }
        });
//        loadCSJ(CSJConstant.PLAY_VIDEO_PRE, videoAdListener);
        loadGDT(setting.getGdtAppId(), pid, videoAdListener);
    }
@@ -231,6 +254,7 @@
        Log.i(TAG, "loadGDT");
        fl_ad.setVisibility(View.GONE);
        mContainer.setVisibility(View.VISIBLE);
        this.videoAdListener = videoAdListener;
        NativeUnifiedAD mAdManager = new NativeUnifiedAD(getContext(), appId, pid, new NativeADUnifiedListener() {
            @Override
@@ -511,6 +535,9 @@
        //开始播放
        public void startPlay();
        //免广告权益
        public void noAdRewardClick();
    }
BuWanVideo/src/com/weikou/beibeivideo/ui/baidu/BaiDuNewsFragment.java
@@ -19,6 +19,7 @@
import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
import com.weikou.beibeivideo.BeibeiVideoAPI;
import com.weikou.beibeivideo.BeibeiVideoApplication;
import com.weikou.beibeivideo.entity.ad.AdPositionEnum;
import com.weikou.beibeivideo.ui.MyRetainViewFragment;
import com.weikou.beibeivideo.util.UmengEventUtil;
import com.weikou.beibeivideo.util.ad.AdUtil;
@@ -163,7 +164,7 @@
        @Override
        public Fragment getItem(int position) {
            Fragment fragment = BaiDuCPUContentFragment.newInstance(mlist.get(position), BaiDuCPUContentFragment.VIEW_TYPE_NEWS, AdUtil.getAdPid(getContext(), AdUtil.POSITION_SPLASH) != null, new BaiduCPUContentAdapter.IBaiDuCPUItemClickListener() {
            Fragment fragment = BaiDuCPUContentFragment.newInstance(mlist.get(position), BaiDuCPUContentFragment.VIEW_TYPE_NEWS, AdUtil.getAdPid(getContext(), AdPositionEnum.splash) != null, new BaiduCPUContentAdapter.IBaiDuCPUItemClickListener() {
                @Override
                public void onClick(IBasicCPUData nrAd) {
BuWanVideo/src/com/weikou/beibeivideo/ui/baidu/BaiDuVideosFragment.java
@@ -17,6 +17,7 @@
import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
import com.weikou.beibeivideo.BeibeiVideoAPI;
import com.weikou.beibeivideo.BeibeiVideoApplication;
import com.weikou.beibeivideo.entity.ad.AdPositionEnum;
import com.weikou.beibeivideo.ui.MyRetainViewFragment;
import com.weikou.beibeivideo.util.UmengEventUtil;
import com.weikou.beibeivideo.util.ad.AdUtil;
@@ -154,7 +155,7 @@
            if (mlist.get(position).getId() == 1085)
                return BaiDuShortVideosFragment.newInstance(mlist.get(position));
            else
                return BaiDuCPUContentFragment.newInstance(mlist.get(position), mlist.get(position).getId() == 1085 ? BaiDuCPUContentFragment.VIEW_TYPE_SMALLVIDEO : BaiDuCPUContentFragment.VIEW_TYPE_VIDEO, AdUtil.getAdPid(getContext(), AdUtil.POSITION_SPLASH) != null, new BaiduCPUContentAdapter.IBaiDuCPUItemClickListener() {
                return BaiDuCPUContentFragment.newInstance(mlist.get(position), mlist.get(position).getId() == 1085 ? BaiDuCPUContentFragment.VIEW_TYPE_SMALLVIDEO : BaiDuCPUContentFragment.VIEW_TYPE_VIDEO, AdUtil.getAdPid(getContext(), AdPositionEnum.splash) != null, new BaiduCPUContentAdapter.IBaiDuCPUItemClickListener() {
                    @Override
                    public void onClick(IBasicCPUData nrAd) {
                        UmengEventUtil.baiduCpuClick(getContext(), "videos");
BuWanVideo/src/com/weikou/beibeivideo/ui/category/MVideosActivity.java
@@ -4,43 +4,31 @@
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.umeng.analytics.MobclickAgent;
import com.viewpagerindicator.MTabPageIndicator;
import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
import com.weikou.beibeivideo.BeibeiVideoAPI;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.entity.VideoType;
import com.weikou.beibeivideo.ui.BaseActivity;
import com.weikou.beibeivideo.ui.common.VideosFragment;
import com.weikou.beibeivideo.ui.mine.BrowserActivity;
import com.weikou.beibeivideo.ui.mine.WatchHistoryActivity;
import com.weikou.beibeivideo.ui.recommend.SearchActivity;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.util.downutil.StringUtils;
import org.apache.http.Header;
import org.json.JSONObject;
@@ -54,7 +42,7 @@
        OnClickListener {
    private VideoType mVideoType;
    private List<VideoType> mVideoInfos;
    private List<VideoType> mVideoTypes;
    private TextView tv_top_bar_left;
@@ -70,6 +58,10 @@
    private FrameLayout fl_mvideos_download_failure;
    private String homeType;
    private String videoType;
    private String starId;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
@@ -81,7 +73,7 @@
        preferences = getSharedPreferences("user",
                Context.MODE_PRIVATE);
        initStatusBar();
        mVideoInfos = new ArrayList<VideoType>();
        mVideoTypes = new ArrayList<VideoType>();
        mVideoType = (VideoType) getIntent().getSerializableExtra("video_type");
        pager = (ViewPager) findViewById(R.id.pager);
@@ -91,6 +83,16 @@
        tv_top_bar_left = (TextView) findViewById(R.id.tv_top_bar_left);
        tv_top_bar_left.setText(mVideoType.getName());
        tv_top_bar_left.setOnClickListener(this);
        //接受数据
        homeType = getIntent().getStringExtra("home_type");
        videoType = getIntent().getStringExtra("video_type");
        starId = getIntent().getStringExtra("star_id");
        homeType = StringUtils.isNullOrEmpty(homeType) ? null : homeType;
        videoType = StringUtils.isNullOrEmpty(videoType) ? null : videoType;
        starId = StringUtils.isNullOrEmpty(starId) ? null : starId;
        getVideoList();
    }
@@ -113,17 +115,17 @@
//            if (position % mVideoInfos.size() == 0)
//                return CategoryRecommendFragment.newInstance(mVideoInfos.get(position), mVideoType.getId());
//            else
            return VideosFragment.newInstance(mVideoInfos.get(position));
            return VideosFragment.newInstance(mVideoTypes.get(position), homeType, videoType, starId);
        }
        @Override
        public CharSequence getPageTitle(int position) {
            return mVideoInfos.get(position % mVideoInfos.size()).getName();
            return mVideoTypes.get(position % mVideoTypes.size()).getName();
        }
        @Override
        public int getCount() {
            return mVideoInfos.size();
            return mVideoTypes.size();
        }
    }
@@ -156,7 +158,8 @@
                                            .getJSONArray("data").toString(),
                                    new TypeToken<List<VideoType>>() {
                                    }.getType());
                            mVideoInfos.addAll(videoType);
                            mVideoTypes.addAll(videoType);
                            pager.post(new Runnable() {
                                @Override
@@ -170,14 +173,20 @@
                                    if (mVideoType.getParent() == null) {
                                        indicator.setViewPager(pager, 0);
                                    } else {
                                        for (int i = 0; i < mVideoInfos.size(); i++) {
                                            if (mVideoInfos.get(i).getId().equalsIgnoreCase(mVideoType.getId())) {
                                        for (int i = 0; i < mVideoTypes.size(); i++) {
                                            if (mVideoTypes.get(i).getId().equalsIgnoreCase(mVideoType.getId())) {
                                                indicator.setViewPager(pager, i);
                                            }
                                        }
                                    }
                                    ((FrameLayout) findViewById(R.id.fl_indicator))
                                            .addView(indicator);
                                    if (mVideoTypes.size() <= 1) {
                                        indicator.setVisibility(View.GONE);
                                    } else {
                                        indicator.setVisibility(View.VISIBLE);
                                    }
                                }
                            });
                        } else {
BuWanVideo/src/com/weikou/beibeivideo/ui/common/VideosFragment.java
@@ -71,10 +71,17 @@
    private View loading;
    public static VideosFragment newInstance(VideoType type) {
    public static VideosFragment newInstance(VideoType type, String homeType, String videoType, String starId) {
        VideosFragment fragment = new VideosFragment();
        Bundle bundle = new Bundle();
        bundle.putSerializable("videotype", type);
        if (homeType != null)
            bundle.putString("home_type", homeType);
        if (videoType != null)
            bundle.putString("video_type", videoType);
        if (starId != null)
            bundle.putString("star_id", starId);
        fragment.setArguments(bundle);
        return fragment;
    }
@@ -151,16 +158,17 @@
        type = (VideoType) getArguments().getSerializable("videotype");
        if (getArguments() != null)
            getArguments().clear();
        mHomeType = getActivity().getIntent().getStringExtra("home_type");
//        if (getArguments() != null)
//            getArguments().clear();
        mHomeType = getArguments().getString("home_type");
        try {
            mVideoType = getActivity().getIntent().getStringExtra("video_type");
            mVideoType = getArguments().getString("video_type");
        } catch (Exception e) {
            e.printStackTrace();
        }
        mStarId = getActivity().getIntent().getStringExtra("star_id");
        mStarId = getArguments().getString("star_id");
        mHomeType = (mHomeType == null ? "" : mHomeType);
        mVideoType = (mVideoType == null ? "" : mVideoType);
@@ -173,7 +181,7 @@
            columns = 3;
        }
        adapter = new VideoColumn2Adapter(getActivity(), getActivity().getApplicationContext(), mVideoInfos, false, columns,"list", null);
        adapter = new VideoColumn2Adapter(getActivity(), getActivity().getApplicationContext(), mVideoInfos, false, columns, "list", null);
        if (columns == 2)
            adapter.initRecyclerViewDisplayWidthColumn2(rv_category_video);
        else
BuWanVideo/src/com/weikou/beibeivideo/ui/main/HomeFragment.java
@@ -41,6 +41,7 @@
import com.weikou.beibeivideo.ui.dialog.UserProtocolDialog;
import com.weikou.beibeivideo.ui.recommend.RecommendFragment;
import com.weikou.beibeivideo.util.BeibeiConstant;
import com.weikou.beibeivideo.util.UmengEventUtil;
import com.weikou.beibeivideo.util.UserUtil;
import com.weikou.beibeivideo.util.cache.DiskLruCacheManager;
@@ -194,6 +195,22 @@
                pager.getContext());
        indicator.setViewPager(pager, 0);
        fl_indicator.addView(indicator);
        pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }
            @Override
            public void onPageSelected(int position) {
                UmengEventUtil.recommendNav(getContext(), position, categories.size() > position ? categories.get(position).getName() : "");
            }
            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
        getCategories();
    }
BuWanVideo/src/com/weikou/beibeivideo/ui/main/MainActivity.java
@@ -35,6 +35,7 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.huawei.secure.android.common.util.ScreenUtil;
import com.lcjian.library.util.FragmentSwitchHelper;
import com.lcjian.library.util.MarketUtils;
import com.lcjian.library.util.common.ClipboardUtil;
@@ -53,6 +54,8 @@
import com.weikou.beibeivideo.entity.JumpDetail;
import com.weikou.beibeivideo.entity.NewComment;
import com.weikou.beibeivideo.entity.VideoInfo;
import com.weikou.beibeivideo.entity.ad.ExpressAdContainer;
import com.weikou.beibeivideo.entity.ad.RewardVideoAdContainer;
import com.weikou.beibeivideo.ui.BaseActivity;
import com.weikou.beibeivideo.ui.baidu.BaiDuNewsFragment;
import com.weikou.beibeivideo.ui.baidu.BaiDuVideosFragment;
@@ -66,10 +69,13 @@
import com.weikou.beibeivideo.ui.recommend.SearchActivity;
import com.weikou.beibeivideo.util.AlibcTradeUtil;
import com.weikou.beibeivideo.util.BeibeiConstant;
import com.weikou.beibeivideo.util.DimenUtils;
import com.weikou.beibeivideo.util.ExitDialog;
import com.weikou.beibeivideo.util.JumpActivityUtil;
import com.weikou.beibeivideo.util.LoginFirstDialog;
import com.weikou.beibeivideo.util.UserUtil;
import com.weikou.beibeivideo.util.ad.AdUtil;
import com.weikou.beibeivideo.util.ad.RewardVideoAdManager;
import com.weikou.beibeivideo.util.ad.manager.SearchResultAdManager;
import com.weikou.beibeivideo.util.browser.BWJavaInterface;
import com.yeshi.appupdate.AppUpdate;
BuWanVideo/src/com/weikou/beibeivideo/ui/main/MineFragment.java
@@ -273,7 +273,7 @@
            case R.id.rl_mine_about_us:
                Intent intent1 = new Intent(getContext(), BrowserActivity.class);
                intent1.putExtra("url", BeibeiConstant.ABOUT_US);
//                intent1.putExtra("url", "http://192.168.3.122:8848/buwan-web/BuWanWeb/unregister/index.html");
//                intent1.putExtra("url", "http://apph5.banliapp.com/yiyuangou.html");
                startActivity(intent1);
                break;
            case R.id.rl_mine_settings:
BuWanVideo/src/com/weikou/beibeivideo/ui/media/VideoDetailActivity.java
@@ -293,10 +293,16 @@
                }
                @Override
                public void noAdRewardClick() {
                }
                @Override
                public void noAd() {
                    clickPlay();
                    fl_ad.setVisibility(View.GONE);
                }
            });
        } else {
            clickPlay();
BuWanVideo/src/com/weikou/beibeivideo/ui/media/VideoDetailActivity2.java
@@ -341,6 +341,11 @@
                        }
                        @Override
                        public void noAdRewardClick() {
                        }
                        @Override
                        public void noAd() {
                            getSupportFragmentManager().beginTransaction().remove(mVideoDetailVideoAdFragment).commitAllowingStateLoss();
                            clickPlay();//进入播放事件
BuWanVideo/src/com/weikou/beibeivideo/ui/mine/BrowserActivity.java
@@ -1,10 +1,12 @@
package com.weikou.beibeivideo.ui.mine;
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.BitmapFactory;
@@ -15,6 +17,8 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import android.view.KeyEvent;
@@ -26,6 +30,8 @@
import android.widget.TextView;
import android.widget.Toast;
import com.lcjian.library.permission.PermissionHelper;
import com.lcjian.library.permission.PermissionInterface;
import com.lcjian.library.util.ManifestDataUtil;
import com.tencent.smtt.export.external.interfaces.ConsoleMessage;
import com.tencent.smtt.export.external.interfaces.SslError;
@@ -46,11 +52,12 @@
import com.weikou.beibeivideo.util.browser.PPJavaInterface;
import com.weikou.beibeivideo.util.downutil.DownFiles;
import com.weikou.beibeivideo.util.downutil.DownFiles.IProgress;
import com.weikou.beibeivideo.util.downutil.StringUtils;
import com.weikou.beibeivideo.util.x5.X5WebView;
import java.util.Map;
public class BrowserActivity extends BaseActivity implements OnClickListener {
public class BrowserActivity extends BaseActivity implements OnClickListener, PermissionInterface {
    private final static String TAG = "BrowserActivity";
    private TextView tv_top_bar_left;
@@ -58,6 +65,7 @@
    private TextView tv_top_bar_middle;
    private X5WebView webview;
    ProgressBar progressBar;
    private PermissionHelper mPermissionsChecker; // 权限检测器 检测是否有储存卡写入读取权限
    private void initX5WebView() {
@@ -181,6 +189,7 @@
//        String url="http://192.168.3.122:8848/buwan-web/BuWanWeb/vip/pay_success.html?id=23";
        webview.loadUrl(url);
        needSetResult = getIntent().getBooleanExtra("result", false);
        mPermissionsChecker = new PermissionHelper(this, this);//权限
    }
    // 文件下载监听
@@ -200,7 +209,15 @@
    private NotificationCompat.Builder builder;
    int j = -1;
    String tempUrl = null;
    private void startDownLoadFile(String url) {
        tempUrl = url;
        if (mPermissionsChecker.lacksPermissions(getPermissions())) {//检测是否有写入的权限
            mPermissionsChecker.showNormalDialog();
            return;
        }
        tempUrl = null;
        new DownFiles(this, new IProgress() {
@@ -215,16 +232,17 @@
                        Toast.makeText(BrowserActivity.this, "文件已经开始下载",
                                Toast.LENGTH_SHORT).show();
                        manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                        String id = "UMENG_CHANNEL";
                        String id = "YSDQ_DOWNLOAD";
                        String description = ManifestDataUtil.getAppMetaData(BrowserActivity.this, id);
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                            int importance = NotificationManager.IMPORTANCE_HIGH;
                            NotificationChannel mChannel = new NotificationChannel(id, "123", importance);
                            NotificationChannel mChannel = new NotificationChannel(id, "影视大全下载", importance);
                            mChannel.setDescription(description);
                            mChannel.enableLights(true);
                            mChannel.setLightColor(Color.RED);
                            mChannel.enableVibration(true);
                            mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
                            //关闭震动
                            mChannel.enableVibration(false);
                            mChannel.setVibrationPattern(new long[]{0});
                            manager.createNotificationChannel(mChannel);
                            oBuilder = new Notification.Builder(BrowserActivity.this, id);
                            oBuilder.setContentTitle("影视大全")
@@ -356,4 +374,59 @@
        }
        return super.onKeyDown(keyCode, event);
    }
    /**
     * 权限请求码
     *
     * @return
     */
    @Override
    public int getPermissionsRequestCode() {
        return 1001;
    }
    /**
     * 请求权限
     *
     * @return
     */
    @Override
    public String[] getPermissions() {
        return new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
    }
    /**
     * 权限请求成功
     */
    @Override
    public void requestPermissionsSuccess() {
        if (!StringUtils.isNullOrEmpty(tempUrl)) {
            startDownLoadFile(tempUrl);
        }
    }
    /**
     * 权限请求失败
     */
    @Override
    public void requestPermissionsFail() {
//        Toast.makeText(this, "你以拒绝权限", Toast.LENGTH_SHORT).show();
    }
    /**
     * 请求权限结果
     *
     * @param requestCode
     * @param permissions
     * @param grantResults
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (mPermissionsChecker.requestPermissionsResult(requestCode, permissions, grantResults)) {
            //权限请求结果,并已经处理了该回调
            return;
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}
BuWanVideo/src/com/weikou/beibeivideo/ui/mine/PPTVPlayFragment.java
@@ -6,6 +6,7 @@
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.net.http.SslError;
import android.os.Build;
import android.os.Bundle;
@@ -28,25 +29,36 @@
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.lcjian.library.RetainViewFragment;
import com.lcjian.library.dialog.DialogUtil;
import com.lcjian.library.util.SingleToast;
import com.lcjian.library.util.common.StringUtils;
import com.umeng.analytics.MobclickAgent;
import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
import com.weikou.beibeivideo.BeibeiVideoAPI;
import com.weikou.beibeivideo.BeibeiVideoApplication;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.entity.ad.AdPositionEnum;
import com.weikou.beibeivideo.entity.ad.PlayVideoPreADSetting;
import com.weikou.beibeivideo.entity.ad.RewardVideoAdContainer;
import com.weikou.beibeivideo.ui.ad.PlayVideoPreADFragment;
import com.weikou.beibeivideo.ui.dialog.LoadingDialogUtil;
import com.weikou.beibeivideo.ui.dialog.VIPDialog;
import com.weikou.beibeivideo.ui.login.LoginActivity;
import com.weikou.beibeivideo.ui.main.MainActivity;
import com.weikou.beibeivideo.util.BeibeiConstant;
import com.weikou.beibeivideo.util.ConfigUtil;
import com.weikou.beibeivideo.util.DimenUtils;
import com.weikou.beibeivideo.util.UserUtil;
import com.weikou.beibeivideo.util.ad.AdUtil;
import com.weikou.beibeivideo.util.ad.CSJConstant;
import com.weikou.beibeivideo.util.ad.GDTConstant;
import com.weikou.beibeivideo.util.ad.RewardVideoAdManager;
import com.weikou.beibeivideo.util.browser.PPJavaInterface;
import com.weikou.beibeivideo.util.ui.IPageEventListener;
import com.weikou.beibeivideo.util.ui.ToastUtil;
import org.apache.http.Header;
import org.json.JSONObject;
@@ -73,6 +85,8 @@
    private TextView tv_vip_open;
    private boolean showAd = true;
    private Dialog loadingDialog;
    private void getPPVideoInfo(String url) {
        if (url.contains("cid=") && url.contains("vid=")) {
@@ -236,9 +250,8 @@
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return super.onCreateView(inflater, container, savedInstanceState);
    }
    @Override
@@ -261,6 +274,7 @@
    private void initView(View view) {
        loadingDialog = LoadingDialogUtil.getLoadingDialog(getContext(), "");
        initWebView(view);
        tv_top_bar_left = view.findViewById(R.id.tv_top_bar_left);
        tv_top_bar_left.setOnClickListener(this);
@@ -317,8 +331,6 @@
    }
    Dialog vipDialog;
    Dialog loadingDialog;
    PlayVideoPreADFragment mVideoDetailVideoAdFragment;
@@ -444,7 +456,28 @@
                case REQUEST_CODE_LOGIN: {
                    Log.d(TAG, "登录成功");
                    showAd = false;
                    webview.reload();
                    UserUtil.updateUserInfo(BeibeiVideoApplication.application, new UserUtil.IUserInfoUpdateListener() {
                        @Override
                        public void noLogin() {
                        }
                        @Override
                        public void onSuccess() {
                            ll_vip_open.post(new Runnable() {
                                @Override
                                public void run() {
                                    initData();
                                    webview.reload();
                                }
                            });
                        }
                        @Override
                        public void onFail(String msg) {
                        }
                    });
                }
                break;
@@ -455,14 +488,33 @@
        super.onActivityResult(requestCode, resultCode, data);
    }
    private void showRewardSuccessToast() {
        fl_ad.post(new Runnable() {
            @Override
            public void run() {
                TextView textView = new TextView(getContext());
                textView.setText(String.format("高清视频免广告权益发放成功(%s小时内有效)", AdUtil.getPPTVNoAdRewardHour(BeibeiVideoApplication.application)));
                textView.setTextColor(Color.WHITE);
                textView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
                textView.setBackgroundResource(R.drawable.shape_video_no_ad_reward_success_notify_bg);
                ToastUtil.showMiddleToast(getContext(), textView, Toast.LENGTH_LONG);
            }
        });
    }
    private synchronized void playAd() {
        //VIP永久免广告
        if (UserUtil.isVIP(getContext())) {
        if (UserUtil.isVIP(getContext()) || AdUtil.isGetPPTVNoAdReward(BeibeiVideoApplication.application)) {
            adPlayFinish();
            return;
        }
        fl_ad.setVisibility(View.VISIBLE);
        PlayVideoPreADSetting setting = new PlayVideoPreADSetting(AdUtil.AD_TYPE.gdt, BeibeiConstant.GDT_ID, GDTConstant.PID_2_VIDEO_DETAIL_PLAYER_PRE_PPTV, null);
        setting.setNeedShowRewardNotify(AdUtil.showPPTVNoAdReward(BeibeiVideoApplication.application));
        mVideoDetailVideoAdFragment = new PlayVideoPreADFragment();
        mVideoDetailVideoAdFragment.setPageEventListener(new IPageEventListener() {
            @Override
@@ -482,13 +534,95 @@
                    }
                    @Override
                    public void noAdRewardClick() {
                        //测试广告
                        int width = DimenUtils.getScreenWidth(getContext());
                        int height = DimenUtils.getScreenHeight(getContext());
                        DialogUtil.show(loadingDialog);
                        //激励视频
                        RewardVideoAdManager.IAdShowListener showListener = new RewardVideoAdManager.IAdShowListener() {
                            private boolean reward = false;
                            @Override
                            public void onShow() {
                                reward = false;
                            }
                            @Override
                            public void onReward() {
                                showRewardSuccessToast();
                                reward = true;
                                //免广告3小时
                                AdUtil.setPPTVNoAdRewardSuccess(BeibeiVideoApplication.application);
                            }
                            @Override
                            public void onError(String msg) {
                            }
                            @Override
                            public void onClose() {
                                if (reward) {
                                    if (mVideoDetailVideoAdFragment != null)
                                        mVideoDetailVideoAdFragment.finishPlay();
                                }
                            }
                        };
                        Context context = BeibeiVideoApplication.application;
                        AdUtil.AD_TYPE pptvNoAdReward = AdUtil.getAdType(context, AdPositionEnum.pptvNoAdReward);
                        String pid = AdUtil.getAdPid(context, AdPositionEnum.pptvNoAdReward);
                        if (pptvNoAdReward == null) {
                            Toast.makeText(context, "暂不可用", Toast.LENGTH_SHORT).show();
                            return;
                        }
                        if (StringUtils.isBlank(pid)) {
                            if (pptvNoAdReward != null) {
                                if (pptvNoAdReward == AdUtil.AD_TYPE.csj) {
                                    pid = CSJConstant.VIDEO_REWARD_PPTV;
                                } else if (pptvNoAdReward == AdUtil.AD_TYPE.gdt2) {
                                    pid = GDTConstant.PID_2_VIDEO_DETAIL_PLAYER_REWARD_PPTV;
                                }
                            }
                        }
                        new RewardVideoAdManager(pptvNoAdReward, BeibeiVideoApplication.application).loadAd(width, height, pid, false, new RewardVideoAdManager.IAdLoadListener() {
                            @Override
                            public void onSuccess(RewardVideoAdContainer ad) {
                                fl_ad.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        DialogUtil.dismiss(loadingDialog);
                                        RewardVideoAdManager.showAd(getActivity(), ad, showListener);
                                    }
                                });
                            }
                            @Override
                            public void onError(String msg) {
                                DialogUtil.dismiss(loadingDialog);
                                Toast.makeText(context, "广告拉取失败,请稍后再试", Toast.LENGTH_SHORT).show();
                            }
                        }, showListener);
                    }
                    @Override
                    public void noAd() {
                        fl_ad.setVisibility(View.GONE);
                        if (mVideoDetailVideoAdFragment.isAdded())
                            getChildFragmentManager().beginTransaction().remove(mVideoDetailVideoAdFragment).commitAllowingStateLoss();
                        adPlayFinish();
                    }
                }, new PlayVideoPreADSetting(AdUtil.AD_TYPE.gdt, BeibeiConstant.GDT_ID, GDTConstant.PID_2_VIDEO_DETAIL_PLAYER_PRE_PPTV, null));
                }, setting);
            }
        });
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/CommonRecommendFragment.java
New file
@@ -0,0 +1,718 @@
package com.weikou.beibeivideo.ui.recommend;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.lcjian.library.RetainViewFragment;
import com.lcjian.library.content.ConnectivityChangeHelper;
import com.lcjian.library.content.ConnectivityChangeHelper.OnConnectivityChangeListener;
import com.lcjian.library.util.SystemCommon;
import com.lcjian.library.util.cache.DiskLruCache;
import com.lcjian.library.util.common.StorageUtils;
import com.lcjian.library.util.common.StringUtils;
import com.lcjian.library.widget.RatioLayout;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.umeng.analytics.MobclickAgent;
import com.viewpagerindicator.LinePageIndicator;
import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
import com.weikou.beibeivideo.BeibeiVideoAPI;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.entity.HomeAd;
import com.weikou.beibeivideo.entity.HomeType;
import com.weikou.beibeivideo.entity.HomeTypeItem;
import com.weikou.beibeivideo.entity.HomeVideo;
import com.weikou.beibeivideo.entity.JumpDetail;
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.HomeClass;
import com.weikou.beibeivideo.ui.category.bean.HotStar;
import com.weikou.beibeivideo.ui.mine.BrowserActivity;
import com.weikou.beibeivideo.util.BeibeiConstant;
import com.weikou.beibeivideo.util.DimenUtils;
import com.weikou.beibeivideo.util.JumpActivityUtil;
import com.weikou.beibeivideo.util.ad.AdUtil;
import com.weikou.beibeivideo.util.ad.ExpressAdManager;
import com.weikou.beibeivideo.util.ui.DividerItemDecoration;
import com.yeshi.appupdate.GoReview;
import com.yeshi.appupdate.service.DownLoadFileService;
import org.apache.http.Header;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class CommonRecommendFragment extends RetainViewFragment implements
        OnClickListener {
    private SwipeRefreshLayout rl_recommend;
    private RecyclerView rv_recommend;
    private RecommendNewAdapter mRecommendNewAdapter;
    private List mHomeTypes;
    private List<HomeAd> mHomeAds;
    private ConnectivityChangeHelper mChangeHelper;
    private TextView tv_no_network;
    private TextView tv_notice;
    private VideoType type;
    private int position;
    private ImageView iv_right_ad;
    private boolean isBottom = false;
    boolean isReview;
    private Context context;
    public static Fragment newInstance(HomeClass type, String position) {
        CommonRecommendFragment fragment = new CommonRecommendFragment();
        Bundle bundle = new Bundle();
        bundle.putSerializable("videotype", type);
        bundle.putInt("position", Integer.parseInt(position));
        fragment.setArguments(bundle);
        return fragment;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = getActivity().getApplicationContext();
    }
    @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putString("flash back", "show");
        super.onSaveInstanceState(outState);
    }
    public static int getVersionNum(Context context) {
        try {
            PackageInfo pi = context.getPackageManager().getPackageInfo(
                    context.getPackageName(), 0);
            return pi.versionCode;
        } catch (NameNotFoundException e) {
            e.printStackTrace();
            return 1;
        }
    }
    @Override
    public int getContentResource() {
        return R.layout.recommend_fragment;
    }
    private String getDay(long time) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String date = format.format(new Date(time));
        return date;
    }
    //填充数据
    private void setAdContent() {
        //没有广告,添加广告
        if (position != 0)//只有推荐才有广告
            return;
        if (mRecommendNewAdapter.getAdCount() == 0) {
            if (adList != null && adList.size() > 0) {
                mRecommendNewAdapter.addAdToPosition(adList.get(0), 3);
            }
            mRecommendNewAdapter.notifyDataSetChanged();
        }
    }
    private ViewPager vp_recommend;
    private LinearLayout ll_ad_containner;
    private RatioLayout rl_recommend_top;
    private LinePageIndicator indicator_recommend;
    private void initHomeAd() {
        View view = LayoutInflater.from(getContext()).inflate(R.layout.recommend_top, null);
        vp_recommend = view.findViewById(R.id.vp_recommend);
        ll_ad_containner = view.findViewById(R.id.ll_ad_containner);
        rl_recommend_top = view.findViewById(R.id.rl_recommend_top);
        if (position > 0)
            rl_recommend_top.setRatio(0.56f);
        indicator_recommend = view.findViewById(R.id.indicator_recommend);
        mRecommendNewAdapter.setHeaderView(view);
        autoPlayBanner(vp_recommend);
    }
    @Override
    public void onCreateView(View contentView, Bundle savedInstanceState) {
        tv_no_network = contentView.findViewById(R.id.tv_no_network);
        tv_no_network.setOnClickListener(this);
        // 公告
        tv_notice = contentView.findViewById(R.id.include_notice);
        mChangeHelper = new ConnectivityChangeHelper(context,
                new OnConnectivityChangeListener() {
                    @Override
                    public void onNetworkUnAvailable() {
                        if (!StringUtils.isBlank(content)) {
                            tv_notice.setVisibility(View.VISIBLE);
                        } else {
                            tv_notice.setVisibility(View.GONE);
                        }
                        tv_no_network.setVisibility(View.VISIBLE);
                    }
                    @Override
                    public void onWiFiAvailable() {
                        if (!StringUtils.isBlank(content)) {
                            tv_notice.setVisibility(View.VISIBLE);
                        } else {
                            tv_notice.setVisibility(View.GONE);
                        }
                        tv_no_network.setVisibility(View.GONE);
                    }
                    @Override
                    public void onMobileAvailable() {
                        if (!StringUtils.isBlank(content)) {
                            tv_notice.setVisibility(View.VISIBLE);
                        } else {
                            tv_notice.setVisibility(View.GONE);
                        }
                        tv_no_network.setVisibility(View.GONE);
                    }
                });
        int width = (int) SystemCommon.getScreenWidth(context);
        rl_recommend = contentView.findViewById(R.id.rl_recommend);
        rv_recommend = contentView
                .findViewById(R.id.rv_recommend);
        rv_recommend.setLayoutManager(new LinearLayoutManager(context));
        DividerItemDecoration decoration = new DividerItemDecoration();
        decoration.setSize(DimenUtils.dip2px(rv_recommend.getContext(), 0));
        rv_recommend.addItemDecoration(decoration);
        rl_recommend.setClickable(false);
        iv_right_ad = contentView.findViewById(R.id.iv_right_ad);
        type = (VideoType) getArguments().getSerializable("videotype");
        position = (Integer) getArguments().get("position");
        isReview = GoReview.getGoReview(context, BeibeiConstant.GO_REVIEW_KEY);
        mHomeTypes = new ArrayList<HomeType>();
        mHomeAds = new ArrayList<>();
        rl_recommend.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                if (position == 0) {
                    getHotStars();
                }
                //加载广告
                loadAd();
                getHomeAd();
                Log.i("mResult", "onCreate---setOnRefreshListener---loadAD1");
            }
        });
        if (mHomeTypes == null)
            mHomeTypes = new ArrayList();
        mRecommendNewAdapter = new RecommendNewAdapter(getActivity(), mHomeTypes);
        rv_recommend.setAdapter(mRecommendNewAdapter);
        setAdContent();
        initHomeAd();
        //加载缓存数据
//        loadCacheData();
        rv_recommend.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (getActivity() != null) {
                    rl_recommend.setRefreshing(true);
                    getHomeAd();
                    Log.i("mResult", "onCreate---postDelayed---loadAD1");
                    if (position == 0)
                        getHotStars();
                }
            }
        }, 500);
        //加载广告
        loadAd();
        getNotice();
        if (position == 0) {
            getAdRecommendRight();
        }
    }
    private List<ExpressAdContainer> adList;
    private void loadAd() {
        try {
            ExpressAdManager recommendAdManager = new ExpressAdManager(AdUtil.AD_TYPE.csj, context);
            recommendAdManager.loadRecommendLargeAd(new ExpressAdManager.IAdLoadListener() {
                @Override
                public void onSuccess(final List<ExpressAdContainer> adList) {
                    CommonRecommendFragment.this.adList = new ArrayList<>();
                    for (ExpressAdContainer ad : adList) {
                        ExpressAdManager.renderAd(getActivity(), ad, new ExpressAdManager.IAdRenderListener() {
                            @Override
                            public void onRenderSuccess(List<ExpressAdContainer> adList1) {
                                CommonRecommendFragment.this.adList.add(adList1.get(0));
                                if (CommonRecommendFragment.this.adList.size() == adList.size()) {
                                    if (mRecommendNewAdapter.getAdCount() == 0 && mHomeTypes.size() > 0) {//没有填充广告
                                        setAdContent();
                                    }
                                }
                            }
                            @Override
                            public void onRenderFail(List<ExpressAdContainer> adList) {
                            }
                        }, new ExpressAdManager.IAdEventListener() {
                            @Override
                            public void closeAd(ExpressAdContainer ad) {
                                mRecommendNewAdapter.removeAd(ad);
                            }
                        });
                    }
                }
            });
        } catch (Exception e) {
        }
    }
    private Runnable autoPlayBanner = null;
    private synchronized void autoPlayBanner(final ViewPager viewPager) {
        if (autoPlayBanner == null) {
            autoPlayBanner = new Runnable() {
                @Override
                public void run() {
                    try {
                        if (viewPager.getAdapter() != null && viewPager.getAdapter().getCount() > 0) {
                            if (viewPager.getCurrentItem() >= viewPager.getAdapter().getCount() - 1) {
                                viewPager.setCurrentItem(0, true);
                            } else {
                                viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, true);
                            }
                        }
                        autoPlayBanner(viewPager);
                    } catch (Exception e) {
                    }
                }
            };
            viewPager.postDelayed(autoPlayBanner, 3000);
        } else {
            viewPager.removeCallbacks(autoPlayBanner);
            viewPager.postDelayed(autoPlayBanner, 3000);
        }
    }
    /**
     * 设置广告数据
     */
    private void setHomeAdsData() {
        if (vp_recommend.getAdapter() == null) {
            vp_recommend.setAdapter(new RecommendTopAdapter(mHomeAds, getActivity(), position == 0 ? false : true));
            int width = (int) SystemCommon.getScreenWidth(getContext());
            indicator_recommend.setScreenWidth(width);
            indicator_recommend.setSelectedColor(vp_recommend.getContext().getResources()
                    .getColor(R.color.yellow));
            indicator_recommend.setUnselectedColor(0xbbADA9A7);
            indicator_recommend.setViewPager(vp_recommend);
            indicator_recommend.setViewPager(vp_recommend);
        } else
            vp_recommend.getAdapter().notifyDataSetChanged();
        if (vp_recommend.getChildCount() <= 1) {
            indicator_recommend.setVisibility(View.GONE);
        } else
            indicator_recommend.setVisibility(View.VISIBLE);
    }
    private void getAdRecommendRight() {
        BeibeiVideoAPI.getAdRecommendRight(context, new BasicTextHttpResponseHandler() {
            @Override
            public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
                if (jsonObject.getBoolean("IsPost")) {
                    if (position == 0) {
                        String img = jsonObject.optJSONObject("Data").optString("img");
                        String mstatus = jsonObject.optJSONObject("Data").optString("mstatus");
                        final String linkType = jsonObject.optJSONObject("Data").optString("linkType");
                        final String webLink = jsonObject.optJSONObject("Data").optString("webLink");
                        final String downloadLink = jsonObject.optJSONObject("Data").optString("downloadLink");
                        Glide.with(context).load(img).into(iv_right_ad);
                        if (mstatus.equalsIgnoreCase("0")) {
                            iv_right_ad.setVisibility(View.GONE);
                        } else {
                            iv_right_ad.setVisibility(View.VISIBLE);
                        }
                        iv_right_ad.setOnClickListener(new OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                if (linkType.equalsIgnoreCase("0")) {
                                    Intent intent = new Intent(context, BrowserActivity.class);
                                    intent.putExtra("url", webLink);
                                    startActivity(intent);
                                } else {
                                    try {
                                        Intent intent = new Intent(context,
                                                DownLoadFileService.class);
                                        context.stopService(intent);
                                    } catch (Exception e) {
                                    }
                                    try {
                                        Bundle bundle = new Bundle();
                                        bundle.putString("downloadurl",
                                                downloadLink);
                                        Intent intent = new Intent(context,
                                                DownLoadFileService.class);
                                        intent.putExtras(bundle);
                                        context.startService(intent);
                                    } catch (Exception e) {
                                    }
                                }
                            }
                        });
                    } else {
                        iv_right_ad.setVisibility(View.GONE);
                    }
                }
            }
            @Override
            public void onFailure(int statusCode, Header[] headers, String responseString, Throwable
                    throwable) {
                super.onFailure(statusCode, headers, responseString, throwable);
            }
        });
    }
    private String getKey(String method) {
        return new Md5FileNameGenerator().generate(method);
    }
    @Override
    public void onResume() {
        super.onResume();
        mChangeHelper.registerReceiver();
        MobclickAgent.onPageStart("主页面—推荐");
    }
    @Override
    public void onPause() {
        super.onPause();
        mChangeHelper.unregisterReceiver();
        MobclickAgent.onPageEnd("主页面—推荐");
    }
    private String content;
    private void getNotice() {
        SharedPreferences preferences = context.getSharedPreferences(
                "user", Context.MODE_PRIVATE);
        String uid = preferences.getString("uid", "");
        BeibeiVideoAPI.getNotice(context, uid,
                new BasicTextHttpResponseHandler() {
                    @Override
                    public void onSuccessPerfect(int statusCode,
                                                 Header[] headers, JSONObject jsonObject)
                            throws Exception {
                        if (jsonObject.getBoolean("IsPost")) {
                            JSONObject obj = jsonObject.optJSONObject("Data");
                            content = obj.optString("Content");
                            JSONObject jumpDetailJson = obj.optJSONObject("jumpDetail");
                            JumpDetail jumpDetail = null;
                            if (jumpDetailJson != null) {
                                jumpDetail = new Gson().fromJson(jumpDetailJson.toString(), JumpDetail.class);
                            }
                            JSONObject paramsJson = obj.optJSONObject("Params");
                            com.alibaba.fastjson.JSONObject params = null;
                            if (paramsJson != null)
                                params = com.alibaba.fastjson.JSONObject.parseObject(paramsJson.toString());
                            final JumpDetail fJumpDetail = jumpDetail;
                            final com.alibaba.fastjson.JSONObject fParams = params;
                            // 0-不显示
                            // 1-显示
                            final String url = obj.optString("Url");
                            if (position > 0)//只有第一页才显示通知
                                content = null;
                            if (!StringUtils.isBlank(content)) {
                                tv_notice.setVisibility(View.VISIBLE);
                                tv_notice.setText(content);
                                if (!StringUtils.isBlank(url)) {
                                    tv_notice
                                            .setOnClickListener(new OnClickListener() {
                                                @Override
                                                public void onClick(View v) {
                                                    JumpActivityUtil.jumpPage(getActivity(), fJumpDetail, fParams);
                                                }
                                            });
                                }
                            } else {
                                tv_notice.setVisibility(View.GONE);
                            }
                        }
                    }
                });
    }
    private void getHomeAd() {
        SharedPreferences preferences = context.getSharedPreferences(
                "user", Context.MODE_PRIVATE);
        String uid = preferences.getString("uid", "");
        BeibeiVideoAPI.getHomeAd(context, uid, type.getId(),
                new BasicTextHttpResponseHandler() {
                    @Override
                    public void onSuccessPerfect(int statusCode,
                                                 Header[] headers, JSONObject jsonObject)
                            throws Exception {
                        if (jsonObject.getBoolean("IsPost")) {
                            Gson gson = new GsonBuilder()
                                    .setPrettyPrinting()
                                    .setFieldNamingPolicy(
                                            FieldNamingPolicy.UPPER_CAMEL_CASE)
                                    .create();
                            List<HomeAd> homeAds = gson.fromJson(jsonObject
                                    .getJSONObject("Data").getJSONArray("data")
                                    .toString(), new TypeToken<List<HomeAd>>() {
                            }.getType());
                            //获取Banner比例
                            if (homeAds != null) {
                                mHomeAds.clear();
                                mHomeAds.addAll(homeAds);
                            }
                            setHomeAdsData();
                        }
                    }
                    @Override
                    public void onFinish() {
                        getHomeType();
                    }
                });
    }
    /**
     * 获取影片整体信息
     */
    private void getHomeType() {
        SharedPreferences preferences = context.getSharedPreferences(
                "user", Context.MODE_PRIVATE);
        String uid = preferences.getString("uid", "");
        BeibeiVideoAPI.getHomeType(context, uid, type.getId(),
                new BasicTextHttpResponseHandler() {
                    @Override
                    public void onSuccessPerfect(int statusCode,
                                                 Header[] headers, JSONObject jsonObject)
                            throws Exception {
                        if (jsonObject.getBoolean("IsPost")) {
                            Gson gson = new GsonBuilder().setVersion(1.0).setFieldNamingPolicy(
                                    FieldNamingPolicy.UPPER_CAMEL_CASE)
                                    .create();
                            List<HomeType> homeTypes = new ArrayList<HomeType>();
                            JSONArray array = jsonObject.getJSONObject("Data")
                                    .getJSONArray("data");
                            for (int i = 0; i < array.length(); i++) {
                                HomeType type = new HomeType();
                                JSONObject obj = array.optJSONObject(i);
                                type.setColumns(obj.optInt("Columns"));
                                type.setId(obj.optString("Id"));
                                type.setName(obj.optString("Name"));
                                type.setHasMore(obj.optString("HasMore"));
                                type.setActivity(obj.optString("Activity"));
                                type.setParams(obj.optString("Params"));
                                type.setIcon(obj.optString("Icon"));
                                JSONArray homeArray = obj
                                        .optJSONArray("HomeVideoList");
                                List<HomeVideo> homeList = new ArrayList<HomeVideo>();
                                if (homeArray != null && homeArray.length() > 0) {
                                    for (int j = 0; j < homeArray.length(); j++) {
                                        homeList.add(gson.fromJson(homeArray
                                                        .optJSONObject(j).toString(),
                                                HomeVideo.class));
                                    }
                                }
                                type.setHomeVideoList(homeList);
                                JSONArray itemArray = obj
                                        .optJSONArray("ItemTypeList");
                                List<HomeTypeItem> itemList = new ArrayList<HomeTypeItem>();
                                if (itemArray != null && itemArray.length() > 0) {
                                    for (int k = 0; k < itemArray.length(); k++) {
                                        if (itemArray.optJSONObject(k) != null) {
                                            itemList.add(gson.fromJson(
                                                    itemArray.optJSONObject(k)
                                                            .toString(),
                                                    HomeTypeItem.class));
                                        }
                                    }
                                }
                                type.setItemTypeList(itemList);
                                if (!type.getName().equalsIgnoreCase("美女"))
                                    homeTypes.add(type);
                            }
                            //清除老数据
                            mHomeTypes.clear();
                            mRecommendNewAdapter.removeAllAd();
                            mHomeTypes.addAll(homeTypes);
                            //填充数据
                            setAdContent();
                            mRecommendNewAdapter.notifyDataSetChanged();
                        }
                    }
                    @Override
                    public void onFinish() {
                        rl_recommend.setRefreshing(false);
                        try {
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    @Override
                    public void onFailure(int statusCode, Header[] headers,
                                          byte[] responseBytes, Throwable throwable) {
                        super.onFailure(statusCode, headers, responseBytes,
                                throwable);
                    }
                });
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.tv_no_network: {
                Intent intent = new Intent(Settings.ACTION_SETTINGS);
                startActivity(intent);
            }
            break;
            default:
                break;
        }
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (autoPlayBanner != null)
            vp_recommend.removeCallbacks(autoPlayBanner);
    }
    private List<HomeVideo> adList1 = new ArrayList<>();
    List<HotStar> hotStars = new ArrayList<>();
    private void getHotStars() {
        SharedPreferences preferences = context.getSharedPreferences(
                "user", Context.MODE_PRIVATE);
        String uid = preferences.getString("uid", "");
        BeibeiVideoAPI.getRecommendStars(context, uid,
                new BasicTextHttpResponseHandler() {
                    @Override
                    public void onSuccessPerfect(int statusCode,
                                                 Header[] headers, JSONObject jsonObject)
                            throws Exception {
                        if (jsonObject.getBoolean("IsPost")) {
                            hotStars.clear();
                            Gson gson = new GsonBuilder().setFieldNamingPolicy(
                                    FieldNamingPolicy.UPPER_CAMEL_CASE)
                                    .create();
                            List<HotStar> hotStarList = gson.fromJson(
                                    jsonObject.getJSONObject("Data")
                                            .getJSONArray("data").toString(),
                                    new TypeToken<List<HotStar>>() {
                                    }.getType());
                            hotStars.addAll(hotStarList);
                            //插入明星列表
                            if (hotStars != null && hotStars.size() > 0) {
                                HomeType homeType = new HomeType();
                                homeType.setName("明星合辑");
                                homeType.setColumns(4);
                                homeType.setHotStars(hotStars);
                                homeType.setActivity("");
                                homeType.setBeizhu("");
                                homeType.setParams("");
                                homeType.setHasMore("true");
                                homeType.setId("9998");
                                mHomeTypes.add(homeType);
                                mRecommendNewAdapter.notifyDataSetChanged();
                            }
                        }
                    }
                    @Override
                    public void onFailure(int statusCode, Header[] headers,
                                          byte[] responseBytes, Throwable throwable) {
                        super.onFailure(statusCode, headers, responseBytes, throwable);
                    }
                    @Override
                    public void onFinish() {
                    }
                });
    }
}
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/RecommendFragment.java
@@ -66,6 +66,7 @@
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
@@ -117,6 +118,7 @@
            Bundle bundle = new Bundle();
            bundle.putSerializable("videotype", type);
            bundle.putString("id", type.getId());
            bundle.putInt("position", Integer.parseInt(position));
            fragment.setArguments(bundle);
            return fragment;
        }
@@ -134,8 +136,6 @@
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
@@ -192,8 +192,6 @@
        vp_recommend = view.findViewById(R.id.vp_recommend);
        ll_ad_containner = view.findViewById(R.id.ll_ad_containner);
        rl_recommend_top = view.findViewById(R.id.rl_recommend_top);
        if (position > 0)
            rl_recommend_top.setRatio(0.56f);
        indicator_recommend = view.findViewById(R.id.indicator_recommend);
        mRecommendNewAdapter.setHeaderView(view);
        autoPlayBanner(vp_recommend);
@@ -390,6 +388,11 @@
            indicator_recommend.setViewPager(vp_recommend);
        } else
            vp_recommend.getAdapter().notifyDataSetChanged();
        if (vp_recommend.getChildCount() == 1) {
            indicator_recommend.setVisibility(View.GONE);
        } else
            indicator_recommend.setVisibility(View.VISIBLE);
    }
    private void loadCacheData() {
@@ -630,11 +633,16 @@
                                    .setFieldNamingPolicy(
                                            FieldNamingPolicy.UPPER_CAMEL_CASE)
                                    .create();
                            List<HomeAd> homeAds = gson.fromJson(jsonObject
                                    .getJSONObject("Data").getJSONArray("data")
                            JSONObject data = jsonObject
                                    .getJSONObject("Data");
                            List<HomeAd> homeAds = gson.fromJson(data.getJSONArray("data")
                                    .toString(), new TypeToken<List<HomeAd>>() {
                            }.getType());
                            //获取banner比例
                            String bannerSizeRate = data.optString("bannerSizeRate");
                            if (!StringUtils.isEmpty(bannerSizeRate)) {
                                rl_recommend_top.setRatio(new BigDecimal(bannerSizeRate).floatValue());
                            }
                            if (homeAds != null) {
                                mHomeAds.clear();
                                mHomeAds.addAll(homeAds);
@@ -693,6 +701,7 @@
                                type.setActivity(obj.optString("Activity"));
                                type.setParams(obj.optString("Params"));
                                type.setIcon(obj.optString("Icon"));
                                type.setNeedAd(obj.optBoolean("NeedAd", false));
                                JSONArray homeArray = obj
                                        .optJSONArray("HomeVideoList");
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/RecommendNewAdapter.java
@@ -172,22 +172,14 @@
            holder.view.setVisibility(View.VISIBLE);
            boolean isFirst = false;
            for (Object content1 : contentList)
                if (content1 instanceof HomeType) {
                    if (content1 == homeType) {
                        isFirst = true;
                        break;
                    } else {
                        isFirst = false;
                        break;
                    }
                }
            VideoColumn2Adapter adapter = null;
//            if (isFirst) {
//                homeType.setColumns(Integer.MAX_VALUE);
//                homeType.setNeedAd(true);
//            }
            if (isFirst) {//第一排为小视频
                adapter = new VideoColumn2Adapter(mContext, mContext, homeType.getVideoInfoList(), true, Integer.MAX_VALUE, "recommend", null, new ExpressAdManager.IAdShowListener() {
            if (homeType.getColumns() > 3) {//第一排为小视频
                adapter = new VideoColumn2Adapter(mContext, mContext, homeType.getVideoInfoList(), homeType.isNeedAd(), Integer.MAX_VALUE, "recommend", null, new ExpressAdManager.IAdShowListener() {
                    @Override
                    public void show() {
                        holder.rv_content.scrollToPosition(0);
@@ -195,7 +187,7 @@
                });
                adapter.initRecyclerViewDisplayWidthRow1(holder.rv_content);
            } else {
                adapter = new VideoColumn2Adapter(mContext, mContext, homeType.getVideoInfoList(), false, homeType.getColumns(), "recommend", null);
                adapter = new VideoColumn2Adapter(mContext, mContext, homeType.getVideoInfoList(), homeType.isNeedAd(), homeType.getColumns(), "recommend", null);
                if (homeType.getColumns() == 2)
                    adapter.initRecyclerViewDisplayWidthColumn2(holder.rv_content);
                else if (homeType.getColumns() == 3)
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/SearchActivity.java
@@ -41,6 +41,7 @@
import com.umeng.analytics.MobclickAgent;
import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
import com.weikou.beibeivideo.BeibeiVideoAPI;
import com.weikou.beibeivideo.entity.ad.AdPositionEnum;
import com.weikou.beibeivideo.entity.ad.ExpressAdContainer;
import com.weikou.beibeivideo.ui.BaseActivity;
import com.weikou.beibeivideo.ui.video.SuggestKeysAdapter;
@@ -349,7 +350,7 @@
    // 1.加载广告,先设置加载上下文环境和条件
    private void initAdvertisement() {
        AdUtil.AD_TYPE adType = AdUtil.getAdType(getApplicationContext(), AdUtil.POSITION_SEARCH);
        AdUtil.AD_TYPE adType = AdUtil.getAdType(getApplicationContext(), AdPositionEnum.videoSearch);
        fl_advertisement.post(new Runnable() {
            @Override
            public void run() {
BuWanVideo/src/com/weikou/beibeivideo/ui/video/SearchResultAdapter.java
@@ -115,6 +115,12 @@
                albumVideoHolder.iv_vip.setVisibility(View.GONE);
            }
            if (info.getDefinition()== 1) {
                albumVideoHolder.iv_high.setVisibility(View.VISIBLE);
            } else {
                albumVideoHolder.iv_high.setVisibility(View.GONE);
            }
            albumVideoHolder.tv_play.setOnClickListener(new View.OnClickListener() {
                @Override
@@ -320,6 +326,7 @@
        ImageView iv_picture;
        ImageView iv_vip;
        ImageView iv_high;
        TextView tv_name;
        TextView tv_type;
        TextView tv_actors;
@@ -343,6 +350,7 @@
            tv_video_4 = view.findViewById(R.id.tv_video_4);
            tv_video_5 = view.findViewById(R.id.tv_video_5);
            iv_vip = view.findViewById(R.id.iv_vip);
            iv_high = view.findViewById(R.id.iv_high);
        }
    }
BuWanVideo/src/com/weikou/beibeivideo/ui/video/VideoColumn2Adapter.java
@@ -5,6 +5,9 @@
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
@@ -16,6 +19,9 @@
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.DrawableImageViewTarget;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
import com.lcjian.library.util.common.DimenUtils;
import com.lcjian.library.util.common.StringUtils;
import com.qq.e.ads.nativ.NativeUnifiedADData;
@@ -417,18 +423,17 @@
            }
            if (StringUtils.isEmpty(defaultPicture)) {
                Glide.with(mContext).load(info.getPicture()).transition(withCrossFade())
                        .apply(new RequestOptions().centerCrop().placeholder(R.drawable.shape_default_cover).error(R.drawable.shape_default_cover))
                        .into(holder.iv_movie_cover);
            } else {
                try {
                    Glide.with(mContext).load(defaultPicture).transition(withCrossFade())
                            .apply(new RequestOptions().centerCrop().placeholder(R.drawable.shape_default_cover).error(R.drawable.shape_default_cover))
                            .into(holder.iv_movie_cover);
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                }
                defaultPicture = info.getPicture();
            }
            try {
                Glide.with(mContext).load(defaultPicture).transition(withCrossFade())
                        .apply(new RequestOptions().placeholder(R.drawable.shape_default_cover).error(R.drawable.shape_default_cover))
                        .into(new DrawableImageViewTarget(holder.iv_movie_cover, true));
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            }
            //vip标识
            if (info.getFree() == 1) {
                holder.iv_vip.setVisibility(View.VISIBLE);
BuWanVideo/src/com/weikou/beibeivideo/util/ExitDialog.java
@@ -11,6 +11,7 @@
import com.lcjian.library.util.SystemCommon;
import com.qq.e.ads.nativ.NativeExpressAD;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.entity.ad.AdPositionEnum;
import com.weikou.beibeivideo.entity.ad.ExpressAdContainer;
import com.weikou.beibeivideo.util.ad.AdUtil;
import com.weikou.beibeivideo.util.ad.ExpressAdManager;
@@ -44,7 +45,7 @@
        public Builder(Activity context) {
            this.context = context;
            expressAdManager = new ExpressAdManager(AdUtil.getAdType(context, AdUtil.POSITION_EXIT_APP), context);
            expressAdManager = new ExpressAdManager(AdUtil.getAdType(context, AdPositionEnum.exitApp), context);
        }
BuWanVideo/src/com/weikou/beibeivideo/util/UmengEventUtil.java
@@ -53,4 +53,32 @@
    }
    /**
     * 推荐导航
     *
     * @param context
     * @param index
     */
    public static void recommendNav(Context context, int index, String name) {
        Map<String, Object> params = new HashMap<>();
        params.put("position", "index-" + index);
        params.put("name", name);
        event(context, "recommend-nav", params);
    }
    public static void recommendVideoClick(Context context, String navName, RecommendClickEventType type, int index) {
        Map<String, Object> params = new HashMap<>();
        params.put("position", "index-" + index);
        params.put("navName", navName);
        params.put("type", type.name());
        event(context, "recommend-video-click", params);
    }
    //点击事件分类
    public static enum RecommendClickEventType {
        videoList, banner;
    }
}
BuWanVideo/src/com/weikou/beibeivideo/util/ad/AdUtil.java
@@ -3,6 +3,7 @@
import android.content.Context;
import android.content.SharedPreferences;
import com.weikou.beibeivideo.entity.ad.AdPositionEnum;
import com.weikou.beibeivideo.entity.ad.AdTypeVO;
import com.weikou.beibeivideo.util.BeibeiConstant;
import com.weikou.beibeivideo.util.downutil.StringUtils;
@@ -23,12 +24,6 @@
        }
    }
    public final static String POSITION_SPLASH = "splash";//开屏
    public final static String POSITION_VIDEO_PLAY_PRE = "videoPlayPre";//视频播放前贴
    public final static String POSITION_EXIT_APP = "exitApp";//APP退出广告
    public final static String POSITION_SEARCH = "videoSearch";//搜索页广告
    public final static String POSITION_VIDEO_DETAIL_FULL_VIDEO = "videoDetailFullVideo";//视频全屏广告
    public static AD_TYPE getSmallExpressAdType() {
        if (BeibeiConstant.AD_TYPE != null && AdTypeVO.TYPE_CSJ.equalsIgnoreCase(BeibeiConstant.AD_TYPE.getExpressSmallType())) {
@@ -63,16 +58,16 @@
     * 获取广告类型
     *
     * @param context
     * @param positionName
     * @param position
     * @return
     */
    public static AD_TYPE getAdType(Context context, String positionName) {
    public static AD_TYPE getAdType(Context context, AdPositionEnum position) {
        SharedPreferences share = context.getSharedPreferences("adConfig", Context.MODE_PRIVATE);
        String config = share.getString("config", "");
        if (!StringUtils.isNullOrEmpty(config)) {//万一没设置起就用广点通
            try {
                JSONObject object = new JSONObject(config);
                object = object.optJSONObject(positionName);
                object = object.optJSONObject(position.getPositionName());
                if (object != null)
                    return AD_TYPE.valueOf(object.optString("type"));
            } catch (JSONException e) {
@@ -86,13 +81,13 @@
        return null;
    }
    public static String getAdPid(Context context, String positionName) {
    public static String getAdPid(Context context, AdPositionEnum position) {
        SharedPreferences share = context.getSharedPreferences("adConfig", Context.MODE_PRIVATE);
        String config = share.getString("config", "");
        if (!StringUtils.isNullOrEmpty(config)) {//万一没设置起就用广点通
            try {
                JSONObject object = new JSONObject(config);
                object = object.optJSONObject(positionName);
                object = object.optJSONObject(position.getPositionName());
                if (object != null)
                    return object.optString("pid");
            } catch (JSONException e) {
@@ -106,5 +101,51 @@
        return null;
    }
    /**
     * 是否显示PPTV免广告权益
     *
     * @return
     */
    public static boolean showPPTVNoAdReward(Context context) {
        return getAdType(context, AdPositionEnum.pptvNoAdReward) != null;
    }
    //是否已经获得pptv视频免广告权益
    public static boolean isGetPPTVNoAdReward(Context context) {
        SharedPreferences share = context.getSharedPreferences("adConfig", Context.MODE_PRIVATE);
        long expireTime = share.getLong("pptvNoAdReward", 0);
        if (System.currentTimeMillis() > expireTime) {
            return false;
        }
        return true;
    }
    public static void setPPTVNoAdRewardSuccess(Context context) {
        int hour = getPPTVNoAdRewardHour(context);
        SharedPreferences share = context.getSharedPreferences("adConfig", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = share.edit();
        editor.putLong("pptvNoAdReward", System.currentTimeMillis() + 1000 * 60 * 60L * hour);
        editor.commit();
    }
    //获取pptv免广告权益的时间(小时记)
    public static int getPPTVNoAdRewardHour(Context context) {
        SharedPreferences share = context.getSharedPreferences("adConfig", Context.MODE_PRIVATE);
        return share.getInt("pptvNoAdRewardHour", 3);
    }
    /**
     * 设置pptv无广告权益的时间(小时记)
     *
     * @param context
     * @param hour
     */
    public static void setPPTVNoAdRewardHour(Context context, int hour) {
        SharedPreferences share = context.getSharedPreferences("adConfig", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = share.edit();
        editor.putInt("pptvNoAdRewardHour", hour);
        editor.commit();
    }
}
BuWanVideo/src/com/weikou/beibeivideo/util/ad/CSJConstant.java
@@ -26,6 +26,10 @@
    //视频搜索页
    public static String VIDEO_SEARCH="945552227";
    //PPTV激励视频
    public static String VIDEO_REWARD_PPTV="945914112";
    //无效广告
BuWanVideo/src/com/weikou/beibeivideo/util/ad/GDTConstant.java
@@ -19,5 +19,8 @@
    //PPTV视频前贴
    public static String PID_2_VIDEO_DETAIL_PLAYER_PRE_PPTV = "5091266068484315";
    //PPTV激励视频
    public static String PID_2_VIDEO_DETAIL_PLAYER_REWARD_PPTV = "9051467743649673";
}
BuWanVideo/src/com/weikou/beibeivideo/util/ad/RewardVideoAdManager.java
New file
@@ -0,0 +1,350 @@
package com.weikou.beibeivideo.util.ad;
import android.app.Activity;
import android.content.Context;
import android.os.SystemClock;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.Toast;
import com.bytedance.sdk.openadsdk.AdSlot;
import com.bytedance.sdk.openadsdk.TTAdConstant;
import com.bytedance.sdk.openadsdk.TTAdDislike;
import com.bytedance.sdk.openadsdk.TTAdManager;
import com.bytedance.sdk.openadsdk.TTAdNative;
import com.bytedance.sdk.openadsdk.TTNativeExpressAd;
import com.bytedance.sdk.openadsdk.TTRewardVideoAd;
import com.qq.e.ads.cfg.VideoOption;
import com.qq.e.ads.nativ.ADSize;
import com.qq.e.ads.nativ.NativeExpressAD;
import com.qq.e.ads.nativ.NativeExpressADView;
import com.qq.e.ads.nativ.express2.AdEventListener;
import com.qq.e.ads.nativ.express2.NativeExpressAD2;
import com.qq.e.ads.nativ.express2.NativeExpressADData2;
import com.qq.e.ads.nativ.express2.VideoOption2;
import com.qq.e.ads.rewardvideo.RewardVideoAD;
import com.qq.e.ads.rewardvideo.RewardVideoADListener;
import com.qq.e.ads.rewardvideo2.ExpressRewardVideoAD;
import com.qq.e.ads.rewardvideo2.ExpressRewardVideoAdListener;
import com.qq.e.comm.util.AdError;
import com.qq.e.comm.util.VideoAdValidity;
import com.ut.device.UTDevice;
import com.weikou.beibeivideo.entity.ad.ExpressAdContainer;
import com.weikou.beibeivideo.entity.ad.RewardVideoAdContainer;
import com.weikou.beibeivideo.util.BeibeiConstant;
import com.weikou.beibeivideo.util.DimenUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * 激励视频广告管理
 */
public class RewardVideoAdManager {
    final static String TAG = RewardVideoAdManager.class.getSimpleName();
    AdUtil.AD_TYPE sourceType = AdUtil.AD_TYPE.gdt;
    private TTAdNative mTTAdNative;
    private Context mContext;
    public RewardVideoAdManager(AdUtil.AD_TYPE adSource, Context context) {
        sourceType = adSource;
        this.mContext = context;
        if (sourceType == AdUtil.AD_TYPE.csj) {
            TTAdManager ttAdManager = TTAdManagerHolder.get();
            mTTAdNative = ttAdManager.createAdNative(context);
        }
    }
    //加载小广告
    /**
     * 加载广告
     *
     * @param widthDP
     * @param heightDP
     * @param hrizontal
     * @param adLoadListener
     */
    public void loadAd(int widthDP, int heightDP, String pid, boolean hrizontal, final IAdLoadListener adLoadListener, IAdShowListener showListener) {
        if (sourceType == AdUtil.AD_TYPE.csj) {
            loadCSJ(pid, widthDP, heightDP, hrizontal, new ICSJAdLoadListener() {
                @Override
                public void onSuccess(TTRewardVideoAd ad) {
                    adLoadListener.onSuccess(new RewardVideoAdContainer(ad));
                }
                @Override
                public void onError(String msg) {
                    adLoadListener.onError(msg);
                }
            });
        } else if (sourceType == AdUtil.AD_TYPE.gdt2) {
            loadGdt2(pid, new IGDT2AdLoadListener() {
                @Override
                public void onSuccess(ExpressRewardVideoAD rewardVideoAD) {
                    adLoadListener.onSuccess(new RewardVideoAdContainer(rewardVideoAD));
                }
                @Override
                public void onError(String msg) {
                    adLoadListener.onError(msg);
                }
            }, showListener);
        }
    }
    /**
     * 穿山甲广告
     *
     * @param codeId
     * @param width
     * @param height
     * @param count
     * @param adLoadListener
     */
    private TTRewardVideoAd mTTRewardVideoAd;
    private void loadCSJ(String codeId, int width, int height, boolean hrizontal, final ICSJAdLoadListener adLoadListener) {
        AdSlot adSlot = new AdSlot.Builder()
                .setCodeId(codeId)
                .setSupportDeepLink(true)
                .setUserID(UTDevice.getUtdid(mContext))
                .setExpressViewAcceptedSize(width, height)
                .setOrientation(hrizontal ? TTAdConstant.HORIZONTAL : TTAdConstant.VERTICAL)
                .build();
        mTTAdNative.loadRewardVideoAd(adSlot, new TTAdNative.RewardVideoAdListener() {
            //请求广告失败
            @Override
            public void onError(int code, String message) {
                adLoadListener.onError(code + ":" + message);
            }
            //视频广告加载后,视频资源缓存到本地的回调,在此回调后,播放本地视频,流畅不阻塞。
            @Override
            public void onRewardVideoCached() {
                adLoadListener.onSuccess(mTTRewardVideoAd);
            }
            //视频广告的素材加载完毕,比如视频url等,在此回调后,可以播放在线视频,网络不好可能出现加载缓冲,影响体验。
            @Override
            public void onRewardVideoAdLoad(TTRewardVideoAd ad) {
                mTTRewardVideoAd = ad;
            }
        });
    }
    private ExpressRewardVideoAD rewardVideoAD = null;
    private void loadGdt2(String pid, IGDT2AdLoadListener adLoadListener, IAdShowListener adShowListener) {
        //广点通
        rewardVideoAD = new ExpressRewardVideoAD(mContext, pid, new ExpressRewardVideoAdListener() {
            @Override
            public void onAdLoaded() {
                Log.i(TAG, "onAdLoaded");
            }
            @Override
            public void onVideoCached() {
                Log.i(TAG, "onVideoCached");
                adLoadListener.onSuccess(rewardVideoAD);
            }
            @Override
            public void onShow() {
                Log.i(TAG, "onShow");
                adShowListener.onShow();
            }
            @Override
            public void onExpose() {
                Log.i(TAG, "onExpose");
            }
            @Override
            public void onReward(Map<String, Object> map) {
                Log.i(TAG, "onReward");
                adShowListener.onReward();
            }
            @Override
            public void onClick() {
                Log.i(TAG, "onClick");
            }
            @Override
            public void onVideoComplete() {
                Log.i(TAG, "onVideoComplete");
            }
            @Override
            public void onClose() {
                Log.i(TAG, "onClose");
                adShowListener.onClose();
            }
            @Override
            public void onError(AdError adError) {
                Log.i(TAG, "onError:" + adError.getErrorMsg());
                adLoadListener.onError(adError.getErrorMsg());
            }
        });
        rewardVideoAD.loadAD();
    }
    /**
     * 渲染模板和填充广告
     *
     * @param activity
     * @param ad
     * @param showListener
     */
    public static void showAd(Activity activity, final RewardVideoAdContainer ad, RewardVideoAdManager.IAdShowListener showListener) {
        if (activity == null)
            return;
        if (ad == null) {//广告为空
            return;
        }
        if (ad.getCsj() != null) {
            ad.getCsj().setRewardAdInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() {
                //广告展示回调
                @Override
                public void onAdShow() {
                    Log.i(TAG, "onAdShow");
                    showListener.onShow();
                }
                //下载回调
                @Override
                public void onAdVideoBarClick() {
                    Log.i(TAG, "onAdVideoBarClick");
                }
                //广告关闭
                @Override
                public void onAdClose() {
                    Log.i(TAG, "onAdClose");
                    showListener.onClose();
                }
                //视频播放完成回调
                @Override
                public void onVideoComplete() {
                    Log.i(TAG, "onVideoComplete");
                }
                @Override
                public void onVideoError() {
                    Log.i(TAG, "onVideoError");
                    showListener.onError("onVideoError");
                }
                //奖励验证回调
                //rewardVerify:是否有效,rewardAmount:奖励梳理,rewardName:奖励名称,code:错误码,msg:错误信息
                @Override
                public void onRewardVerify(boolean rewardVerify, int rewardAmount, String rewardName, int code, String msg) {
                    Log.i(TAG, "onRewardVerify");
                    Log.i(TAG, "rewardVerify:" + rewardVerify);
                    Log.i(TAG, "rewardAmount:" + rewardAmount);
                    Log.i(TAG, "rewardName:" + rewardName);
                    Log.i(TAG, "code:" + code);
                    Log.i(TAG, "msg:" + msg);
                    if (rewardVerify) {
                        showListener.onReward();
                    }
                }
                //跳过视频播放回调
                @Override
                public void onSkippedVideo() {
                    Log.i(TAG, "onSkippedVideo");
                }
            });
            ad.getCsj().showRewardVideoAd(activity, TTAdConstant.RitScenes.CUSTOMIZE_SCENES, "scenes_test");
            ad.setCsj(null);
        } else if (ad.getGdt2() != null) {
            // 展示广告
            VideoAdValidity validity = ad.getGdt2().checkValidity();
            switch (validity) {
                case SHOWED:
                    if (showListener != null)
                        showListener.onError("广告已经展示过!");
                    return;
                // 在视频缓存成功后展示,以省去用户的等待时间,提升用户体验
                case NONE_CACHE:
                    if (showListener != null)
                        showListener.onError("广告素材未缓存成功!");
                    return;
                case OVERDUE:
                    if (showListener != null)
                        showListener.onError("广告已经过期!");
                    return;
                case VALID:
                    // 有效广告
                    break;
            }
            // 在视频缓存成功后展示,以省去用户的等待时间,提升用户体验
            ad.getGdt2().showAD(null);
        }
    }
    interface IGDTAdLoadListener {
        public void onSuccess(List<NativeExpressADView> adList);
        public void onSuccess2(List<NativeExpressADData2> adList);
    }
    interface ICSJAdLoadListener {
        public void onSuccess(TTRewardVideoAd ad);
        public void onError(String msg);
    }
    interface IGDT2AdLoadListener {
        public void onSuccess(ExpressRewardVideoAD rewardVideoAD);
        public void onError(String msg);
    }
    public interface IAdLoadListener {
        public void onSuccess(RewardVideoAdContainer ad);
        public void onError(String msg);
    }
    public interface IAdShowListener {
        //展示
        public void onShow();
        //奖励发放
        public void onReward();
        public void onError(String msg);
        public void onClose();
    }
    public interface IAdEventListener {
        public void closeAd(ExpressAdContainer ad);
    }
}
BuWanVideo/src/com/weikou/beibeivideo/util/ui/ToastUtil.java
New file
@@ -0,0 +1,19 @@
package com.weikou.beibeivideo.util.ui;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.widget.Toast;
public class ToastUtil {
    public static void showMiddleToast(Context context, View view, int duration) {
        Toast toast = new Toast(context);
        toast.setView(view);
        toast.setDuration(duration);
        toast.setGravity(Gravity.CENTER,0,0);
        toast.show();
    }
}
library-GDTSDK/build.gradle
@@ -3,7 +3,7 @@
dependencies {
    api fileTree(include: '*.jar', dir: 'libs')
    api 'com.android.support:support-v4:27.1.1'
    api files('libs/GDTSDK.unionNoPlugin.4.270.1140.aar')
    api files('libs/GDTSDK.unionNormal.4.333.1203.aar')
}
android {
library-GDTSDK/libs/GDTSDK.unionNoPlugin.4.270.1140.aar
Binary files differ
library-GDTSDK/libs/GDTSDK.unionNormal.4.333.1203.aar
Binary files differ
library-common/src/com/lcjian/library/RetainViewFragment.java
@@ -1,5 +1,6 @@
package com.lcjian.library;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
@@ -10,6 +11,8 @@
    private View mContentView;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {