From aa45834bb106e7c150480ceb40343c8459470b24 Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 11 Jan 2025 16:00:50 +0800 Subject: [PATCH] Fix bug --- .../android/tv/ui/activity/CastActivity.java | 15 +++++++++------ .../android/tv/ui/activity/VideoActivity.java | 12 +++++++----- .../com/fongmi/android/tv/player/Players.java | 13 +++++++++---- .../android/tv/ui/activity/VideoActivity.java | 4 +++- 4 files changed, 28 insertions(+), 16 deletions(-) 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 233fe9da8d..cf316f4f17 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 @@ private String getName() { 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 @@ private boolean onSpeedLong() { } private void onReset() { + mPlayers.setPosition(position = C.TIME_UNSET); start(); } @@ -221,13 +222,15 @@ private void hideError() { } 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 @@ private void onError(ErrorEvent event) { } 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 @@ private void onPaused() { 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 void onSubtitleClick() { @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 9aad9df230..06b89a100a 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 @@ private void enterFullscreen() { mKeyDown.setFull(true); setFullscreen(true); mFocus2 = null; - onPlay(); } private void exitFullscreen() { @@ -861,13 +860,15 @@ private void hideError() { } 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 void onSubtitleClick() { @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 @@ private void nextSite() { 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 @@ private void onPaused() { 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 59e5b7df45..cccb039000 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 Map getHeaders() { } public void setSub(Sub sub) { - setPosition(getPosition()); this.sub = sub; setMediaItem(); } @@ -159,7 +158,6 @@ public void setPosition(long position) { } public void reset() { - position = C.TIME_UNSET; removeTimeoutCheck(); retry = 0; } @@ -216,10 +214,14 @@ public boolean isPlaying() { 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 void seekTo(long time) { 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 void pause() { 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 1a48c6ae65..8f681c9df6 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 void onSubtitleClick() { @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 @@ private void onPaused() { 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(); }