From fc144b27ec3d5e828ad958175b7ac76e0ec7db1f Mon Sep 17 00:00:00 2001 From: FongMi Date: Tue, 18 Jun 2024 00:42:47 +0800 Subject: [PATCH] Clean code --- .../android/tv/ui/activity/CastActivity.java | 12 ++- .../android/tv/ui/activity/LiveActivity.java | 10 +-- .../android/tv/ui/activity/VideoActivity.java | 10 +-- .../com/fongmi/android/tv/player/Players.java | 78 +++++++++++-------- .../fongmi/android/tv/player/exo/ExoUtil.java | 8 +- .../android/tv/ui/activity/LiveActivity.java | 10 +-- .../android/tv/ui/activity/VideoActivity.java | 10 +-- 7 files changed, 70 insertions(+), 68 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 e368bae0c..2d19dae71 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 @@ -81,7 +81,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List bindService(new Intent(this, DLNARendererService.class), this, Context.BIND_AUTO_CREATE); mClock = Clock.create(mBinding.widget.clock); mKeyDown = CustomKeyDownCast.create(this); - mPlayers = new Players().init(this); + mPlayers = Players.create(this); mParser = new DIDLParser(); mR1 = this::hideControl; mR2 = this::setTraffic; @@ -126,16 +126,15 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List } private void start() { - mPlayers.setMediaSource(mAction.getCurrentURI()); + mPlayers.setMediaItem(mAction.getCurrentURI()); showProgress(); setMetadata(); hideCenter(); } private void setVideoView() { - mPlayers.set(mBinding.exo); + mPlayers.setup(mBinding.exo); setScale(scale = Setting.getScale()); - mBinding.exo.setVisibility(View.VISIBLE); findViewById(R.id.timeBar).setNextFocusUpId(R.id.reset); mBinding.control.speed.setText(mPlayers.getSpeedText()); mBinding.control.decode.setText(mPlayers.getDecodeText()); @@ -195,8 +194,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List } private void onDecode() { - mPlayers.toggleDecode(); - mPlayers.set(mBinding.exo); + mPlayers.toggleDecode(mBinding.exo); setDecode(); onReset(); } @@ -340,7 +338,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { - if (event.getCode() / 1000 == 4 && Players.isHard()) onDecode(); + if (event.getCode() / 1000 == 4 && mPlayers.isHard()) onDecode(); else if (mPlayers.error()) 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 e6bfb1f0d..c356fa137 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 @@ -123,7 +123,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick protected void initView() { mClock = Clock.create(mBinding.widget.clock); mKeyDown = CustomKeyDownLive.create(this); - mPlayers = new Players().init(this); + mPlayers = Players.create(this); mHides = new ArrayList<>(); mR0 = this::setActivated; mR1 = this::hideControl; @@ -177,9 +177,8 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick } private void setVideoView() { - mPlayers.set(mBinding.exo); + mPlayers.setup(mBinding.exo); setScale(Setting.getLiveScale()); - mBinding.exo.setVisibility(View.VISIBLE); findViewById(R.id.timeBar).setNextFocusUpId(R.id.player); mBinding.control.invert.setActivated(Setting.isInvert()); mBinding.control.across.setActivated(Setting.isAcross()); @@ -385,8 +384,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick } private void onDecode() { - mPlayers.toggleDecode(); - mPlayers.set(mBinding.exo); + mPlayers.toggleDecode(mBinding.exo); setDecode(); fetch(); } @@ -722,7 +720,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { - if (event.getCode() / 1000 == 4 && Players.isHard()) onDecode(); + if (event.getCode() / 1000 == 4 && mPlayers.isHard()) onDecode(); else if (mPlayers.error()) onError(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 1c6ee1b15..046571fb4 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 @@ -277,7 +277,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List mFrameParams = mBinding.video.getLayoutParams(); mClock = Clock.create(mBinding.widget.clock); mKeyDown = CustomKeyDownVod.create(this); - mPlayers = new Players().init(this); + mPlayers = Players.create(this); mBroken = new ArrayList<>(); mR1 = this::hideControl; mR2 = this::updateFocus; @@ -373,8 +373,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } private void setVideoView() { - mPlayers.set(mBinding.exo); - mBinding.exo.setVisibility(View.VISIBLE); + mPlayers.setup(mBinding.exo); mBinding.control.decode.setText(mPlayers.getDecodeText()); mBinding.control.speed.setEnabled(mPlayers.canAdjustSpeed()); mBinding.control.reset.setText(ResUtil.getStringArray(R.array.select_reset)[Setting.getReset()]); @@ -842,8 +841,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } private void onDecode() { - mPlayers.toggleDecode(); - mPlayers.set(mBinding.exo); + mPlayers.toggleDecode(mBinding.exo); setDecode(); onRefresh(); } @@ -1134,7 +1132,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { if (isBackground()) return; - if (event.getCode() / 1000 == 4 && Players.isHard()) onDecode(); + if (event.getCode() / 1000 == 4 && mPlayers.isHard()) onDecode(); else if (mPlayers.error()) onError(event); else onRefresh(); } 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 a0ee79c09..681a473b4 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 @@ -57,35 +57,41 @@ public class Players implements Player.Listener, ParseCallback { public static final int SOFT = 0; public static final int HARD = 1; + private final StringBuilder builder; + private final Formatter formatter; + private final Runnable runnable; + private Map headers; private MediaSessionCompat session; - private StringBuilder builder; - private Formatter formatter; private ExoPlayer exoPlayer; private ParseJob parseJob; - private Runnable runnable; private String format; private String url; private Sub sub; private long position; + private int decode; private int error; private int retry; - public static boolean isHard() { - return Setting.getDecode() == HARD; + public static Players create(Activity activity) { + return new Players(activity); + } + + public static boolean isHard(int decode) { + return decode == HARD; } - public static boolean isSoft() { - return Setting.getDecode() == SOFT; + public static boolean isSoft(int decode) { + return decode == SOFT; } - public Players init(Activity activity) { + private Players(Activity activity) { + decode = Setting.getDecode(); builder = new StringBuilder(); runnable = ErrorEvent::timeout; formatter = new Formatter(builder, Locale.getDefault()); createSession(activity); - return this; } private void createSession(Activity activity) { @@ -96,24 +102,24 @@ public class Players implements Player.Listener, ParseCallback { MediaControllerCompat.setMediaController(activity, session.getController()); } - public void set(PlayerView exo) { + public void setup(PlayerView exo) { releasePlayer(); setupExo(exo); } - private void setupExo(PlayerView view) { - exoPlayer = new ExoPlayer.Builder(App.get()).setLoadControl(ExoUtil.buildLoadControl()).setTrackSelector(ExoUtil.buildTrackSelector()).setRenderersFactory(ExoUtil.buildRenderersFactory()).setMediaSourceFactory(ExoUtil.buildMediaSourceFactory()).build(); + private void setupExo(PlayerView exo) { + exoPlayer = new ExoPlayer.Builder(App.get()).setLoadControl(ExoUtil.buildLoadControl()).setTrackSelector(ExoUtil.buildTrackSelector()).setRenderersFactory(ExoUtil.buildRenderersFactory(decode)).setMediaSourceFactory(ExoUtil.buildMediaSourceFactory()).build(); exoPlayer.setAudioAttributes(AudioAttributes.DEFAULT, true); exoPlayer.setHandleAudioBecomingNoisy(true); - view.setRender(Setting.getRender()); + exo.setRender(Setting.getRender()); exoPlayer.setPlayWhenReady(true); exoPlayer.addListener(this); - view.setPlayer(exoPlayer); + exo.setPlayer(exoPlayer); } public void setSub(Sub sub) { this.sub = sub; - setMediaSource(headers, url, format); + setMediaItem(); } public ExoPlayer get() { @@ -209,6 +215,10 @@ public class Players implements Player.Listener, ParseCallback { return getDuration() > 5 * 60 * 1000 && !exoPlayer.isCurrentMediaItemLive(); } + public boolean isHard() { + return decode == HARD; + } + public boolean isPortrait() { return getVideoHeight() > getVideoWidth(); } @@ -222,7 +232,7 @@ public class Players implements Player.Listener, ParseCallback { } public String getDecodeText() { - return ResUtil.getStringArray(R.array.select_decode)[Setting.getDecode()]; + return ResUtil.getStringArray(R.array.select_decode)[decode]; } public String setSpeed(float speed) { @@ -255,8 +265,10 @@ public class Players implements Player.Listener, ParseCallback { return setSpeed(speed); } - public void toggleDecode() { - Setting.putDecode(Setting.getDecode() == HARD ? SOFT : HARD); + public void toggleDecode(PlayerView exo) { + decode = isHard(decode) ? SOFT : HARD; + Setting.putDecode(decode); + setup(exo); } public String getPositionTime(long time) { @@ -321,7 +333,7 @@ public class Players implements Player.Listener, ParseCallback { } else if (isIllegal(channel.getUrl())) { ErrorEvent.url(); } else { - setMediaSource(channel, timeout); + setMediaItem(channel, timeout); } } @@ -333,7 +345,7 @@ public class Players implements Player.Listener, ParseCallback { } else if (isIllegal(result.getRealUrl())) { ErrorEvent.url(); } else { - setMediaSource(result, timeout); + setMediaItem(result, timeout); } } @@ -360,28 +372,28 @@ public class Players implements Player.Listener, ParseCallback { return subs; } - public void setMediaSource(String url) { - setMediaSource(new HashMap<>(), url); + private void setMediaItem() { + setMediaItem(headers, url, format, null, new ArrayList<>(), Constant.TIMEOUT_PLAY); } - private void setMediaSource(Map headers, String url) { - setMediaSource(headers, url, null, null, new ArrayList<>(), Constant.TIMEOUT_PLAY); + public void setMediaItem(String url) { + setMediaItem(new HashMap<>(), url); } - private void setMediaSource(Map headers, String url, String format) { - setMediaSource(headers, url, format, null, new ArrayList<>(), Constant.TIMEOUT_PLAY); + private void setMediaItem(Map headers, String url) { + setMediaItem(headers, url, null, null, new ArrayList<>(), Constant.TIMEOUT_PLAY); } - private void setMediaSource(Channel channel, int timeout) { - setMediaSource(channel.getHeaders(), channel.getUrl(), channel.getFormat(), channel.getDrm(), new ArrayList<>(), timeout); + private void setMediaItem(Channel channel, int timeout) { + setMediaItem(channel.getHeaders(), channel.getUrl(), channel.getFormat(), channel.getDrm(), new ArrayList<>(), timeout); } - private void setMediaSource(Result result, int timeout) { - setMediaSource(result.getHeaders(), result.getRealUrl(), result.getFormat(), result.getDrm(), result.getSubs(), timeout); + private void setMediaItem(Result result, int timeout) { + setMediaItem(result.getHeaders(), result.getRealUrl(), result.getFormat(), result.getDrm(), result.getSubs(), timeout); } - private void setMediaSource(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), ExoUtil.getMimeType(this.format = format, error), drm, checkSub(subs)), position); + 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), ExoUtil.getMimeType(this.format = format, error), drm, checkSub(subs), decode), position); if (exoPlayer != null) exoPlayer.prepare(); Logger.t(TAG).d(error + "," + url); App.post(runnable, timeout); @@ -493,7 +505,7 @@ public class Players implements Player.Listener, ParseCallback { @Override public void onParseSuccess(Map headers, String url, String from) { if (!TextUtils.isEmpty(from)) Notify.show(ResUtil.getString(R.string.parse_from, from)); - setMediaSource(headers, url); + setMediaItem(headers, url); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java index a840c59d3..a0bfdbd02 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java @@ -46,8 +46,8 @@ public class ExoUtil { return trackSelector; } - public static RenderersFactory buildRenderersFactory() { - return new NextRenderersFactory(App.get()).setEnableDecoderFallback(true).setExtensionRendererMode(Players.isSoft() ? DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER : DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON); + public static RenderersFactory buildRenderersFactory(int decode) { + return new NextRenderersFactory(App.get()).setEnableDecoderFallback(true).setExtensionRendererMode(Players.isSoft(decode) ? DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER : DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON); } public static MediaSource.Factory buildMediaSourceFactory() { @@ -95,12 +95,12 @@ public class ExoUtil { return errorCode >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && errorCode <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED ? 2 : errorCode > 999 ? 1 : 0; } - public static MediaItem getMediaItem(Map headers, Uri uri, String mimeType, Drm drm, List subs) { + public static MediaItem getMediaItem(Map headers, Uri uri, String mimeType, Drm drm, List subs, int decode) { MediaItem.Builder builder = new MediaItem.Builder().setUri(uri); + builder.setAllowChunklessPreparation(Players.isHard(decode)); builder.setRequestMetadata(getRequestMetadata(headers, uri)); builder.setSubtitleConfigurations(getSubtitleConfigs(subs)); if (drm != null) builder.setDrmConfiguration(drm.get()); - builder.setAllowChunklessPreparation(Players.isHard()); if (mimeType != null) builder.setMimeType(mimeType); builder.setForceUseRtpTcp(Setting.getRtsp() == 1); builder.setAds(Sniffer.getRegex(uri)); 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 1e0fb0aeb..466c54c2d 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 @@ -145,7 +145,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List setPadding(mBinding.control.getRoot()); setPadding(mBinding.widget.epg, true); setPadding(mBinding.recycler, true); - mPlayers = new Players().init(this); + mPlayers = Players.create(this); mObserveEpg = this::setEpg; mObserveUrl = this::start; mHides = new ArrayList<>(); @@ -200,9 +200,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List } private void setVideoView() { - mPlayers.set(mBinding.exo); + mPlayers.setup(mBinding.exo); setScale(Setting.getLiveScale()); - mBinding.exo.setVisibility(View.VISIBLE); mBinding.control.action.invert.setActivated(Setting.isInvert()); mBinding.control.action.across.setActivated(Setting.isAcross()); mBinding.control.action.change.setActivated(Setting.isChange()); @@ -416,8 +415,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List } private void onDecode() { - mPlayers.toggleDecode(); - mPlayers.set(mBinding.exo); + mPlayers.toggleDecode(mBinding.exo); setR1Callback(); setDecode(); fetch(); @@ -781,7 +779,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { - if (event.getCode() / 1000 == 4 && Players.isHard()) onDecode(); + if (event.getCode() / 1000 == 4 && mPlayers.isHard()) onDecode(); else if (mPlayers.error()) onError(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 809118c4f..487464f1e 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 @@ -279,10 +279,10 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo mFrameParams = mBinding.video.getLayoutParams(); mBinding.progressLayout.showProgress(); mBinding.swipeLayout.setEnabled(false); - mPlayers = new Players().init(this); mObserveDetail = this::setDetail; mObservePlayer = this::setPlayer; mObserveSearch = this::setSearch; + mPlayers = Players.create(this); mDialogs = new ArrayList<>(); mBroken = new ArrayList<>(); mClock = Clock.create(); @@ -366,8 +366,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } private void setVideoView() { - mPlayers.set(mBinding.exo); - mBinding.exo.setVisibility(View.VISIBLE); + mPlayers.setup(mBinding.exo); mBinding.control.action.decode.setText(mPlayers.getDecodeText()); mBinding.control.action.speed.setEnabled(mPlayers.canAdjustSpeed()); mBinding.control.action.reset.setText(ResUtil.getStringArray(R.array.select_reset)[Setting.getReset()]); @@ -766,8 +765,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } private void onDecode() { - mPlayers.toggleDecode(); - mPlayers.set(mBinding.exo); + mPlayers.toggleDecode(mBinding.exo); setR1Callback(); setDecode(); onRefresh(); @@ -1144,7 +1142,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { if (isRedirect()) return; - if (event.getCode() / 1000 == 4 && Players.isHard()) onDecode(); + if (event.getCode() / 1000 == 4 && mPlayers.isHard()) onDecode(); else if (mPlayers.error()) onError(event); else onRefresh(); }