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" />