diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java index d79f220ec..2efb40e39 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java @@ -364,7 +364,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { - if (event.getCode() / 1000 == 4 && mPlayers.isExo() && mPlayers.addCount() <= 1) onDecode(false); + if (event.isDecode() && mPlayers.canToggleDecode()) onDecode(false); else if (mPlayers.addRetry() > event.getRetry()) onError(event); else onReset(); } 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 f291208ab..c214dbd26 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 @@ -798,7 +798,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { if (addErrorCount() > 20) onErrorEnd(event); - else if (event.getCode() / 1000 == 4 && mPlayers.isExo() && mPlayers.addCount() <= 1) onDecode(false); + else if (event.isDecode() && mPlayers.canToggleDecode()) onDecode(false); else if (mPlayers.addRetry() > event.getRetry()) checkError(event); else fetch(); } 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 34db5bb24..5a4c66557 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 @@ -14,6 +14,7 @@ import android.text.style.ClickableSpan; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; +import android.view.WindowManager; import android.widget.RelativeLayout; import android.widget.TextView; @@ -549,6 +550,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List mBinding.widget.title.setText(getString(R.string.detail_title, mBinding.name.getText(), episode.getName())); mBinding.display.title.setText(mBinding.widget.title.getText()); mViewModel.playerContent(getKey(), flag.getFlag(), episode.getUrl()); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); updateHistory(episode, replay); mPlayers.clear(); mPlayers.stop(); @@ -1396,6 +1398,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List if (mBinding.control.loop.isActivated()) { onReset(true); } else { + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); checkNext(); } } @@ -1425,7 +1428,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List public void onErrorEvent(ErrorEvent event) { if (isBackground()) return; if (addErrorCount() > 20) onErrorEnd(event); - else if (event.getCode() / 1000 == 4 && mPlayers.isExo() && mPlayers.addCount() <= 1) onDecode(false); + else if (event.isDecode() && mPlayers.canToggleDecode()) onDecode(false); else if (mPlayers.addRetry() > event.getRetry()) checkError(event); else onRefresh(); } @@ -1578,6 +1581,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } private void onPaused(boolean visible) { + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); mBinding.widget.exoDuration.setText(mPlayers.getDurationTime()); mBinding.widget.exoPosition.setText(mPlayers.getPositionTime(0)); if (visible) showInfoAndCenter(); @@ -1586,6 +1590,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } private void onPlay() { + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); mPlayers.play(); hideCenter(); } diff --git a/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java b/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java index e90f0fcc5..6093181e9 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java @@ -65,6 +65,10 @@ public class ErrorEvent { return code; } + public boolean isDecode() { + return code / 1000 == 4; + } + public String getMsg() { if (type == Type.URL) return ResUtil.getString(R.string.error_play_url, code); if (type == Type.FLAG) return ResUtil.getString(R.string.error_play_flag); 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 46a8f01a1..daec1b17c 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 @@ -222,8 +222,8 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, ParseCal this.position = position; } - public int addCount() { - return ++count; + public boolean canToggleDecode() { + return isExo() && ++count <= 1; } public void reset() { @@ -242,8 +242,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, ParseCal } public int addRetry() { - ++retry; - return retry; + return ++retry; } public String stringToTime(long time) { 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 5320c5b41..86574f88e 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 @@ -863,7 +863,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { if (addErrorCount() > 20) onErrorEnd(event); - else if (event.getCode() / 1000 == 4 && mPlayers.isExo() && mPlayers.addCount() <= 1) onDecode(false); + else if (event.isDecode() && mPlayers.canToggleDecode()) onDecode(false); else if (mPlayers.addRetry() > event.getRetry()) checkError(event); else fetch(); } 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 e0597aec2..2dec1ed30 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 @@ -1364,7 +1364,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo public void onErrorEvent(ErrorEvent event) { if (isRedirect()) return; if (addErrorCount() > 20) onErrorEnd(event); - else if (event.getCode() / 1000 == 4 && mPlayers.isExo() && mPlayers.addCount() <= 1) onDecode(false); + else if (event.isDecode() && mPlayers.canToggleDecode()) onDecode(false); else if (mPlayers.addRetry() > event.getRetry()) checkError(event); else onRefresh(); }