mirror of
https://github.com/androidx/media.git
synced 2025-05-15 19:49:50 +08:00
Handle errors in all VideoAdPlayer callbacks
Some but not all VideoAdPlayer callbacks from the IMA SDK included defensive handling of unexpected cases. Add the remaining ones. Issue: #7492 PiperOrigin-RevId: 316082651
This commit is contained in:
parent
c5144dc777
commit
5a88e0bc1d
@ -208,7 +208,10 @@
|
||||
([#6922](https://github.com/google/ExoPlayer/pull/6922)).
|
||||
* Cast extension: Implement playlist API and deprecate the old queue
|
||||
manipulation API.
|
||||
* IMA extension: Add option to skip ads before the start position.
|
||||
* IMA extension:
|
||||
* Add option to skip ads before the start position.
|
||||
* Catch unexpected errors in `stopAd` to avoid a crash
|
||||
([#7492](https://github.com/google/ExoPlayer/issues/7492)).
|
||||
* Demo app: Retain previous position in list of samples.
|
||||
* Add Guava dependency.
|
||||
|
||||
|
@ -916,32 +916,36 @@ public final class ImaAdsLoader
|
||||
Log.w(TAG, "Unexpected playAd without stopAd");
|
||||
}
|
||||
|
||||
if (imaAdState == IMA_AD_STATE_NONE) {
|
||||
// IMA is requesting to play the ad, so stop faking the content position.
|
||||
fakeContentProgressElapsedRealtimeMs = C.TIME_UNSET;
|
||||
fakeContentProgressOffsetMs = C.TIME_UNSET;
|
||||
imaAdState = IMA_AD_STATE_PLAYING;
|
||||
imaAdMediaInfo = adMediaInfo;
|
||||
imaAdInfo = Assertions.checkNotNull(adInfoByAdMediaInfo.get(adMediaInfo));
|
||||
for (int i = 0; i < adCallbacks.size(); i++) {
|
||||
adCallbacks.get(i).onPlay(adMediaInfo);
|
||||
}
|
||||
if (pendingAdPrepareErrorAdInfo != null && pendingAdPrepareErrorAdInfo.equals(imaAdInfo)) {
|
||||
pendingAdPrepareErrorAdInfo = null;
|
||||
try {
|
||||
if (imaAdState == IMA_AD_STATE_NONE) {
|
||||
// IMA is requesting to play the ad, so stop faking the content position.
|
||||
fakeContentProgressElapsedRealtimeMs = C.TIME_UNSET;
|
||||
fakeContentProgressOffsetMs = C.TIME_UNSET;
|
||||
imaAdState = IMA_AD_STATE_PLAYING;
|
||||
imaAdMediaInfo = adMediaInfo;
|
||||
imaAdInfo = Assertions.checkNotNull(adInfoByAdMediaInfo.get(adMediaInfo));
|
||||
for (int i = 0; i < adCallbacks.size(); i++) {
|
||||
adCallbacks.get(i).onError(adMediaInfo);
|
||||
adCallbacks.get(i).onPlay(adMediaInfo);
|
||||
}
|
||||
if (pendingAdPrepareErrorAdInfo != null && pendingAdPrepareErrorAdInfo.equals(imaAdInfo)) {
|
||||
pendingAdPrepareErrorAdInfo = null;
|
||||
for (int i = 0; i < adCallbacks.size(); i++) {
|
||||
adCallbacks.get(i).onError(adMediaInfo);
|
||||
}
|
||||
}
|
||||
updateAdProgress();
|
||||
} else {
|
||||
imaAdState = IMA_AD_STATE_PLAYING;
|
||||
Assertions.checkState(adMediaInfo.equals(imaAdMediaInfo));
|
||||
for (int i = 0; i < adCallbacks.size(); i++) {
|
||||
adCallbacks.get(i).onResume(adMediaInfo);
|
||||
}
|
||||
}
|
||||
updateAdProgress();
|
||||
} else {
|
||||
imaAdState = IMA_AD_STATE_PLAYING;
|
||||
Assertions.checkState(adMediaInfo.equals(imaAdMediaInfo));
|
||||
for (int i = 0; i < adCallbacks.size(); i++) {
|
||||
adCallbacks.get(i).onResume(adMediaInfo);
|
||||
if (!Assertions.checkNotNull(player).getPlayWhenReady()) {
|
||||
Assertions.checkNotNull(adsManager).pause();
|
||||
}
|
||||
}
|
||||
if (!Assertions.checkNotNull(player).getPlayWhenReady()) {
|
||||
Assertions.checkNotNull(adsManager).pause();
|
||||
} catch (RuntimeException e) {
|
||||
maybeNotifyInternalError("playAd", e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -955,9 +959,9 @@ public final class ImaAdsLoader
|
||||
return;
|
||||
}
|
||||
|
||||
Assertions.checkNotNull(player);
|
||||
Assertions.checkState(imaAdState != IMA_AD_STATE_NONE);
|
||||
try {
|
||||
Assertions.checkNotNull(player);
|
||||
Assertions.checkState(imaAdState != IMA_AD_STATE_NONE);
|
||||
stopAdInternal();
|
||||
} catch (RuntimeException e) {
|
||||
maybeNotifyInternalError("stopAd", e);
|
||||
@ -973,10 +977,15 @@ public final class ImaAdsLoader
|
||||
// This method is called after content is resumed.
|
||||
return;
|
||||
}
|
||||
Assertions.checkState(adMediaInfo.equals(imaAdMediaInfo));
|
||||
imaAdState = IMA_AD_STATE_PAUSED;
|
||||
for (int i = 0; i < adCallbacks.size(); i++) {
|
||||
adCallbacks.get(i).onPause(adMediaInfo);
|
||||
|
||||
try {
|
||||
Assertions.checkState(adMediaInfo.equals(imaAdMediaInfo));
|
||||
imaAdState = IMA_AD_STATE_PAUSED;
|
||||
for (int i = 0; i < adCallbacks.size(); i++) {
|
||||
adCallbacks.get(i).onPause(adMediaInfo);
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
maybeNotifyInternalError("pauseAd", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user