diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 8329002c5..bcc6cbfdb 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -91,6 +91,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private ExecutorService mExecutor; private SiteViewModel mViewModel; private boolean mFullscreen; + private boolean mInitTrack; private History mHistory; private Players mPlayers; private int mCurrent; @@ -757,7 +758,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis switch (event.getState()) { case 0: checkPosition(); - setTrackVisible(); + setTrackVisible(false); break; case Player.STATE_IDLE: break; @@ -767,8 +768,8 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis case Player.STATE_READY: hideProgress(); mPlayers.reset(); - setTrackVisible(); - mPlayers.setTrack(Track.find(getHistoryKey())); + setDefaultTrack(); + setTrackVisible(true); mBinding.widget.size.setText(mPlayers.getSizeText()); break; case Player.STATE_ENDED: @@ -784,11 +785,19 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private void checkPosition() { mPlayers.seekTo(Math.max(mHistory.getOpening(), mHistory.getPosition()), false); Clock.get().setCallback(this); + mInitTrack = true; } - private void setTrackVisible() { - mBinding.control.text.setVisibility(mPlayers.haveTrack(C.TRACK_TYPE_TEXT) ? View.VISIBLE : View.GONE); - mBinding.control.audio.setVisibility(mPlayers.haveTrack(C.TRACK_TYPE_AUDIO) ? View.VISIBLE : View.GONE); + private void setTrackVisible(boolean visible) { + mBinding.control.text.setVisibility(visible && mPlayers.haveTrack(C.TRACK_TYPE_TEXT) ? View.VISIBLE : View.GONE); + mBinding.control.audio.setVisibility(visible && mPlayers.haveTrack(C.TRACK_TYPE_AUDIO) ? View.VISIBLE : View.GONE); + } + + private void setDefaultTrack() { + if (mInitTrack) { + mInitTrack = false; + mPlayers.setTrack(Track.find(getHistoryKey())); + } } private void onError(String msg) { 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 1f804c30a..e4f2f15bb 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 @@ -647,7 +647,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick switch (event.getState()) { case 0: setR6Callback(); - setTrackVisible(); + setTrackVisible(false); break; case Player.STATE_IDLE: break; @@ -657,7 +657,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick case Player.STATE_READY: hideProgress(); mPlayers.reset(); - setTrackVisible(); + setTrackVisible(true); App.removeCallbacks(mR6); break; case Player.STATE_ENDED: @@ -671,9 +671,9 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick } } - private void setTrackVisible() { - mBinding.control.text.setVisibility(mPlayers.haveTrack(C.TRACK_TYPE_TEXT) ? View.VISIBLE : View.GONE); - mBinding.control.audio.setVisibility(mPlayers.haveTrack(C.TRACK_TYPE_AUDIO) ? View.VISIBLE : View.GONE); + private void setTrackVisible(boolean visible) { + mBinding.control.text.setVisibility(visible && mPlayers.haveTrack(C.TRACK_TYPE_TEXT) ? View.VISIBLE : View.GONE); + mBinding.control.audio.setVisibility(visible && mPlayers.haveTrack(C.TRACK_TYPE_AUDIO) ? View.VISIBLE : View.GONE); } private void onError() { diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Track.java b/app/src/main/java/com/fongmi/android/tv/bean/Track.java index 5431d7d65..6f8a3e84e 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Track.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Track.java @@ -91,6 +91,14 @@ public class Track { this.selected = selected; } + public boolean isExo(int player) { + return getPlayer() == player && player == 0; + } + + public boolean isIjk(int player) { + return getPlayer() == player && player == 1; + } + public Track toggle() { setSelected(!isSelected()); return this; 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 817ec569f..56a4b7e0d 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 @@ -248,10 +248,7 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM } public void setTrack(List tracks) { - for (Track track : tracks) { - if (isExo()) setTrackExo(track); - else setTrackIjk(track); - } + for (Track track : tracks) setTrack(track); } public boolean haveTrack(int type) { @@ -335,19 +332,24 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM PlayerEvent.state(0); } + private void setTrack(Track item) { + if (item.isExo(player)) setTrackExo(item); + if (item.isIjk(player)) setTrackIjk(item); + } + private void setTrackExo(Track item) { if (item.isSelected()) { - exo().setTrackSelectionParameters(exo().getTrackSelectionParameters().buildUpon().setOverrideForType(new TrackSelectionOverride(exo().getCurrentTracks().getGroups().get(item.getGroup()).getMediaTrackGroup(), item.getTrack())).build()); + exoPlayer.setTrackSelectionParameters(exoPlayer.getTrackSelectionParameters().buildUpon().setOverrideForType(new TrackSelectionOverride(exoPlayer.getCurrentTracks().getGroups().get(item.getGroup()).getMediaTrackGroup(), item.getTrack())).build()); } else { - exo().setTrackSelectionParameters(exo().getTrackSelectionParameters().buildUpon().setOverrideForType(new TrackSelectionOverride(exo().getCurrentTracks().getGroups().get(item.getGroup()).getMediaTrackGroup(), ImmutableList.of())).build()); + exoPlayer.setTrackSelectionParameters(exoPlayer.getTrackSelectionParameters().buildUpon().setOverrideForType(new TrackSelectionOverride(exoPlayer.getCurrentTracks().getGroups().get(item.getGroup()).getMediaTrackGroup(), ImmutableList.of())).build()); } } private void setTrackIjk(Track item) { if (item.isSelected()) { - ijk().selectTrack(item.getTrack()); + ijkPlayer.selectTrack(item.getTrack()); } else { - ijk().deselectTrack(item.getTrack()); + ijkPlayer.deselectTrack(item.getTrack()); } } diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java index f118fab6a..c80ad8924 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java @@ -200,9 +200,9 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl IMediaPlayer.OnPreparedListener mPreparedListener = new IMediaPlayer.OnPreparedListener() { @Override public void onPrepared(IMediaPlayer mp) { + setPreferredTextLanguage(); mCurrentState = STATE_PREPARED; if (mOnPreparedListener != null) mOnPreparedListener.onPrepared(mIjkPlayer); - setPreferredTextLanguage(); mVideoWidth = mp.getVideoWidth(); mVideoHeight = mp.getVideoHeight(); if (mVideoWidth != 0 && mVideoHeight != 0) { @@ -481,14 +481,15 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl public void selectTrack(int track) { long position = getCurrentPosition(); mIjkPlayer.selectTrack(track); - seekTo(position); + subtitleView.setText(""); + if (position != 0) seekTo(position); } public void deselectTrack(int track) { long position = getCurrentPosition(); mIjkPlayer.deselectTrack(track); subtitleView.setText(""); - seekTo(position); + if (position != 0) seekTo(position); } private void setPreferredTextLanguage() {