package com.weikou.beibeivideo.ui.ad;
|
|
import android.content.Context;
|
import android.os.Handler;
|
import android.os.Looper;
|
import android.util.Log;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.widget.ImageView;
|
import android.widget.Toast;
|
|
import com.bumptech.glide.Glide;
|
import com.bytedance.sdk.openadsdk.TTAdConstant;
|
import com.bytedance.sdk.openadsdk.TTFeedAd;
|
import com.bytedance.sdk.openadsdk.TTImage;
|
import com.bytedance.sdk.openadsdk.TTNativeAd;
|
|
import java.util.LinkedList;
|
import java.util.List;
|
|
public class StreamAdPlayer {
|
private final static String TAG = StreamAdPlayer.class.getSimpleName();
|
|
private TTHandler mHandler = new TTHandler(Looper.getMainLooper());
|
|
private ViewGroup mAdLayout;
|
private List<TTFeedAd> mAdList;
|
private int mNowPlay = 0;
|
|
private Context mContext;
|
|
private Runnable mPlayNext = new Runnable() {
|
@Override
|
public void run() {
|
mAdLayout.removeAllViews();
|
if (mAdList.size() <= mNowPlay) {
|
return;
|
}
|
TTFeedAd ttFeedAd = mAdList.get(mNowPlay++);
|
OneAd oneAd = getAdView(ttFeedAd);
|
Log.d(TAG, "开始播放 " + ttFeedAd.getDescription() + mNowPlay);
|
mAdLayout.addView(oneAd.adView);
|
mHandler.sendPostDelayed(mPlayNext, (long) (oneAd.duration * 1000));
|
}
|
};
|
|
public OneAd getAdView(TTFeedAd ttFeedAd) {
|
OneAd oneAd = null;
|
|
switch (ttFeedAd.getImageMode()) {
|
case TTAdConstant.IMAGE_MODE_LARGE_IMG:
|
case TTAdConstant.IMAGE_MODE_SMALL_IMG:
|
case TTAdConstant.IMAGE_MODE_GROUP_IMG:
|
case TTAdConstant.IMAGE_MODE_VERTICAL_IMG:
|
oneAd = getImageTypeView(ttFeedAd);
|
break;
|
case TTAdConstant.IMAGE_MODE_VIDEO:
|
case TTAdConstant.IMAGE_MODE_VIDEO_VERTICAL:
|
oneAd = getVideoTypeView(ttFeedAd);
|
break;
|
}
|
return oneAd;
|
}
|
|
public StreamAdPlayer(List<TTFeedAd> adList, ViewGroup mAdLayout) {
|
this.mAdList = adList;
|
this.mAdLayout = mAdLayout;
|
mContext = this.mAdLayout.getContext().getApplicationContext();
|
}
|
|
public OneAd getImageTypeView(TTFeedAd ttFeedAd) {
|
List<TTImage> ttImages = ttFeedAd.getImageList();
|
if (ttImages.size() == 0) {
|
return null;
|
}
|
TTImage ttImage = ttImages.get(0);
|
if (!ttImage.isValid()) {
|
return null;
|
}
|
ImageView imageView = new ImageView(mContext);
|
ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1000);
|
imageView.setLayoutParams(layoutParams);
|
Glide.with(mContext).load(ttImage.getImageUrl()).into(imageView);
|
|
|
List<View> clickViews = new LinkedList<>();
|
clickViews.add(imageView);
|
List<View> creativeClickViews = new LinkedList<>();
|
creativeClickViews.add(imageView);
|
ttFeedAd.registerViewForInteraction(mAdLayout, clickViews, creativeClickViews, new TTNativeAd.AdInteractionListener() {
|
@Override
|
public void onAdClicked(View view, TTNativeAd ad) {
|
if (ad != null) {
|
TToast.show(mContext, "广告" + ad.getTitle() + "被点击");
|
}
|
}
|
|
@Override
|
public void onAdCreativeClick(View view, TTNativeAd ad) {
|
if (ad != null) {
|
TToast.show(mContext, "广告" + ad.getTitle() + "被创意按钮被点击");
|
}
|
}
|
|
@Override
|
public void onAdShow(TTNativeAd ad) {
|
if (ad != null) {
|
TToast.show(mContext, "广告" + ad.getTitle() + "展示");
|
}
|
}
|
});
|
return new OneAd(imageView, ttImage.getDuration());
|
}
|
|
public OneAd getVideoTypeView(TTFeedAd ttFeedAd) {
|
|
View videoView = ttFeedAd.getAdView();
|
|
List<View> clickViews = new LinkedList<>();
|
clickViews.add(ttFeedAd.getAdView());
|
List<View> creativeClickViews = new LinkedList<>();
|
creativeClickViews.add(videoView);
|
ttFeedAd.registerViewForInteraction(mAdLayout, clickViews, creativeClickViews, new TTNativeAd.AdInteractionListener() {
|
@Override
|
public void onAdClicked(View view, TTNativeAd ad) {
|
if (ad != null) {
|
TToast.show(mContext, "广告" + ad.getTitle() + "被点击");
|
}
|
}
|
|
@Override
|
public void onAdCreativeClick(View view, TTNativeAd ad) {
|
if (ad != null) {
|
TToast.show(mContext, "广告" + ad.getTitle() + "被创意按钮被点击");
|
}
|
}
|
|
@Override
|
public void onAdShow(TTNativeAd ad) {
|
if (ad != null) {
|
TToast.show(mContext, "广告" + ad.getTitle() + "展示");
|
}
|
}
|
});
|
return new OneAd(videoView, ttFeedAd.getVideoDuration());
|
}
|
|
public void play() {
|
if (mAdLayout == null) {
|
return;
|
}
|
mAdLayout.removeAllViews();
|
mPlayNext.run();
|
}
|
|
public void clear() {
|
mHandler.clearCallback();
|
}
|
|
public void pauseHandler() {
|
mHandler.postDelayedPause();
|
}
|
|
public void resumeHandler() {
|
mHandler.postDelayedResume();
|
}
|
|
class OneAd {
|
View adView;
|
double duration;
|
|
public OneAd(View adView, double duration) {
|
this.adView = adView;
|
this.duration = duration;
|
}
|
}
|
|
|
static class TTHandler extends Handler {
|
|
private Runnable mRunnable;
|
private long mOldAtTime;
|
private long mRemainTime;
|
|
TTHandler(Looper looper) {
|
super(looper);
|
}
|
|
void postDelayedPause() {
|
mRemainTime = mOldAtTime - System.currentTimeMillis();
|
Log.d(TAG, "TTHandler pause remainTime: " + mRemainTime);
|
removeCallbacks(mRunnable);
|
}
|
|
void postDelayedResume() {
|
if (mRemainTime > 0) {
|
Log.d(TAG, "TTHandler resume remainTime: " + mRemainTime);
|
sendPostDelayed(mRunnable, mRemainTime);
|
}
|
}
|
|
void sendPostDelayed(Runnable r, long delayMillis) {
|
mRemainTime = 0;
|
mRunnable = r;
|
mOldAtTime = System.currentTimeMillis() + delayMillis;
|
postDelayed(mRunnable, delayMillis);
|
}
|
|
void clearCallback() {
|
mOldAtTime = 0;
|
mRemainTime = 0;
|
removeCallbacks(mRunnable);
|
}
|
|
}
|
|
static class TToast {
|
|
public static void show(Context context, String content) {
|
Toast.makeText(context, content, Toast.LENGTH_SHORT).show();
|
|
}
|
|
}
|
|
}
|