From f640deff34814030da7f215f1f4542159aaca10a Mon Sep 17 00:00:00 2001 From: FongMi Date: Sun, 12 Jan 2025 00:59:34 +0800 Subject: [PATCH] Fix bug --- .../android/tv/ui/activity/CastActivity.java | 7 ++++--- .../android/tv/ui/activity/VideoActivity.java | 15 +++++++++------ .../com/fongmi/android/tv/player/Players.java | 10 ++-------- .../fongmi/android/tv/ui/dialog/TrackDialog.java | 3 ++- .../android/tv/ui/activity/VideoActivity.java | 15 +++++++++------ 5 files changed, 26 insertions(+), 24 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 cf316f4f1..1cda2815a 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 @@ -175,7 +175,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List } private void onReset() { - mPlayers.setPosition(position = C.TIME_UNSET); + position = duration = C.TIME_UNSET; start(); } @@ -278,7 +278,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List public void onPlayerEvent(PlayerEvent event) { switch (event.getState()) { case PlayerEvent.PREPARE: - mClock.setCallback(this); + mPlayers.seekTo(position); setState(RenderState.PREPARING); break; case Player.STATE_IDLE: @@ -300,6 +300,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List setMetadata(); mPlayers.reset(); setTrackVisible(); + mClock.setCallback(this); break; case PlayerEvent.SIZE: mBinding.widget.size.setText(mPlayers.getSizeText()); @@ -380,8 +381,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 f29e00add..9131005f8 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 @@ -965,7 +965,6 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List mHistory.setVodRemarks(item.getName()); mHistory.setVodFlag(getFlag().getFlag()); mHistory.setCreateTime(System.currentTimeMillis()); - mPlayers.setPosition(Math.max(mHistory.getOpening(), position)); } private void checkKeep() { @@ -998,13 +997,12 @@ 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()); if (mHistory.getEnding() > 0 && duration > 0 && mHistory.getEnding() + position >= duration) { mClock.setCallback(null); - checkNext(); + checkEnded(); } } @@ -1036,7 +1034,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List switch (event.getState()) { case PlayerEvent.PREPARE: setInitTrack(true); - mClock.setCallback(this); + setPosition(); break; case Player.STATE_BUFFERING: showProgress(); @@ -1052,6 +1050,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List setInitTrack(); mPlayers.reset(); setTrackVisible(); + mClock.setCallback(this); break; case PlayerEvent.SIZE: mBinding.widget.size.setText(mPlayers.getSizeText()); @@ -1059,6 +1058,10 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } } + private void setPosition() { + if (mHistory != null) mPlayers.seekTo(Math.max(mHistory.getOpening(), mHistory.getPosition())); + } + private void checkEnded() { if (mBinding.control.loop.isActivated()) { onReset(true); @@ -1234,9 +1237,9 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } private void onPlay() { - getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); if (mHistory != null && mPlayers.isEnded()) mPlayers.seekTo(mHistory.getOpening()); - if (mPlayers.isIdle()) mPlayers.prepare(); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + if (!mPlayers.isEmpty() && 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 cccb03900..c13584160 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 @@ -83,7 +83,6 @@ public class Players implements Player.Listener, ParseCallback { private Drm drm; private Sub sub; - private long position; private int decode; private int retry; @@ -98,7 +97,6 @@ public class Players implements Player.Listener, ParseCallback { builder = new StringBuilder(); runnable = ErrorEvent::timeout; formatter = new Formatter(builder, Locale.getDefault()); - position = C.TIME_UNSET; createSession(activity); } @@ -153,10 +151,6 @@ public class Players implements Player.Listener, ParseCallback { setMediaItem(); } - public void setPosition(long position) { - this.position = position; - } - public void reset() { removeTimeoutCheck(); retry = 0; @@ -416,12 +410,12 @@ public class Players implements Player.Listener, ParseCallback { } private void setMediaItem(Map headers, String url, String format, Drm drm, List subs, int timeout) { - if (exoPlayer != null) exoPlayer.setMediaItem(ExoUtil.getMediaItem(this.headers = checkUa(headers), UrlUtil.uri(this.url = url), this.format = format, this.drm = drm, checkSub(this.subs = subs), decode), position); - if (exoPlayer != null) exoPlayer.prepare(); + if (exoPlayer != null) exoPlayer.setMediaItem(ExoUtil.getMediaItem(this.headers = checkUa(headers), UrlUtil.uri(this.url = url), this.format = format, this.drm = drm, checkSub(this.subs = subs), decode)); App.post(runnable, timeout); session.setActive(true); PlayerEvent.prepare(); Logger.t(TAG).d(url); + prepare(); } private void removeTimeoutCheck() { diff --git a/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java b/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java index 5ccf0c239..63095696a 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java @@ -15,6 +15,7 @@ import androidx.media3.common.MimeTypes; import androidx.media3.common.Tracks; import androidx.viewbinding.ViewBinding; +import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; import com.fongmi.android.tv.bean.Sub; import com.fongmi.android.tv.bean.Track; @@ -133,7 +134,7 @@ public final class TrackDialog extends BaseDialog implements TrackAdapter.OnClic public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode != Activity.RESULT_OK || requestCode != FileChooser.REQUEST_PICK_FILE) return; - player.setSub(Sub.from(FileChooser.getPathFromUri(getContext(), data.getData()))); + App.post(() -> player.setSub(Sub.from(FileChooser.getPathFromUri(App.get(), data.getData()))), 250); dismiss(); } 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 01da16b83..d4da6e542 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 @@ -996,7 +996,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo mHistory.setVodRemarks(item.getName()); mHistory.setVodFlag(getFlag().getFlag()); mHistory.setCreateTime(System.currentTimeMillis()); - mPlayers.setPosition(Math.max(mHistory.getOpening(), position)); } private void checkPlayImg(boolean playing) { @@ -1039,13 +1038,12 @@ 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()); if (mHistory.getEnding() > 0 && duration > 0 && mHistory.getEnding() + position >= duration) { mClock.setCallback(null); - checkNext(); + checkEnded(); } } @@ -1083,7 +1081,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo switch (event.getState()) { case PlayerEvent.PREPARE: setInitTrack(true); - mClock.setCallback(this); + setPosition(); break; case Player.STATE_BUFFERING: showProgress(); @@ -1100,6 +1098,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo setInitTrack(); mPlayers.reset(); setTrackVisible(); + mClock.setCallback(this); break; case PlayerEvent.SIZE: checkPortrait(); @@ -1108,6 +1107,10 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } } + private void setPosition() { + if (mHistory != null) mPlayers.seekTo(Math.max(mHistory.getOpening(), mHistory.getPosition())); + } + private void checkPortrait() { if (isFullscreen() && !isRotate() && mPlayers.isPortrait()) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT); @@ -1285,9 +1288,9 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } private void onPlay() { - getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); if (mHistory != null && mPlayers.isEnded()) mPlayers.seekTo(mHistory.getOpening()); - if (mPlayers.isIdle()) mPlayers.prepare(); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + if (!mPlayers.isEmpty() && mPlayers.isIdle()) mPlayers.prepare(); checkPlayImg(true); mPlayers.play(); }