From ef37ed403af906c452bd603a07b7821d42f64643 Mon Sep 17 00:00:00 2001 From: jhengazuji Date: Sun, 16 Nov 2025 15:10:54 +0800 Subject: [PATCH] Clean code --- .../com/fongmi/android/tv/player/Players.java | 2 +- .../android/tv/player/danmaku/DanPlayer.java | 25 ++++++++++++------- .../android/tv/player/danmaku/Parser.java | 1 + 3 files changed, 18 insertions(+), 10 deletions(-) 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 78cfaf888..66a2dfefd 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 @@ -488,7 +488,7 @@ public class Players implements Player.Listener, ParseCallback { } public void setDanmaku(Danmaku item) { - danPlayer.setDanmaku(item); + danPlayer.cancel().setDanmaku(item); if (danmakus == null) danmakus = new ArrayList<>(); if (!item.isEmpty() && !danmakus.contains(item)) danmakus.add(0, item); for (int i = 0; i < danmakus.size(); i++) danmakus.get(i).setSelected(danmakus.get(i).getUrl().equals(item.getUrl()) && !danmakus.get(i).isSelected()); diff --git a/app/src/main/java/com/fongmi/android/tv/player/danmaku/DanPlayer.java b/app/src/main/java/com/fongmi/android/tv/player/danmaku/DanPlayer.java index 6a7cbf130..6d0b5ae61 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/danmaku/DanPlayer.java +++ b/app/src/main/java/com/fongmi/android/tv/player/danmaku/DanPlayer.java @@ -9,6 +9,7 @@ import com.fongmi.android.tv.utils.ResUtil; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.Future; import master.flame.danmaku.controller.DrawHandler; import master.flame.danmaku.danmaku.model.BaseDanmaku; @@ -23,6 +24,7 @@ public class DanPlayer implements DrawHandler.Callback { private final Parser parser; private final Loader loader; private DanmakuView view; + private Future future; private Players player; public DanPlayer() { @@ -59,6 +61,13 @@ public class DanPlayer implements DrawHandler.Callback { return view != null && view.isPrepared(); } + public DanPlayer cancel() { + if (future == null) return this; + future.cancel(true); + future = null; + return this; + } + public void seekTo(long time) { App.execute(() -> { if (!isPrepared()) return; @@ -69,34 +78,32 @@ public class DanPlayer implements DrawHandler.Callback { public void play() { App.execute(() -> { - if (!isPrepared()) return; - view.resume(); + if (isPrepared()) view.resume(); }); } public void pause() { App.execute(() -> { - if (!isPrepared()) return; - view.pause(); + if (isPrepared()) view.pause(); }); } public void stop() { + cancel(); App.execute(() -> { - if (!isPrepared()) return; - view.stop(); + if (view != null) view.stop(); }); } public void release() { + cancel(); App.execute(() -> { - if (!isPrepared()) return; - view.release(); + if (view != null) view.release(); }); } public void setDanmaku(Danmaku item) { - App.execute(() -> { + future = App.submit(() -> { if (view != null) view.release(); if (item.isEmpty() || view == null) return; view.prepare(parser.load(loader.load(item).getDataSource()), context); diff --git a/app/src/main/java/com/fongmi/android/tv/player/danmaku/Parser.java b/app/src/main/java/com/fongmi/android/tv/player/danmaku/Parser.java index ee1953c9b..36a3af110 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/danmaku/Parser.java +++ b/app/src/main/java/com/fongmi/android/tv/player/danmaku/Parser.java @@ -29,6 +29,7 @@ public class Parser extends BaseDanmakuParser { AndroidFileSource source = (AndroidFileSource) mDataSource; try (BufferedReader br = new BufferedReader(new InputStreamReader(source.data()))) { while ((line = br.readLine()) != null) { + if (Thread.interrupted()) return result; if (pattern == null) pattern = line.startsWith("<") ? XML : TXT; Matcher matcher = pattern.matcher(line); while (matcher.find() && matcher.groupCount() == 2) {