@Override
public void onStateChanged(boolean playWhenReady, int playbackState) {
super.onStateChanged(playWhenReady, playbackState);
switch (playbackState) {
case ExoPlayer.STATE_READY:
if (playWhenReady) {
for (VideoAdPlayer.VideoAdPlayerCallback callback : mAdCallbacks) {
L.g(TAG, "callback.onPlay()");
callback.onPlay();
}
} else {
for (VideoAdPlayer.VideoAdPlayerCallback callback : mAdCallbacks) {
L.g(TAG, "callback.onPause()");
callback.onPause();
}
}
break;
case ExoPlayer.STATE_ENDED:
for (VideoAdPlayer.VideoAdPlayerCallback callback : mAdCallbacks) {
L.g(TAG, "callback.onEnded()");
callback.onEnded();
}
break;
}
}
@Override
public void onError(Exception e) {
super.onError(e);
for (VideoAdPlayer.VideoAdPlayerCallback callback : mAdCallbacks) {
L.g(TAG, "callback.onError()");
callback.onError();
}
}
private VideoAdPlayer mIMAAdPlayer = new VideoAdPlayer() {
@Override
public void loadAd(String url) {
L.g(TAG, "AdPlayer.loadAd: " + url);
if (mAdsManager == null) {
L.g(TAG, "AdPlayer.loadAd: mAdsManager null");
return;
}
mAdPlayerListener.onAdPlaying();
RendererBuilder rendererBuilder = getRendererBuilder(StreamType.UNKNOWN, url, null);
if (rendererBuilder == null) {
for (VideoAdPlayer.VideoAdPlayerCallback callback : mAdCallbacks) {
callback.onError();
}
} else {
initExoPlayer(rendererBuilder);
prepareExoPlayer();
}
}
@Override
public void playAd() {
L.g(TAG, "AdPlayer.playAd");
if (mAdsManager == null || getExoPlayer() == null) {
L.g(TAG, "AdPlayer.playAd: mAdsManager null");
return;
}
if (mAdUiContainer != null) {
mAdUiContainer.requestFocus();
}
getExoPlayer().setPlayWhenReady(true);
}
@Override
public void stopAd() {
L.g(TAG, "AdPlayer.stopAd");
if (getExoPlayer() != null) {
getExoPlayer().stop();
}
}
@Override
public void pauseAd() {
L.g(TAG, "AdPlayer.pauseAd");
if (getExoPlayer() != null) {
getExoPlayer().setPlayWhenReady(false);
}
}
@Override
public void resumeAd() {
L.g(TAG, "AdPlayer.resumeAd");
playAd();
}
@Override
public void addCallback(VideoAdPlayerCallback videoAdPlayerCallback) {
if (videoAdPlayerCallback != null) {
mAdCallbacks.add(videoAdPlayerCallback);
}
}
@Override
public void removeCallback(VideoAdPlayerCallback videoAdPlayerCallback) {
if (videoAdPlayerCallback != null) {
mAdCallbacks.remove(videoAdPlayerCallback);
}
}
@Override
public VideoProgressUpdate getAdProgress() {
ExoPlayerWrapper player = getExoPlayer();
if (player == null) {
return VideoProgressUpdate.VIDEO_TIME_NOT_READY;
} else {
return new VideoProgressUpdate(player.getCurrentPosition(), player.getDuration());
}
}
};
private class VpAdEventListener implements AdEvent.AdEventListener {
@Override
public void onAdEvent(AdEvent adEvent) {
L.g(TAG, "AD onAdEvent: " + adEvent.getType());
switch (adEvent.getType()) {
case LOADED:
if (mAdsManager != null) {
mAdsManager.start();
}
break;
case CONTENT_PAUSE_REQUESTED:
break;
case CONTENT_RESUME_REQUESTED:
break;
case STARTED:
mTrackingNrOfAds++;
break;
case COMPLETED:
break;
case ALL_ADS_COMPLETED:
// Stop & hide ad
releaseAdPlayer();
mAdPlayerListener.onAdFinished();
break;
case PAUSED:
break;
case RESUMED:
break;
case SKIPPED:
break;
case LOG:
break;
default:
break;
}
}
}