From 0bc684d12195ff02a9ce67c8b5d3ccf62844d32e Mon Sep 17 00:00:00 2001 From: okjack Date: Wed, 24 Jan 2024 21:10:53 +0800 Subject: [PATCH] danmu sync setting --- .../java/com/fongmi/android/tv/Setting.java | 8 +++++ .../com/fongmi/android/tv/player/Players.java | 5 +++- app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + .../tv/ui/fragment/SettingCustomFragment.java | 13 +++++++++ .../res/layout/fragment_setting_custom.xml | 29 +++++++++++++++++++ 7 files changed, 57 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/fongmi/android/tv/Setting.java b/app/src/main/java/com/fongmi/android/tv/Setting.java index 0329cace5..04c3620be 100644 --- a/app/src/main/java/com/fongmi/android/tv/Setting.java +++ b/app/src/main/java/com/fongmi/android/tv/Setting.java @@ -285,6 +285,14 @@ public class Setting { return Math.min(Math.max(Prefers.getInt("danmu_alpha", 90), 10), 100); } + public static void putDanmuSync(boolean sync) { + Prefers.put("danmu_sync", sync); + } + + public static boolean isDanmuSync() { + return Prefers.getBoolean("danmu_sync", false); + } + public static void putDanmuAlpha(int alpha) { Prefers.put("danmu_alpha", alpha); } 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 c9fd7a901..6e814c670 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 @@ -85,6 +85,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic private int player; private int error; private int retry; + private boolean danmuSync; public static boolean isExo(int type) { return type == EXO; @@ -108,6 +109,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic builder = new StringBuilder(); runnable = ErrorEvent::timeout; formatter = new Formatter(builder, Locale.getDefault()); + danmuSync = Setting.isDanmuSync(); createSession(activity); return this; } @@ -675,7 +677,8 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic @Override public void updateTimer(DanmakuTimer timer) { - if (speed != 1) timer.add((long) (timer.lastInterval() * (speed - 1))); + if (danmuSync) App.post(() -> timer.update(getPosition())); + else if (speed != 1) timer.add((long) (timer.lastInterval() * (speed - 1))); } @Override diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 2bcf39bd4..b5d1ffd9a 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -93,6 +93,7 @@ 弹幕大小 弹幕行数 弹幕透明 + 弹幕同步 后台播放 线路播放 选集样式 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 10b5f45b6..454c092f8 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -93,6 +93,7 @@ 彈幕大小 彈幕行數 彈幕透明 + 彈幕同步 背景播放 線路播放 選集樣式 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 44bb9d253..23a597076 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -93,6 +93,7 @@ Danmu size Danmu line Danmu alpha + Danmu sync Background play Flag play Episode style diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java index 0a5e626b4..bfb8b2db4 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java @@ -37,11 +37,19 @@ public class SettingCustomFragment extends BaseFragment { @Override protected void initView() { mBinding.sizeText.setText((size = ResUtil.getStringArray(R.array.select_size))[Setting.getSize()]); + mBinding.danmuSyncText.setText(getSwitch(Setting.isDanmuSync())); } @Override protected void initEvent() { + mBinding.title.setOnLongClickListener(this::onTitle); mBinding.size.setOnClickListener(this::setSize); + mBinding.danmuSync.setOnClickListener(this::setDanmuSync); + } + + private boolean onTitle(View view) { + mBinding.danmuSync.setVisibility(View.VISIBLE); + return true; } private void setSize(View view) { @@ -53,5 +61,10 @@ public class SettingCustomFragment extends BaseFragment { }).show(); } + private void setDanmuSync(View view) { + Setting.putDanmuSync(!Setting.isDanmuSync()); + mBinding.danmuSyncText.setText(getSwitch(Setting.isDanmuSync())); + } + } diff --git a/app/src/mobile/res/layout/fragment_setting_custom.xml b/app/src/mobile/res/layout/fragment_setting_custom.xml index f90c7554c..97b3852c2 100644 --- a/app/src/mobile/res/layout/fragment_setting_custom.xml +++ b/app/src/mobile/res/layout/fragment_setting_custom.xml @@ -14,6 +14,7 @@ app:liftOnScrollColor="@color/transparent"> + + + + + + + + \ No newline at end of file