Skip to content

Commit

Permalink
v2.4.4 (#97)
Browse files Browse the repository at this point in the history
* Removed all content from res directory under MuxExoPlayer. (#92)

* Added test for playback end events and view end event. (#94)

* Reformat code with Google Java style (#88)

* Reformat code with Google Java style

* Additional reformatting

* Add 'Contributing' section to README with info on formatting

* Restore imports of NonNullApi

* Upgrade MuxCore to 6.2.0 (#96)

* Bump version to 2.4.4, update release notes.

Co-authored-by: Tomislav Kordic <[email protected]>
  • Loading branch information
skidder and tomkordic authored Mar 12, 2021
1 parent 811cf6a commit 5a88550
Show file tree
Hide file tree
Showing 107 changed files with 7,211 additions and 6,534 deletions.
4 changes: 2 additions & 2 deletions MuxExoPlayer/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ android {
defaultConfig {
minSdkVersion project.ext.minSdkVersion
targetSdkVersion project.ext.targetSdkVersion
versionCode 14
versionName "2.4.3"
versionCode 15
versionName "2.4.4"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

Expand Down
Binary file modified MuxExoPlayer/libs/MuxCore.jar
Binary file not shown.
1 change: 0 additions & 1 deletion MuxExoPlayer/libs/version-v6.1.0

This file was deleted.

1 change: 1 addition & 0 deletions MuxExoPlayer/libs/version-v6.2.0
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
v6.2.0
Original file line number Diff line number Diff line change
Expand Up @@ -16,106 +16,107 @@
import com.mux.stats.sdk.core.model.ViewData;

public class AdsImaSDKListener implements AdErrorEvent.AdErrorListener, AdEvent.AdEventListener {
private MuxBaseExoPlayer exoPlayerListener;
private boolean sendPlayOnStarted = false;

public AdsImaSDKListener(MuxBaseExoPlayer listener) {
exoPlayerListener = listener;
}
private final MuxBaseExoPlayer exoPlayerListener;
private boolean sendPlayOnStarted = false;

@Override
public void onAdError(AdErrorEvent adErrorEvent) {
if (exoPlayerListener != null) {
PlaybackEvent event = new com.mux.stats.sdk.core.events.playback.AdErrorEvent(null);
setupAdViewData(event, null);
exoPlayerListener.dispatch(event);
}
}
public AdsImaSDKListener(MuxBaseExoPlayer listener) {
exoPlayerListener = listener;
}

private void setupAdViewData(PlaybackEvent event, Ad ad) {
ViewData viewData = new ViewData();
if (exoPlayerListener.getCurrentPosition() == 0) {
if (ad != null) {
viewData.setViewPrerollAdId(ad.getAdId());
viewData.setViewPrerollCreativeId(ad.getCreativeId());
}
}
event.setViewData(viewData);
@Override
public void onAdError(AdErrorEvent adErrorEvent) {
if (exoPlayerListener != null) {
PlaybackEvent event = new com.mux.stats.sdk.core.events.playback.AdErrorEvent(null);
setupAdViewData(event, null);
exoPlayerListener.dispatch(event);
}
}

@Override
public void onAdEvent(AdEvent adEvent) {
if (exoPlayerListener != null) {
PlaybackEvent event = null;
Ad ad = adEvent.getAd();
switch (adEvent.getType()) {
// Cases sorted in calling sequence
case LOADED:
// There is nothing needed here, for now. It is unclear what this event
// actually correlates to with regards to VAST _AND_ VMAP responses.
break;
case CONTENT_PAUSE_REQUESTED:
// Send pause event if we are currently playing or preparing to play content
if (exoPlayerListener.getState() == MuxBaseExoPlayer.PlayerState.PLAY ||
exoPlayerListener.getState() == MuxBaseExoPlayer.PlayerState.PLAYING) {
exoPlayerListener.pause();
}
exoPlayerListener.setState(MuxBaseExoPlayer.PlayerState.PLAYING_ADS);
dispatchAdPlaybackEvent(new AdBreakStartEvent(null), ad);
dispatchAdPlaybackEvent(new AdPlayEvent(null), ad);
sendPlayOnStarted = false;
break;
case STARTED:
// On the first STARTED, do not send AdPlay, as it was handled in
// CONTENT_PAUSE_REQUESTED
if (sendPlayOnStarted) {
dispatchAdPlaybackEvent(new AdPlayEvent(null), ad);
} else {
sendPlayOnStarted = true;
}
dispatchAdPlaybackEvent(new AdPlayingEvent(null), ad);
break;
case FIRST_QUARTILE:
dispatchAdPlaybackEvent(new AdFirstQuartileEvent(null), ad);
break;
case MIDPOINT:
dispatchAdPlaybackEvent(new AdMidpointEvent(null), ad);
break;
case THIRD_QUARTILE:
dispatchAdPlaybackEvent(new AdThirdQuartileEvent(null), ad);
break;
case COMPLETED:
dispatchAdPlaybackEvent(new AdEndedEvent(null), ad);
break;
case CONTENT_RESUME_REQUESTED:
// End the ad break, and then toggle playback state to ensure that
// we get a play/playing after the ads.
dispatchAdPlaybackEvent(new AdBreakEndEvent(null), ad);
if (exoPlayerListener.player != null && exoPlayerListener.player.get() != null) {
exoPlayerListener.player.get().setPlayWhenReady(false);
exoPlayerListener.setState(MuxBaseExoPlayer.PlayerState.FINISHED_PLAYING_ADS);
exoPlayerListener.player.get().setPlayWhenReady(true);
}
break;
case PAUSED:
dispatchAdPlaybackEvent(new AdPauseEvent(null), ad);
break;
case RESUMED:
dispatchAdPlaybackEvent(new AdPlayEvent(null), ad);
dispatchAdPlaybackEvent(new AdPlayingEvent(null), ad);
break;
case ALL_ADS_COMPLETED:
// Nothing to do here, as this depends on VAST vs VMAP and is not
// consistent between the two.
break;
default:
return;
}
}
private void setupAdViewData(PlaybackEvent event, Ad ad) {
ViewData viewData = new ViewData();
if (exoPlayerListener.getCurrentPosition() == 0) {
if (ad != null) {
viewData.setViewPrerollAdId(ad.getAdId());
viewData.setViewPrerollCreativeId(ad.getCreativeId());
}
}
event.setViewData(viewData);
}

private void dispatchAdPlaybackEvent(PlaybackEvent event, Ad ad) {
setupAdViewData(event, ad);
exoPlayerListener.dispatch(event);
@Override
public void onAdEvent(AdEvent adEvent) {
if (exoPlayerListener != null) {
PlaybackEvent event = null;
Ad ad = adEvent.getAd();
switch (adEvent.getType()) {
// Cases sorted in calling sequence
case LOADED:
// There is nothing needed here, for now. It is unclear what this event
// actually correlates to with regards to VAST _AND_ VMAP responses.
break;
case CONTENT_PAUSE_REQUESTED:
// Send pause event if we are currently playing or preparing to play content
if (exoPlayerListener.getState() == MuxBaseExoPlayer.PlayerState.PLAY ||
exoPlayerListener.getState() == MuxBaseExoPlayer.PlayerState.PLAYING) {
exoPlayerListener.pause();
}
exoPlayerListener.setState(MuxBaseExoPlayer.PlayerState.PLAYING_ADS);
dispatchAdPlaybackEvent(new AdBreakStartEvent(null), ad);
dispatchAdPlaybackEvent(new AdPlayEvent(null), ad);
sendPlayOnStarted = false;
break;
case STARTED:
// On the first STARTED, do not send AdPlay, as it was handled in
// CONTENT_PAUSE_REQUESTED
if (sendPlayOnStarted) {
dispatchAdPlaybackEvent(new AdPlayEvent(null), ad);
} else {
sendPlayOnStarted = true;
}
dispatchAdPlaybackEvent(new AdPlayingEvent(null), ad);
break;
case FIRST_QUARTILE:
dispatchAdPlaybackEvent(new AdFirstQuartileEvent(null), ad);
break;
case MIDPOINT:
dispatchAdPlaybackEvent(new AdMidpointEvent(null), ad);
break;
case THIRD_QUARTILE:
dispatchAdPlaybackEvent(new AdThirdQuartileEvent(null), ad);
break;
case COMPLETED:
dispatchAdPlaybackEvent(new AdEndedEvent(null), ad);
break;
case CONTENT_RESUME_REQUESTED:
// End the ad break, and then toggle playback state to ensure that
// we get a play/playing after the ads.
dispatchAdPlaybackEvent(new AdBreakEndEvent(null), ad);
if (exoPlayerListener.player != null && exoPlayerListener.player.get() != null) {
exoPlayerListener.player.get().setPlayWhenReady(false);
exoPlayerListener.setState(MuxBaseExoPlayer.PlayerState.FINISHED_PLAYING_ADS);
exoPlayerListener.player.get().setPlayWhenReady(true);
}
break;
case PAUSED:
dispatchAdPlaybackEvent(new AdPauseEvent(null), ad);
break;
case RESUMED:
dispatchAdPlaybackEvent(new AdPlayEvent(null), ad);
dispatchAdPlaybackEvent(new AdPlayingEvent(null), ad);
break;
case ALL_ADS_COMPLETED:
// Nothing to do here, as this depends on VAST vs VMAP and is not
// consistent between the two.
break;
default:
return;
}
}
}

private void dispatchAdPlaybackEvent(PlaybackEvent event, Ad ad) {
setupAdViewData(event, ad);
exoPlayerListener.dispatch(event);
}
}
Loading

0 comments on commit 5a88550

Please sign in to comment.