mirror of
https://github.com/androidx/media.git
synced 2025-05-12 01:59:50 +08:00
Make one ad request in ImaAdsLoader
This fixes an issue where quickly detaching and reattaching the player might cause ads to be requested multiple times with both responses handled. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=177922167
This commit is contained in:
parent
b3ebdaaed3
commit
59f6b059b0
@ -50,6 +50,7 @@ import com.google.android.exoplayer2.source.ads.AdPlaybackState;
|
||||
import com.google.android.exoplayer2.source.ads.AdsLoader;
|
||||
import com.google.android.exoplayer2.util.Assertions;
|
||||
import com.google.android.exoplayer2.util.MimeTypes;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
import java.io.IOException;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
@ -120,6 +121,7 @@ public final class ImaAdsLoader extends Player.DefaultEventListener implements A
|
||||
private final AdDisplayContainer adDisplayContainer;
|
||||
private final com.google.ads.interactivemedia.v3.api.AdsLoader adsLoader;
|
||||
|
||||
private Object pendingAdRequestContext;
|
||||
private List<String> supportedMimeTypes;
|
||||
private EventListener eventListener;
|
||||
private Player player;
|
||||
@ -183,10 +185,6 @@ public final class ImaAdsLoader extends Player.DefaultEventListener implements A
|
||||
* Whether {@link #getContentProgress()} has sent {@link #pendingContentPositionMs} to IMA.
|
||||
*/
|
||||
private boolean sentPendingContentPositionMs;
|
||||
/**
|
||||
* Whether {@link #release()} has been called.
|
||||
*/
|
||||
private boolean released;
|
||||
|
||||
/**
|
||||
* Creates a new IMA ads loader.
|
||||
@ -296,7 +294,7 @@ public final class ImaAdsLoader extends Player.DefaultEventListener implements A
|
||||
|
||||
@Override
|
||||
public void release() {
|
||||
released = true;
|
||||
pendingAdRequestContext = null;
|
||||
if (adsManager != null) {
|
||||
adsManager.destroy();
|
||||
adsManager = null;
|
||||
@ -308,10 +306,11 @@ public final class ImaAdsLoader extends Player.DefaultEventListener implements A
|
||||
@Override
|
||||
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
|
||||
AdsManager adsManager = adsManagerLoadedEvent.getAdsManager();
|
||||
if (released) {
|
||||
if (!Util.areEqual(pendingAdRequestContext, adsManagerLoadedEvent.getUserRequestContext())) {
|
||||
adsManager.destroy();
|
||||
return;
|
||||
}
|
||||
pendingAdRequestContext = null;
|
||||
this.adsManager = adsManager;
|
||||
adsManager.addAdErrorListener(this);
|
||||
adsManager.addAdEventListener(this);
|
||||
@ -403,6 +402,7 @@ public final class ImaAdsLoader extends Player.DefaultEventListener implements A
|
||||
Log.d(TAG, "onAdError " + adErrorEvent);
|
||||
}
|
||||
if (adsManager == null) {
|
||||
pendingAdRequestContext = null;
|
||||
adPlaybackState = new AdPlaybackState(new long[0]);
|
||||
updateAdPlaybackState();
|
||||
}
|
||||
@ -623,10 +623,16 @@ public final class ImaAdsLoader extends Player.DefaultEventListener implements A
|
||||
// Internal methods.
|
||||
|
||||
private void requestAds() {
|
||||
if (pendingAdRequestContext != null) {
|
||||
// Ad request already in flight.
|
||||
return;
|
||||
}
|
||||
pendingAdRequestContext = new Object();
|
||||
AdsRequest request = imaSdkFactory.createAdsRequest();
|
||||
request.setAdTagUrl(adTagUri.toString());
|
||||
request.setAdDisplayContainer(adDisplayContainer);
|
||||
request.setContentProgressProvider(this);
|
||||
request.setUserRequestContext(pendingAdRequestContext);
|
||||
adsLoader.requestAds(request);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user