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 233fe9da8..cf316f4f1 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 @@ -120,7 +120,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List private void checkAction() { mAction = getIntent().getParcelableExtra(RendererInterfaceKt.keyExtraCastAction); mBinding.widget.title.setText(getName()); - position = duration = 0; + position = duration = C.TIME_UNSET; start(); } @@ -175,6 +175,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List } private void onReset() { + mPlayers.setPosition(position = C.TIME_UNSET); start(); } @@ -221,13 +222,15 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List } private void showInfo() { - mBinding.widget.center.setVisibility(View.VISIBLE); mBinding.widget.info.setVisibility(View.VISIBLE); + mBinding.widget.center.setVisibility(View.VISIBLE); + mBinding.widget.exoDuration.setText(mPlayers.getDurationTime()); + mBinding.widget.exoPosition.setText(mPlayers.getPositionTime(0)); } private void hideInfo() { - mBinding.widget.center.setVisibility(View.GONE); mBinding.widget.info.setVisibility(View.GONE); + mBinding.widget.center.setVisibility(View.GONE); } private void showControl() { @@ -336,8 +339,6 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List } private void onPaused() { - mBinding.widget.exoDuration.setText(mPlayers.getDurationTime()); - mBinding.widget.exoPosition.setText(mPlayers.getPositionTime(0)); setState(RenderState.PAUSED); mPlayers.pause(); showInfo(); @@ -345,6 +346,8 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List private void onPlay() { setState(RenderState.PLAYING); + if (mPlayers.isEnded()) mPlayers.seekTo(C.TIME_UNSET); + if (mPlayers.isIdle()) mPlayers.prepare(); mPlayers.play(); hideCenter(); } @@ -377,8 +380,8 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List @Override public void onTimeChanged() { - position = mPlayers.getPosition(); duration = mPlayers.getDuration(); + mPlayers.setPosition(position = mPlayers.getPosition()); } @Override 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 9aad9df23..06b89a100 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 @@ -645,7 +645,6 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List mKeyDown.setFull(true); setFullscreen(true); mFocus2 = null; - onPlay(); } private void exitFullscreen() { @@ -861,13 +860,15 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } private void showInfo() { - mBinding.widget.center.setVisibility(View.VISIBLE); mBinding.widget.info.setVisibility(View.VISIBLE); + mBinding.widget.center.setVisibility(View.VISIBLE); + mBinding.widget.exoDuration.setText(mPlayers.getDurationTime()); + mBinding.widget.exoPosition.setText(mPlayers.getPositionTime(0)); } private void hideInfo() { - mBinding.widget.center.setVisibility(View.GONE); mBinding.widget.info.setVisibility(View.GONE); + mBinding.widget.center.setVisibility(View.GONE); } private void showControl(View view) { @@ -997,6 +998,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List @Override public void onTimeChanged() { long position, duration; + mPlayers.setPosition(mPlayers.getPosition()); mHistory.setPosition(position = mPlayers.getPosition()); mHistory.setDuration(duration = mPlayers.getDuration()); if (position >= 0 && duration > 0 && !Setting.isIncognito()) App.execute(() -> mHistory.update()); @@ -1226,8 +1228,6 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List private void onPaused() { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - mBinding.widget.exoDuration.setText(mPlayers.getDurationTime()); - mBinding.widget.exoPosition.setText(mPlayers.getPositionTime(0)); if (isFullscreen()) showInfo(); else hideInfo(); mPlayers.pause(); @@ -1235,6 +1235,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List private void onPlay() { getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + if (mPlayers.isEnded()) mPlayers.seekTo(mHistory.getOpening()); + if (mPlayers.isIdle()) mPlayers.prepare(); mPlayers.play(); hideCenter(); } 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 59e5b7df4..cccb03900 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 @@ -144,7 +144,6 @@ public class Players implements Player.Listener, ParseCallback { } public void setSub(Sub sub) { - setPosition(getPosition()); this.sub = sub; setMediaItem(); } @@ -159,7 +158,6 @@ public class Players implements Player.Listener, ParseCallback { } public void reset() { - position = C.TIME_UNSET; removeTimeoutCheck(); retry = 0; } @@ -216,10 +214,14 @@ public class Players implements Player.Listener, ParseCallback { return exoPlayer != null && exoPlayer.isPlaying(); } - public boolean isEnd() { + public boolean isEnded() { return exoPlayer != null && exoPlayer.getPlaybackState() == Player.STATE_ENDED; } + public boolean isIdle() { + return exoPlayer != null && exoPlayer.getPlaybackState() == Player.STATE_IDLE; + } + public boolean isEmpty() { return TextUtils.isEmpty(getUrl()); } @@ -309,6 +311,10 @@ public class Players implements Player.Listener, ParseCallback { if (exoPlayer != null) exoPlayer.seekTo(time); } + public void prepare() { + if (exoPlayer != null) exoPlayer.prepare(); + } + public void play() { if (exoPlayer != null) exoPlayer.play(); } @@ -320,7 +326,6 @@ public class Players implements Player.Listener, ParseCallback { public void stop() { if (parseJob != null) parseJob.stop(); if (exoPlayer != null) exoPlayer.stop(); - if (exoPlayer != null) exoPlayer.clearMediaItems(); } public void release() { 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 1a48c6ae6..8f681c9df 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 @@ -1039,6 +1039,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo @Override public void onTimeChanged() { long position, duration; + mPlayers.setPosition(mPlayers.getPosition()); mHistory.setPosition(position = mPlayers.getPosition()); mHistory.setDuration(duration = mPlayers.getDuration()); if (position >= 0 && duration > 0 && !Setting.isIncognito()) App.execute(() -> mHistory.update()); @@ -1285,7 +1286,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo private void onPlay() { getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - if (mPlayers.isEnd()) mPlayers.seekTo(mHistory.getOpening()); + if (mPlayers.isEnded()) mPlayers.seekTo(mHistory.getOpening()); + if (mPlayers.isIdle()) mPlayers.prepare(); checkPlayImg(true); mPlayers.play(); }