diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index d0358d3b8..f291208ab 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -92,6 +92,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP private Runnable mR4; private Clock mClock; private int toggleCount; + private int errorCount; private int count; public static void start(Context context) { @@ -767,6 +768,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP break; case Player.STATE_READY: resetToggle(); + resetError(); setMetadata(); hideProgress(); mPlayers.reset(); @@ -795,7 +797,8 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { - if (event.getCode() / 1000 == 4 && mPlayers.isExo() && mPlayers.addCount() <= 1) onDecode(false); + if (addErrorCount() > 20) onErrorEnd(event); + else if (event.getCode() / 1000 == 4 && mPlayers.isExo() && mPlayers.addCount() <= 1) onDecode(false); else if (mPlayers.addRetry() > event.getRetry()) checkError(event); else fetch(); } @@ -816,10 +819,19 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP fetch(); } - private void onError(ErrorEvent event) { + private void onErrorEnd(ErrorEvent event) { + onErrorPlayer(event); + resetError(); + } + + private void onErrorPlayer(ErrorEvent event) { showError(event.getMsg()); mPlayers.reset(); mPlayers.stop(); + } + + private void onError(ErrorEvent event) { + onErrorPlayer(event); startFlow(); } @@ -888,6 +900,14 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP this.toggleCount = 0; } + public int addErrorCount() { + return ++errorCount; + } + + public void resetError() { + this.errorCount = 0; + } + @Override public boolean dispatchKeyEvent(KeyEvent event) { if (isVisible(mBinding.control.getRoot())) setR1Callback(); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 9bc975dba..34db5bb24 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -144,6 +144,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List private boolean autoMode; private boolean useParse; private int toggleCount; + private int errorCount; private int groupSize; private Runnable mR1; private Runnable mR2; @@ -1376,6 +1377,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List stopSearch(); setMetadata(); resetToggle(); + resetError(); hideProgress(); mPlayers.reset(); setDefaultTrack(); @@ -1422,7 +1424,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { if (isBackground()) return; - if (event.getCode() / 1000 == 4 && mPlayers.isExo() && mPlayers.addCount() <= 1) onDecode(false); + if (addErrorCount() > 20) onErrorEnd(event); + else if (event.getCode() / 1000 == 4 && mPlayers.isExo() && mPlayers.addCount() <= 1) onDecode(false); else if (mPlayers.addRetry() > event.getRetry()) checkError(event); else onRefresh(); } @@ -1444,12 +1447,21 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List onRefresh(); } - private void onError(ErrorEvent event) { + private void onErrorEnd(ErrorEvent event) { + onErrorPlayer(event); + resetError(); + } + + private void onErrorPlayer(ErrorEvent event) { Track.delete(getHistoryKey()); showError(event.getMsg()); mClock.setCallback(null); mPlayers.reset(); mPlayers.stop(); + } + + private void onError(ErrorEvent event) { + onErrorPlayer(event); startFlow(); } @@ -1634,6 +1646,14 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List this.toggleCount = 0; } + public int addErrorCount() { + return ++errorCount; + } + + public void resetError() { + this.errorCount = 0; + } + public int getGroupSize() { return groupSize; } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 92810e63c..5320c5b41 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -106,6 +106,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom private boolean stop; private boolean lock; private int toggleCount; + private int errorCount; private int passCount; private PiP mPiP; @@ -831,6 +832,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom case Player.STATE_READY: setMetadata(); resetToggle(); + resetError(); hideProgress(); mPlayers.reset(); setTrackVisible(true); @@ -860,7 +862,8 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { - if (event.getCode() / 1000 == 4 && mPlayers.isExo() && mPlayers.addCount() <= 1) onDecode(false); + if (addErrorCount() > 20) onErrorEnd(event); + else if (event.getCode() / 1000 == 4 && mPlayers.isExo() && mPlayers.addCount() <= 1) onDecode(false); else if (mPlayers.addRetry() > event.getRetry()) checkError(event); else fetch(); } @@ -881,10 +884,19 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom fetch(); } - private void onError(ErrorEvent event) { + private void onErrorEnd(ErrorEvent event) { + onErrorPlayer(event); + resetError(); + } + + private void onErrorPlayer(ErrorEvent event) { showError(event.getMsg()); mPlayers.reset(); mPlayers.stop(); + } + + private void onError(ErrorEvent event) { + onErrorPlayer(event); startFlow(); } @@ -1030,6 +1042,14 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom this.toggleCount = 0; } + public int addErrorCount() { + return ++errorCount; + } + + public void resetError() { + this.errorCount = 0; + } + private void stopService() { PlaybackService.stop(); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index fd11de258..e0597aec2 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -158,6 +158,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo private boolean stop; private boolean lock; private int toggleCount; + private int errorCount; private Runnable mR0; private Runnable mR1; private Runnable mR2; @@ -1304,6 +1305,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo checkRotate(); setMetadata(); resetToggle(); + resetError(); hideProgress(); mPlayers.reset(); setDefaultTrack(); @@ -1361,7 +1363,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { if (isRedirect()) return; - if (event.getCode() / 1000 == 4 && mPlayers.isExo() && mPlayers.addCount() <= 1) onDecode(false); + if (addErrorCount() > 20) onErrorEnd(event); + else if (event.getCode() / 1000 == 4 && mPlayers.isExo() && mPlayers.addCount() <= 1) onDecode(false); else if (mPlayers.addRetry() > event.getRetry()) checkError(event); else onRefresh(); } @@ -1383,13 +1386,22 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo onRefresh(); } - private void onError(ErrorEvent event) { + private void onErrorEnd(ErrorEvent event) { + onErrorPlayer(event); + resetError(); + } + + private void onErrorPlayer(ErrorEvent event) { mBinding.swipeLayout.setEnabled(true); Track.delete(getHistoryKey()); showError(event.getMsg()); mClock.setCallback(null); mPlayers.reset(); mPlayers.stop(); + } + + private void onError(ErrorEvent event) { + onErrorPlayer(event); startFlow(); } @@ -1607,6 +1619,14 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo this.toggleCount = 0; } + public int addErrorCount() { + return ++errorCount; + } + + public void resetError() { + this.errorCount = 0; + } + private void notifyItemChanged(RecyclerView.Adapter adapter) { adapter.notifyItemRangeChanged(0, adapter.getItemCount()); }