Commit 41192ee0 by andrewlewis Committed by kim-vde

Allow apps to add a VideoAdPlayerCallback

Issue: #7944
PiperOrigin-RevId: 335012643
parent 067712f5
...@@ -42,6 +42,8 @@ ...@@ -42,6 +42,8 @@
* IMA extension: * IMA extension:
* Fix position reporting after fetch errors * Fix position reporting after fetch errors
([#7956](https://github.com/google/ExoPlayer/issues/7956)). ([#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) ### ### 2.12.0 (2020-09-11) ###
......
...@@ -125,6 +125,7 @@ public final class ImaAdsLoader ...@@ -125,6 +125,7 @@ public final class ImaAdsLoader
@Nullable private ImaSdkSettings imaSdkSettings; @Nullable private ImaSdkSettings imaSdkSettings;
@Nullable private AdErrorListener adErrorListener; @Nullable private AdErrorListener adErrorListener;
@Nullable private AdEventListener adEventListener; @Nullable private AdEventListener adEventListener;
@Nullable private VideoAdPlayer.VideoAdPlayerCallback videoAdPlayerCallback;
@Nullable private Set<UiElement> adUiElements; @Nullable private Set<UiElement> adUiElements;
@Nullable private Collection<CompanionAdSlot> companionAdSlots; @Nullable private Collection<CompanionAdSlot> companionAdSlots;
private long adPreloadTimeoutMs; private long adPreloadTimeoutMs;
...@@ -191,6 +192,22 @@ public final class ImaAdsLoader ...@@ -191,6 +192,22 @@ public final class ImaAdsLoader
} }
/** /**
* 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. * Sets the ad UI elements to be rendered by the IMA SDK.
* *
* @param adUiElements The ad UI elements to be rendered by the IMA SDK. * @param adUiElements The ad UI elements to be rendered by the IMA SDK.
...@@ -524,6 +541,9 @@ public final class ImaAdsLoader ...@@ -524,6 +541,9 @@ public final class ImaAdsLoader
handler = Util.createHandler(getImaLooper(), /* callback= */ null); handler = Util.createHandler(getImaLooper(), /* callback= */ null);
componentListener = new ComponentListener(); componentListener = new ComponentListener();
adCallbacks = new ArrayList<>(/* initialCapacity= */ 1); adCallbacks = new ArrayList<>(/* initialCapacity= */ 1);
if (builder.videoAdPlayerCallback != null) {
adCallbacks.add(builder.videoAdPlayerCallback);
}
updateAdProgressRunnable = this::updateAdProgress; updateAdProgressRunnable = this::updateAdProgress;
adInfoByAdMediaInfo = HashBiMap.create(); adInfoByAdMediaInfo = HashBiMap.create();
supportedMimeTypes = Collections.emptyList(); supportedMimeTypes = Collections.emptyList();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment