Add retry when player error

pull/102/head
FongMi 4 years ago
parent 8ce84eac86
commit 316017ea74
  1. 24
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 16
      app/src/main/java/com/fongmi/android/tv/event/PlayerEvent.java
  3. 2
      app/src/main/java/com/fongmi/android/tv/player/Players.java

@ -63,6 +63,7 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener {
private Handler mHandler;
private History mHistory;
private int mCurrent;
private int mRetry;
private String getKey() {
return getIntent().getStringExtra("key");
@ -178,7 +179,7 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener {
private void getPlayer(boolean replay) {
Vod.Flag.Episode item = (Vod.Flag.Episode) mEpisodeAdapter.get(getEpisodePosition());
if (mFullscreen) Notify.show(ResUtil.getString(R.string.play_ready, item.getName()));
if (mFullscreen && mRetry == 0) Notify.show(ResUtil.getString(R.string.play_ready, item.getName()));
mSiteViewModel.playerContent(getKey(), getVodFlag().getFlag(), item.getUrl());
mBinding.progress.getRoot().setVisibility(View.VISIBLE);
mBinding.error.getRoot().setVisibility(View.GONE);
@ -401,15 +402,14 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener {
break;
case Player.STATE_READY:
mBinding.progress.getRoot().setVisibility(View.GONE);
mRetry = 0;
break;
case Player.STATE_ENDED:
onNext();
break;
default:
Players.get().stop();
mBinding.progress.getRoot().setVisibility(View.GONE);
mBinding.error.getRoot().setVisibility(View.VISIBLE);
mBinding.error.text.setText(event.getMsg());
if (!event.isRetry() || ++mRetry > 3) onError(event.getMsg());
else onRetry();
break;
}
}
@ -428,6 +428,20 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener {
mHandler.postDelayed(mProgress, 1000);
}
private void onRetry() {
updateHistory();
getPlayer(false);
}
private void onError(String msg) {
mBinding.progress.getRoot().setVisibility(View.GONE);
mBinding.error.getRoot().setVisibility(View.VISIBLE);
mBinding.error.text.setText(msg);
Players.get().stop();
stopTimer();
mRetry = 0;
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (mFullscreen && !mBinding.video.isControllerFullyVisible() && mKeyDown.hasEvent(event)) return mKeyDown.onKeyDown(event);

@ -9,10 +9,15 @@ import org.greenrobot.eventbus.EventBus;
public class PlayerEvent {
private final int state;
private boolean retry;
private String msg;
public static void error(int resId) {
EventBus.getDefault().post(new PlayerEvent(ResUtil.getString(resId)));
EventBus.getDefault().post(new PlayerEvent(ResUtil.getString(resId), false));
}
public static void error(int resId, boolean retry) {
EventBus.getDefault().post(new PlayerEvent(ResUtil.getString(resId), retry));
}
public static void state(int state) {
@ -23,9 +28,10 @@ public class PlayerEvent {
this.state = state;
}
private PlayerEvent(String msg) {
this.state = -1;
private PlayerEvent(String msg, boolean retry) {
this.msg = msg;
this.retry = retry;
this.state = -1;
}
public String getMsg() {
@ -35,4 +41,8 @@ public class PlayerEvent {
public int getState() {
return state;
}
public boolean isRetry() {
return retry;
}
}

@ -167,7 +167,7 @@ public class Players implements Player.Listener, ParseTask.Callback {
@Override
public void onPlayerError(@NonNull PlaybackException error) {
PlayerEvent.error(R.string.error_play_format);
PlayerEvent.error(R.string.error_play_format, true);
}
@Override

Loading…
Cancel
Save