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.aarBinary files differ
library-GDTSDK/libs/GDTSDK.unionNormal.4.333.1203.aarBinary 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) {