diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 34a67cda0..3a6a2e904 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.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); diff --git a/app/src/main/java/com/fongmi/android/tv/event/PlayerEvent.java b/app/src/main/java/com/fongmi/android/tv/event/PlayerEvent.java index 2e59a20a2..d51474ac7 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/PlayerEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/PlayerEvent.java @@ -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; + } } diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index ccbc02e18..6e9d4eb29 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -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