Allow apps to add a VideoAdPlayerCallback

Issue: #7944
PiperOrigin-RevId: 335012643
This commit is contained in:
andrewlewis 2020-10-02 14:03:37 +01:00 committed by Oliver Woodman
parent 13d8860221
commit 88abe26ec3
2 changed files with 22 additions and 0 deletions

View File

@ -36,6 +36,8 @@
* IMA extension:
* Fix position reporting after fetch errors
([#7956](https://github.com/google/ExoPlayer/issues/7956)).
* Allow apps to specify a `VideoAdPlayerCallback`
([#7944](https://github.com/google/ExoPlayer/issues/7944)).
### 2.12.0 (2020-09-11) ###

View File

@ -125,6 +125,7 @@ public final class ImaAdsLoader
@Nullable private ImaSdkSettings imaSdkSettings;
@Nullable private AdErrorListener adErrorListener;
@Nullable private AdEventListener adEventListener;
@Nullable private VideoAdPlayer.VideoAdPlayerCallback videoAdPlayerCallback;
@Nullable private Set<UiElement> adUiElements;
@Nullable private Collection<CompanionAdSlot> companionAdSlots;
private long adPreloadTimeoutMs;
@ -190,6 +191,22 @@ public final class ImaAdsLoader
return this;
}
/**
* Sets a callback to receive video ad player events. Note that these events are handled
* internally by the IMA SDK and this ads loader. For analytics and diagnostics, new
* implementations should generally use events from the top-level {@link Player} listeners
* instead of setting a callback via this method.
*
* @param videoAdPlayerCallback The callback to receive video ad player events.
* @return This builder, for convenience.
* @see com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback
*/
public Builder setVideoAdPlayerCallback(
VideoAdPlayer.VideoAdPlayerCallback videoAdPlayerCallback) {
this.videoAdPlayerCallback = checkNotNull(videoAdPlayerCallback);
return this;
}
/**
* Sets the ad UI elements to be rendered by the IMA SDK.
*
@ -524,6 +541,9 @@ public final class ImaAdsLoader
handler = Util.createHandler(getImaLooper(), /* callback= */ null);
componentListener = new ComponentListener();
adCallbacks = new ArrayList<>(/* initialCapacity= */ 1);
if (builder.videoAdPlayerCallback != null) {
adCallbacks.add(builder.videoAdPlayerCallback);
}
updateAdProgressRunnable = this::updateAdProgress;
adInfoByAdMediaInfo = HashBiMap.create();
supportedMimeTypes = Collections.emptyList();