From 19d03cae8602e8c2d212a69036fd066f2cfd7830 Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 1 Mar 2025 00:15:54 +0800 Subject: [PATCH] Clean code --- .../android/tv/ui/activity/VideoActivity.java | 3 ++- .../java/com/fongmi/android/tv/bean/Danmaku.java | 8 ++++++++ .../com/fongmi/android/tv/player/Players.java | 16 ++++++++-------- .../fongmi/android/tv/player/danmaku/Loader.java | 16 ++++++++++------ .../android/tv/ui/dialog/DanmakuDialog.java | 2 +- .../android/tv/ui/activity/VideoActivity.java | 3 ++- 6 files changed, 31 insertions(+), 17 deletions(-) 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 72eecc898..b9ed646a2 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 @@ -38,6 +38,7 @@ import com.fongmi.android.tv.Constant; import com.fongmi.android.tv.R; import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.api.config.VodConfig; +import com.fongmi.android.tv.bean.Danmaku; import com.fongmi.android.tv.bean.Episode; import com.fongmi.android.tv.bean.Flag; import com.fongmi.android.tv.bean.History; @@ -1042,8 +1043,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List if (isRedirect()) return; if (event.getType() == RefreshEvent.Type.DETAIL) getDetail(); else if (event.getType() == RefreshEvent.Type.PLAYER) onRefresh(); - else if (event.getType() == RefreshEvent.Type.DANMAKU) mPlayers.setDanmaku(event.getPath()); else if (event.getType() == RefreshEvent.Type.SUBTITLE) mPlayers.setSub(Sub.from(event.getPath())); + else if (event.getType() == RefreshEvent.Type.DANMAKU) mPlayers.setDanmaku(Danmaku.from(event.getPath())); } @Subscribe(threadMode = ThreadMode.MAIN) diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Danmaku.java b/app/src/main/java/com/fongmi/android/tv/bean/Danmaku.java index cb4ebfd10..64e815b14 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Danmaku.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Danmaku.java @@ -22,6 +22,10 @@ public class Danmaku { return List.of(danmaku); } + public static Danmaku empty() { + return new Danmaku(); + } + public String getName() { return TextUtils.isEmpty(name) ? getUrl() : name; } @@ -45,4 +49,8 @@ public class Danmaku { public void setSelected(boolean selected) { this.selected = selected; } + + public boolean isEmpty() { + return getUrl().isEmpty(); + } } \ No newline at end of file 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 1d7974ce9..39b581abc 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 @@ -16,7 +16,6 @@ import android.support.v4.media.session.MediaControllerCompat; import android.support.v4.media.session.MediaSessionCompat; import android.support.v4.media.session.PlaybackStateCompat; import android.text.TextUtils; -import android.util.Log; import android.view.View; import androidx.annotation.NonNull; @@ -469,7 +468,7 @@ public class Players implements Player.Listener, ParseCallback, DrawHandler.Call private void setMediaItem(Result result, int timeout) { setMediaItem(result.getHeaders(), result.getRealUrl(), result.getFormat(), result.getDrm(), result.getSubs(), timeout); - setDanmaku(danmakus = result.getDanmaku()); + setDanmaku(result.getDanmaku()); } private void setMediaItem(Map headers, String url, String format, Drm drm, List subs, int timeout) { @@ -481,17 +480,18 @@ public class Players implements Player.Listener, ParseCallback, DrawHandler.Call prepare(); } - private void setDanmaku(List items) { + public void setDanmaku(List items) { + danmakus = items; + danmaku.release(); danmaku.setVisibility(items.isEmpty() ? View.GONE : View.VISIBLE); - if (!items.isEmpty()) setDanmaku(items.get(0).getUrl()); + if (!items.isEmpty()) App.execute(() -> danmaku.prepare(new Parser().load(new Loader(items.get(0)).getDataSource()), context)); if (!items.isEmpty()) items.get(0).setSelected(true); - else danmaku.release(); } - public void setDanmaku(String path) { - App.execute(() -> danmaku.prepare(new Parser().load(new Loader(path).getDataSource()), context)); - danmaku.setVisibility(path.isEmpty() ? View.GONE : View.VISIBLE); + public void setDanmaku(Danmaku item) { danmaku.release(); + danmaku.setVisibility(item.isEmpty() ? View.GONE : View.VISIBLE); + if (!item.isEmpty()) App.execute(() -> danmaku.prepare(new Parser().load(new Loader(item).getDataSource()), context)); } public void setDanmakuSize(float size) { diff --git a/app/src/main/java/com/fongmi/android/tv/player/danmaku/Loader.java b/app/src/main/java/com/fongmi/android/tv/player/danmaku/Loader.java index 75adc9651..f3de28fc1 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/danmaku/Loader.java +++ b/app/src/main/java/com/fongmi/android/tv/player/danmaku/Loader.java @@ -1,8 +1,10 @@ package com.fongmi.android.tv.player.danmaku; +import com.fongmi.android.tv.bean.Danmaku; import com.fongmi.android.tv.utils.UrlUtil; import com.github.catvod.net.OkHttp; +import java.io.IOException; import java.io.InputStream; import master.flame.danmaku.danmaku.loader.ILoader; @@ -13,10 +15,11 @@ public class Loader implements ILoader { private AndroidFileSource dataSource; - public Loader(String url) { + public Loader(Danmaku item) { try { - load(url); - } catch (Exception ignored) { + load(item.getUrl()); + } catch (Exception e) { + e.printStackTrace(); } } @@ -24,14 +27,15 @@ public class Loader implements ILoader { public void load(String url) throws IllegalDataException { try { OkHttp.cancel("danmaku"); - dataSource = new AndroidFileSource(OkHttp.newCall(UrlUtil.convert(url), "danmaku").execute().body().byteStream()); - } catch (Exception e) { - throw new IllegalDataException(); + load(OkHttp.newCall(UrlUtil.convert(url), "danmaku").execute().body().byteStream()); + } catch (IOException e) { + e.printStackTrace(); } } @Override public void load(InputStream stream) throws IllegalDataException { + dataSource = new AndroidFileSource(stream); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/ui/dialog/DanmakuDialog.java b/app/src/main/java/com/fongmi/android/tv/ui/dialog/DanmakuDialog.java index 9da1a4b53..d95626bf2 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/dialog/DanmakuDialog.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/dialog/DanmakuDialog.java @@ -59,7 +59,7 @@ public final class DanmakuDialog extends BaseDialog implements DanmakuAdapter.On @Override public void onItemClick(Danmaku item) { - player.setDanmaku(item.isSelected() ? item.getUrl() : ""); + player.setDanmaku(item.isSelected() ? item : Danmaku.empty()); dismiss(); } } \ No newline at end of file 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 4d0419ce2..850432d6e 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 @@ -42,6 +42,7 @@ import com.fongmi.android.tv.R; import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.api.config.VodConfig; import com.fongmi.android.tv.bean.CastVideo; +import com.fongmi.android.tv.bean.Danmaku; import com.fongmi.android.tv.bean.Episode; import com.fongmi.android.tv.bean.Flag; import com.fongmi.android.tv.bean.History; @@ -1084,8 +1085,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo if (isRedirect()) return; if (event.getType() == RefreshEvent.Type.DETAIL) getDetail(); else if (event.getType() == RefreshEvent.Type.PLAYER) onRefresh(); - else if (event.getType() == RefreshEvent.Type.DANMAKU) mPlayers.setDanmaku(event.getPath()); else if (event.getType() == RefreshEvent.Type.SUBTITLE) mPlayers.setSub(Sub.from(event.getPath())); + else if (event.getType() == RefreshEvent.Type.DANMAKU) mPlayers.setDanmaku(Danmaku.from(event.getPath())); } @Subscribe(threadMode = ThreadMode.MAIN)