fix(android, exoplayer): ensure playback progress is reported even if paused

This commit is contained in:
olivier bouillet 2022-04-27 21:26:37 +02:00
parent 1e0c99b32c
commit 8782755cd6

View File

@ -165,21 +165,30 @@ class ReactExoplayerView extends FrameLayout implements
private final AudioManager audioManager; private final AudioManager audioManager;
private final AudioBecomingNoisyReceiver audioBecomingNoisyReceiver; private final AudioBecomingNoisyReceiver audioBecomingNoisyReceiver;
// store last progress event values to avoid sending unnecessary messages
private long lastPos = -1;
private long lastBufferDuration = -1;
private long lastDuration = -1;
private final Handler progressHandler = new Handler() { private final Handler progressHandler = new Handler() {
@Override @Override
public void handleMessage(Message msg) { public void handleMessage(Message msg) {
switch (msg.what) { switch (msg.what) {
case SHOW_PROGRESS: case SHOW_PROGRESS:
if (player != null long pos = player.getCurrentPosition();
&& player.getPlaybackState() == Player.STATE_READY long bufferedDuration = player.getBufferedPercentage() * player.getDuration() / 100;
&& player.getPlayWhenReady() long duration = player.getDuration();
) {
long pos = player.getCurrentPosition(); if (lastPos != pos
long bufferedDuration = player.getBufferedPercentage() * player.getDuration() / 100; || lastBufferDuration != bufferedDuration
|| lastDuration != duration) {
lastPos = pos;
lastBufferDuration = bufferedDuration;
lastDuration = duration;
eventEmitter.progressChanged(pos, bufferedDuration, player.getDuration(), getPositionInFirstPeriodMsForCurrentWindow(pos)); eventEmitter.progressChanged(pos, bufferedDuration, player.getDuration(), getPositionInFirstPeriodMsForCurrentWindow(pos));
msg = obtainMessage(SHOW_PROGRESS);
sendMessageDelayed(msg, Math.round(mProgressUpdateInterval));
} }
msg = obtainMessage(SHOW_PROGRESS);
sendMessageDelayed(msg, Math.round(mProgressUpdateInterval));
break; break;
} }
} }