| | |
| | | import android.content.IntentFilter; |
| | | import android.content.pm.ActivityInfo; |
| | | import android.content.res.Configuration; |
| | | import android.graphics.Bitmap; |
| | | import android.media.MediaPlayer; |
| | | import android.net.ConnectivityManager; |
| | | import android.net.NetworkInfo; |
| | |
| | | import android.view.View; |
| | | import android.view.View.OnClickListener; |
| | | import android.view.ViewGroup; |
| | | import android.widget.Button; |
| | | import android.widget.FrameLayout; |
| | | import android.widget.ImageView; |
| | | import android.widget.LinearLayout; |
| | | import android.widget.Toast; |
| | | |
| | | import com.androidquery.AQuery; |
| | | import com.androidquery.callback.AjaxStatus; |
| | | import com.androidquery.callback.BitmapAjaxCallback; |
| | | import com.bumptech.glide.Glide; |
| | | import com.fun.xm.Definition; |
| | | import com.fun.xm.FSCallback; |
| | | import com.fun.xm.FSIVideoPlayer; |
| | | import com.fun.xm.FSPlayer; |
| | | import com.fun.xm.FSVideoReqData; |
| | | import com.fun.xm.ad.FSAD; |
| | | import com.fun.xm.ad.FSSRAdData; |
| | | import com.fun.xm.ad.FSThirdAd; |
| | | import com.fun.xm.ad.adloader.FSPreMediaAdLoader; |
| | | import com.fun.xm.ad.adloader.FSSRFeedAdLoader; |
| | | import com.fun.xm.ad.adview.FSFeedAD; |
| | | import com.fun.xm.ad.adview.FSPreMediaView; |
| | | import com.fun.xm.ad.callback.FSFeedAdCallBack; |
| | | import com.fun.xm.ad.callback.FSPreMediaAdCallBack; |
| | | import com.funshion.video.logger.FSLogcat; |
| | | import com.funshion.video.util.FSError; |
| | |
| | | import com.lcjian.library.video.VideoEpisode; |
| | | import com.lcjian.library.video.VideoPlayerController; |
| | | import com.lcjian.library.widget.RatioLayout; |
| | | import com.qq.e.ads.cfg.VideoOption; |
| | | import com.qq.e.ads.nativ.MediaView; |
| | | import com.qq.e.ads.nativ.NativeADMediaListener; |
| | | import com.qq.e.ads.nativ.NativeUnifiedADData; |
| | | import com.qq.e.comm.constants.AdPatternType; |
| | | import com.qq.e.comm.util.AdError; |
| | | import com.weikou.beibeivideo.BasicTextHttpResponseHandler; |
| | | import com.weikou.beibeivideo.BeibeiVideoAPI; |
| | | import com.weikou.beibeivideo.BeibeiVideoApplication; |
| | |
| | | import com.weikou.beibeivideo.entity.VideoDetailInfo; |
| | | import com.weikou.beibeivideo.entity.VideoInfo; |
| | | import com.weikou.beibeivideo.entity.VideoResource; |
| | | import com.weikou.beibeivideo.entity.ad.PlayVideoPreADSetting; |
| | | import com.weikou.beibeivideo.entity.video.FunshionPlayInfo; |
| | | import com.weikou.beibeivideo.ui.ad.PlayVideoPreADFragment; |
| | | import com.weikou.beibeivideo.util.DimenUtils; |
| | | import com.weikou.beibeivideo.util.FunshionConstant; |
| | | import com.weikou.beibeivideo.util.UserUtil; |
| | |
| | | private FrameLayout fl_container, fl_ad; |
| | | |
| | | //风行广告加载器 |
| | | private FSPreMediaAdLoader fsPreMediaAdLoader; |
| | | private FSSRFeedAdLoader fssrFeedAdLoader; |
| | | |
| | | private FSPreMediaView mFSVideoAD; |
| | | |
| | |
| | | |
| | | private void initAd() { |
| | | FSAD.init(getContext().getApplicationContext(), Collections.singletonList(FunshionConstant.AD_ADP), FunshionConstant.AD_PARTENER, FunshionConstant.AD_TOKEN, FunshionConstant.AD_CHANNEL, FunshionConstant.AD_PRE_DOWNLOAD_CHANNEL); |
| | | fsPreMediaAdLoader = new FSPreMediaAdLoader(getContext(), FunshionConstant.AD_CHANNEL); |
| | | fssrFeedAdLoader = new FSSRFeedAdLoader(getContext(), FunshionConstant.AD_CHANNEL); |
| | | } |
| | | |
| | | private void loadAD() { |
| | |
| | | int width = fl_ad.getWidth(); |
| | | int height = fl_ad.getHeight(); |
| | | Log.i(TAG, String.format("fl_ad: width:%s height:%s", width, height)); |
| | | fsPreMediaAdLoader.loadAD(adid, "", width, height, true, false, new FSPreMediaAdCallBack() { |
| | | @Override |
| | | public void onCreate(FSPreMediaView fsadView) { |
| | | mFSVideoAD = fsadView; |
| | | fl_ad.removeAllViews(); |
| | | fl_ad.addView(fsadView); |
| | | } |
| | | |
| | | @Override |
| | | public void onCreateThirdAD(List<FSThirdAd> fsThirdAd) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onClose() { |
| | | adShowFinish(); |
| | | } |
| | | |
| | | @Override |
| | | public void onADLoad() { |
| | | if (null != mFSVideoAD) { |
| | | mFSVideoAD.showAD(); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoComplete() { |
| | | adShowFinish(); |
| | | } |
| | | |
| | | @Override |
| | | public void onADShow() { |
| | | |
| | | } |
| | | fssrFeedAdLoader.loadAD(adid, "", width, height, true, false, new FSFeedAdCallBack() { |
| | | |
| | | @Override |
| | | public void onClick() { |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void onAdLoadedFail(int param1Int, String param1String) { |
| | | Log.v(TAG, "onAdLoadedFail param1Int:" + param1Int + " MSG:" + param1String); |
| | | adShowFinish(); |
| | | public void onAdLoadedFail(int i, String s) { |
| | | Log.i(TAG,"onAdLoadedFail:"+s); |
| | | } |
| | | |
| | | @Override |
| | | public void onCreate(FSFeedAD fsADView) { |
| | | Log.i(TAG,"onCreate"); |
| | | NativeUnifiedADData gdtad = fsADView.getAd(); |
| | | FSSRAdData fsad = fsADView.getFSAd(); |
| | | if (null != gdtad) { |
| | | //广点通数据自渲染 |
| | | initGDTSelfRenderView(fsADView, gdtad); |
| | | } |
| | | if (null != fsad) { |
| | | //风行数据自渲染 |
| | | initFSSelfRenderView(fsADView, fsad); |
| | | } |
| | | if (fsADView.getParent() != null) { |
| | | ((ViewGroup) fsADView.getParent()).removeAllViews(); |
| | | } |
| | | fl_ad.removeAllViews(); |
| | | fl_ad.addView(fsADView); |
| | | fsADView.render(); |
| | | } |
| | | |
| | | @Override |
| | | public void onCreateThirdAD(List<FSThirdAd> list) { |
| | | Log.i(TAG,"onCreateThirdAD"); |
| | | } |
| | | |
| | | @Override |
| | | public void onADShow() { |
| | | Log.i(TAG,"onADShow"); |
| | | } |
| | | }); |
| | | |
| | | |
| | | } |
| | | |
| | | private void initFSSelfRenderView(final FSFeedAD fsADView, FSSRAdData fsad) { |
| | | if (fsad.isImage()) { |
| | | ImageView imageView = new ImageView(getContext()); |
| | | Glide.with(this).load(fsad.getMaterial()).into(imageView); |
| | | List<View> clickableViews = new ArrayList<>(); |
| | | clickableViews.add(imageView); |
| | | fsADView.bindAdToView(imageView, clickableViews, null); |
| | | } else if (fsad.isVideo()) { |
| | | MediaView mediaView = new MediaView(getContext()); |
| | | fsADView.bindMediaView(mediaView, null, null); |
| | | |
| | | final Button button = new Button(getContext()); |
| | | button.setText("打开声音"); |
| | | button.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | if (fsADView.isMute()) { |
| | | fsADView.setMute(false); |
| | | button.setText("关闭声音"); |
| | | } else { |
| | | fsADView.setMute(true); |
| | | button.setText("打开声音"); |
| | | } |
| | | } |
| | | }); |
| | | List<View> clickableViews = new ArrayList<>(); |
| | | fsADView.bindAdToView(button, clickableViews, null); |
| | | } |
| | | } |
| | | |
| | | |
| | | //广点通广告控件 |
| | | protected AQuery mAQuery; |
| | | protected Button mDownloadButton; |
| | | protected MediaView mMediaView; |
| | | protected ImageView mImagePoster; |
| | | protected LinearLayout mNative3imgAdContainer; |
| | | |
| | | //自渲染view |
| | | private void initGDTSelfRenderView(FSFeedAD fsADView, NativeUnifiedADData ad) { |
| | | View mContainer = getLayoutInflater().inflate(R.layout.sr_gdt_ad_view, null); |
| | | mDownloadButton = mContainer.findViewById(R.id.btn_download); |
| | | mMediaView = mContainer.findViewById(R.id.gdt_media_view); |
| | | mImagePoster = mContainer.findViewById(R.id.img_poster); |
| | | mNative3imgAdContainer = mContainer.findViewById(R.id.native_3img_ad_container); |
| | | mAQuery = new AQuery(mContainer); |
| | | int patternType = ad.getAdPatternType(); |
| | | if (patternType == AdPatternType.NATIVE_VIDEO) { |
| | | ViewGroup.LayoutParams params = mContainer.getLayoutParams(); |
| | | if (null == params) { |
| | | params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); |
| | | } else { |
| | | params.height = FrameLayout.LayoutParams.MATCH_PARENT; |
| | | } |
| | | mContainer.setLayoutParams(params); |
| | | |
| | | } |
| | | if (patternType == AdPatternType.NATIVE_2IMAGE_2TEXT |
| | | || patternType == AdPatternType.NATIVE_VIDEO) { |
| | | mAQuery.id(R.id.img_poster).visibility(View.VISIBLE); |
| | | mAQuery.id(R.id.img_logo).image(ad.getIconUrl(), false, true); |
| | | Log.v(TAG, "Imgurl:" + ad.getImgUrl()); |
| | | mAQuery.id(R.id.img_poster).image(ad.getImgUrl(), false, true, 0, 0, |
| | | new BitmapAjaxCallback() { |
| | | @Override |
| | | protected void callback(String url, ImageView iv, Bitmap bm, AjaxStatus status) { |
| | | if (iv.getVisibility() == View.VISIBLE) { |
| | | iv.setImageBitmap(bm); |
| | | } |
| | | } |
| | | }); |
| | | mAQuery.id(R.id.text_title).textColor(R.color.colorAccent); |
| | | mAQuery.id(R.id.text_title).text(ad.getTitle()); |
| | | mAQuery.id(R.id.text_desc).text(ad.getDesc()); |
| | | } else if (patternType == AdPatternType.NATIVE_3IMAGE) { |
| | | mAQuery.id(R.id.img_1).image(ad.getImgList().get(0), false, true); |
| | | mAQuery.id(R.id.img_2).image(ad.getImgList().get(1), false, true); |
| | | mAQuery.id(R.id.img_3).image(ad.getImgList().get(2), false, true); |
| | | mAQuery.id(R.id.native_3img_title).text(ad.getTitle()); |
| | | mAQuery.id(R.id.native_3img_desc).text(ad.getDesc()); |
| | | } else if (patternType == AdPatternType.NATIVE_1IMAGE_2TEXT) { |
| | | mAQuery.id(R.id.img_logo).image(ad.getImgUrl(), false, true); |
| | | mAQuery.id(R.id.img_poster).clear(); |
| | | mAQuery.id(R.id.text_title).text(ad.getTitle()); |
| | | mAQuery.id(R.id.text_desc).text(ad.getDesc()); |
| | | } |
| | | |
| | | List<View> clickableViews = new ArrayList<>(); |
| | | List<View> customClickableViews = new ArrayList<>(); |
| | | // 所有广告类型,注册mDownloadButton的点击事件 |
| | | clickableViews.add(mDownloadButton); |
| | | if (ad.getAdPatternType() == AdPatternType.NATIVE_2IMAGE_2TEXT || |
| | | ad.getAdPatternType() == AdPatternType.NATIVE_1IMAGE_2TEXT) { |
| | | // 双图双文、单图双文:注册mImagePoster的点击事件 |
| | | clickableViews.add(mImagePoster); |
| | | } else if (ad.getAdPatternType() != AdPatternType.NATIVE_VIDEO) { |
| | | // 三小图广告:注册native_3img_ad_container的点击事件 |
| | | clickableViews.add(mNative3imgAdContainer); |
| | | } |
| | | //作为customClickableViews传入,点击不进入详情页,直接下载或进入落地页,只有视频广告生效, |
| | | // 如果是图文,clickableViews和customClickableViews点击逻辑一致 |
| | | fsADView.bindAdToView(mContainer, clickableViews, mDownloadButton); |
| | | |
| | | if (ad.getAdPatternType() == AdPatternType.NATIVE_VIDEO) { |
| | | // 视频广告,注册mMediaView的点击事件 |
| | | fsADView.post(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | Log.v(TAG, "showAd type video 2"); |
| | | mImagePoster.setVisibility(View.GONE); |
| | | mMediaView.setVisibility(View.VISIBLE); |
| | | // ad.startVideo(); |
| | | } |
| | | }); |
| | | |
| | | VideoOption.Builder builder = new VideoOption.Builder(); |
| | | |
| | | builder.setAutoPlayPolicy(VideoOption.AutoPlayPolicy.ALWAYS); |
| | | builder.setAutoPlayMuted(false); |
| | | builder.setDetailPageMuted(false); |
| | | builder.setNeedCoverImage(true); |
| | | builder.setNeedProgressBar(true); |
| | | builder.setEnableDetailPage(true); |
| | | builder.setEnableUserControl(false); |
| | | VideoOption videoOption = builder.build(); |
| | | fsADView.bindMediaView(mMediaView, videoOption, new NativeADMediaListener() { |
| | | @Override |
| | | public void onVideoInit() { |
| | | Log.d(TAG, "onVideoInit: "); |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoLoading() { |
| | | Log.d(TAG, "onVideoLoading: "); |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoReady() { |
| | | Log.d(TAG, "onVideoReady"); |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoLoaded(int videoDuration) { |
| | | Log.d(TAG, "onVideoLoaded: "); |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoStart() { |
| | | Log.d(TAG, "onVideoStart"); |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoStop() { |
| | | Log.d(TAG, "onVideoStop"); |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoPause() { |
| | | Log.d(TAG, "onVideoPause: "); |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoResume() { |
| | | Log.d(TAG, "onVideoResume: "); |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoClicked() { |
| | | Log.d(TAG, "onVideoClicked"); |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoCompleted() { |
| | | Log.d(TAG, "onVideoCompleted: "); |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoError(AdError error) { |
| | | |
| | | } |
| | | |
| | | }); |
| | | ad.startVideo(); |
| | | } else if (ad.getAdPatternType() == AdPatternType.NATIVE_2IMAGE_2TEXT || |
| | | ad.getAdPatternType() == AdPatternType.NATIVE_1IMAGE_2TEXT) { |
| | | // 双图双文、单图双文:注册mImagePoster的点击事件 |
| | | clickableViews.add(mImagePoster); |
| | | } else { |
| | | // 三小图广告:注册native_3img_ad_container的点击事件 |
| | | clickableViews.add(mNative3imgAdContainer); |
| | | } |
| | | } |
| | | |
| | | |
| | | //广告展示完成 |
| | | private void adShowFinish() { |
| | |
| | | vpc_funshion.setNetworkInfo(networkInfo, false); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |