fix(android): prevent duplicate onVideoEnd callback on prop changes (#4762)
This commit is contained in:
@@ -227,6 +227,7 @@ public class ReactExoplayerView extends FrameLayout implements
|
||||
*/
|
||||
private boolean isSeeking = false;
|
||||
private long seekPosition = -1;
|
||||
private boolean hasVideoEnded = false;
|
||||
|
||||
// Props from React
|
||||
private Source source = new Source();
|
||||
@@ -1411,6 +1412,7 @@ public class ReactExoplayerView extends FrameLayout implements
|
||||
break;
|
||||
case Player.STATE_READY:
|
||||
text += "ready";
|
||||
hasVideoEnded = false;
|
||||
eventEmitter.onReadyForDisplay.invoke();
|
||||
onBuffering(false);
|
||||
clearProgressMessageHandler(); // ensure there is no other message
|
||||
@@ -1429,7 +1431,10 @@ public class ReactExoplayerView extends FrameLayout implements
|
||||
case Player.STATE_ENDED:
|
||||
text += "ended";
|
||||
updateProgress();
|
||||
eventEmitter.onVideoEnd.invoke();
|
||||
if (!hasVideoEnded) {
|
||||
hasVideoEnded = true;
|
||||
eventEmitter.onVideoEnd.invoke();
|
||||
}
|
||||
onStopPlayback();
|
||||
setKeepScreenOn(false);
|
||||
break;
|
||||
@@ -1819,7 +1824,10 @@ public class ReactExoplayerView extends FrameLayout implements
|
||||
if (reason == Player.DISCONTINUITY_REASON_AUTO_TRANSITION
|
||||
&& player.getRepeatMode() == Player.REPEAT_MODE_ONE) {
|
||||
updateProgress();
|
||||
eventEmitter.onVideoEnd.invoke();
|
||||
if (!hasVideoEnded) {
|
||||
hasVideoEnded = true;
|
||||
eventEmitter.onVideoEnd.invoke();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2030,6 +2038,7 @@ public class ReactExoplayerView extends FrameLayout implements
|
||||
}
|
||||
|
||||
if (!isSourceEqual) {
|
||||
hasVideoEnded = false;
|
||||
playerNeedsSource = true;
|
||||
initializePlayer();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user