diff --git a/app/src/leanback/res/layout/activity_video.xml b/app/src/leanback/res/layout/activity_video.xml index fc63c5e70..9fdad92f3 100644 --- a/app/src/leanback/res/layout/activity_video.xml +++ b/app/src/leanback/res/layout/activity_video.xml @@ -30,8 +30,7 @@ + android:layout_height="match_parent" /> from(String path) { + public static Danmaku from(String path) { if (path.startsWith("http")) { return http(path); } else { @@ -24,18 +25,18 @@ public class Danmaku { } } - public static List http(String path) { + public static Danmaku http(String path) { Danmaku danmaku = new Danmaku(); danmaku.setName(path); danmaku.setUrl(path); - return List.of(danmaku); + return danmaku; } - public static List file(String path) { + public static Danmaku file(String path) { Danmaku danmaku = new Danmaku(); danmaku.setName(new File(path).getName()); danmaku.setUrl("file:/" + path); - return List.of(danmaku); + return danmaku; } public static Danmaku empty() { @@ -69,4 +70,12 @@ public class Danmaku { public boolean isEmpty() { return getUrl().isEmpty(); } + + @Override + public boolean equals(@Nullable Object obj) { + if (this == obj) return true; + if (!(obj instanceof Danmaku)) return false; + Danmaku it = (Danmaku) obj; + return getUrl().equals(it.getUrl()); + } } \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/android/tv/gson/DanmakuAdapter.java b/app/src/main/java/com/fongmi/android/tv/gson/DanmakuAdapter.java index d9269da79..048149993 100644 --- a/app/src/main/java/com/fongmi/android/tv/gson/DanmakuAdapter.java +++ b/app/src/main/java/com/fongmi/android/tv/gson/DanmakuAdapter.java @@ -9,6 +9,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonParseException; import java.lang.reflect.Type; +import java.util.Arrays; import java.util.List; public class DanmakuAdapter implements JsonDeserializer> { @@ -18,6 +19,6 @@ public class DanmakuAdapter implements JsonDeserializer> { if (!json.isJsonPrimitive()) return App.gson().fromJson(json, typeOfT); String text = json.getAsString().trim(); if (Json.isArray(text)) return App.gson().fromJson(text, typeOfT); - else return Danmaku.from(text); + else return Arrays.asList(Danmaku.from(text)); } } 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 953f0665b..183d29a64 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.view.View; import androidx.annotation.NonNull; import androidx.media3.common.AudioAttributes; @@ -464,7 +463,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(result.getDanmaku()); + setDanmaku(danmakus = result.getDanmaku()); } private void setMediaItem(Map headers, String url, String format, Drm drm, List subs, int timeout) { @@ -476,18 +475,17 @@ public class Players implements Player.Listener, ParseCallback, DrawHandler.Call prepare(); } - public void setDanmaku(List items) { - danmakus = items; - danmaku.release(); - danmaku.setVisibility(items.isEmpty() ? View.GONE : View.VISIBLE); - 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); + private void setDanmaku(List items) { + if (items.isEmpty()) danmaku.release(); + else setDanmaku(items.get(0)); } public void setDanmaku(Danmaku item) { danmaku.release(); - danmaku.setVisibility(item.isEmpty() ? View.GONE : View.VISIBLE); + if (danmakus == null) danmakus = new ArrayList<>(); + if (!item.isEmpty() && !danmakus.contains(item)) danmakus.add(0, item); if (!item.isEmpty()) App.execute(() -> danmaku.prepare(new Parser().load(new Loader(item).getDataSource()), context)); + for (int i = 0; i < danmakus.size(); i++) danmakus.get(i).setSelected(danmakus.get(i).getUrl().equals(item.getUrl()) && !danmakus.get(i).isSelected()); } public void setDanmakuSize(float size) { diff --git a/app/src/main/java/com/fongmi/android/tv/ui/adapter/DanmakuAdapter.java b/app/src/main/java/com/fongmi/android/tv/ui/adapter/DanmakuAdapter.java index 1986f4f1f..955c11aa5 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/adapter/DanmakuAdapter.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/adapter/DanmakuAdapter.java @@ -69,10 +69,7 @@ public class DanmakuAdapter extends RecyclerView.Adapter + android:layout_height="match_parent" /> + android:layout_height="match_parent" />