From 39f434c19b045db0d22be7996ff186d1b2447051 Mon Sep 17 00:00:00 2001 From: okjack Date: Sun, 14 Jan 2024 14:47:35 +0800 Subject: [PATCH] danmu setting --- .../tv/ui/activity/SettingActivity.java | 8 +- .../tv/ui/activity/SettingPlayerActivity.java | 44 +++++- .../android/tv/ui/activity/VideoActivity.java | 4 +- .../tv/ui/dialog/DanmuMaxLineDialog.java | 53 +++++++ .../res/layout/activity_setting_player.xml | 133 ++++++++++++++++++ .../res/layout/dialog_danmu_maxline.xml | 19 +++ .../java/com/fongmi/android/tv/Setting.java | 16 +++ .../android/tv/impl/DanmuMaxLineCallback.java | 6 + .../android/tv/player/danmu/Parser.java | 5 +- app/src/main/res/values-zh-rCN/strings.xml | 20 +++ app/src/main/res/values-zh-rTW/strings.xml | 20 +++ app/src/main/res/values/strings.xml | 20 +++ .../android/tv/ui/activity/VideoActivity.java | 4 +- .../tv/ui/dialog/DanmuMaxLineDialog.java | 54 +++++++ .../tv/ui/fragment/SettingFragment.java | 8 +- .../tv/ui/fragment/SettingPlayerFragment.java | 44 +++++- .../res/layout/dialog_danmu_maxline.xml | 20 +++ .../res/layout/fragment_setting_player.xml | 111 +++++++++++++++ 18 files changed, 570 insertions(+), 19 deletions(-) create mode 100644 app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DanmuMaxLineDialog.java create mode 100644 app/src/leanback/res/layout/dialog_danmu_maxline.xml create mode 100644 app/src/main/java/com/fongmi/android/tv/impl/DanmuMaxLineCallback.java create mode 100644 app/src/mobile/java/com/fongmi/android/tv/ui/dialog/DanmuMaxLineDialog.java create mode 100644 app/src/mobile/res/layout/dialog_danmu_maxline.xml diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java index 0d5074032..0b94c13e3 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java @@ -125,7 +125,7 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit mBinding.wallDefault.setOnClickListener(this::setWallDefault); mBinding.wallRefresh.setOnClickListener(this::setWallRefresh); mBinding.quality.setOnClickListener(this::setQuality); - mBinding.player.setOnClickListener(this::setPlayer); + mBinding.player.setOnClickListener(this::onPlayerSetting); mBinding.decode.setOnClickListener(this::setDecode); mBinding.render.setOnClickListener(this::setRender); mBinding.scale.setOnClickListener(this::setScale); @@ -295,12 +295,6 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit RefreshEvent.image(); } - private void setPlayer(View view) { - int index = Setting.getPlayer(); - Setting.putPlayer(index = index == player.length - 1 ? 0 : ++index); - mBinding.playerText.setText(player[index]); - } - private void setDecode(View view) { int index = Setting.getDecode(); Setting.putDecode(index = index == decode.length - 1 ? 0 : ++index); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java index 150680a25..267fbb2dd 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java @@ -11,19 +11,24 @@ import com.fongmi.android.tv.R; import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.databinding.ActivitySettingPlayerBinding; import com.fongmi.android.tv.impl.BufferCallback; +import com.fongmi.android.tv.impl.DanmuMaxLineCallback; import com.fongmi.android.tv.impl.SubtitleCallback; import com.fongmi.android.tv.impl.UaCallback; import com.fongmi.android.tv.player.ExoUtil; import com.fongmi.android.tv.player.Players; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.dialog.BufferDialog; +import com.fongmi.android.tv.ui.dialog.DanmuMaxLineDialog; import com.fongmi.android.tv.ui.dialog.SubtitleDialog; import com.fongmi.android.tv.ui.dialog.UaDialog; import com.fongmi.android.tv.utils.ResUtil; -public class SettingPlayerActivity extends BaseActivity implements UaCallback, BufferCallback, SubtitleCallback { +public class SettingPlayerActivity extends BaseActivity implements UaCallback, BufferCallback, SubtitleCallback, DanmuMaxLineCallback { private ActivitySettingPlayerBinding mBinding; + private String[] player; + private String[] danmuSpeed; + private String[] danmuSize; private String[] caption; private String[] http; private String[] flag; @@ -43,6 +48,7 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B @Override protected void initView() { + mBinding.playerText.setText((player = ResUtil.getStringArray(R.array.select_player))[Setting.getPlayer()]); mBinding.uaText.setText(Setting.getUa()); mBinding.tunnelText.setText(getSwitch(Setting.isTunnel())); mBinding.bufferText.setText(String.valueOf(Setting.getBuffer())); @@ -54,10 +60,14 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B mBinding.flagText.setText((flag = ResUtil.getStringArray(R.array.select_flag))[Setting.getFlag()]); mBinding.httpText.setText((http = ResUtil.getStringArray(R.array.select_exo_http))[Setting.getHttp()]); mBinding.captionText.setText((caption = ResUtil.getStringArray(R.array.select_caption))[Setting.isCaption() ? 1 : 0]); + mBinding.danmuMaxLineText.setText(String.valueOf(Setting.getDanmuMaxLine(3))); + mBinding.danmuSizeText.setText((danmuSize = ResUtil.getStringArray(R.array.select_danmu_size))[Setting.getDanmuSize()]); + mBinding.danmuSpeedText.setText((danmuSpeed = ResUtil.getStringArray(R.array.select_danmu_speed))[Setting.getDanmuSpeed()]); } @Override protected void initEvent() { + mBinding.player.setOnClickListener(this::setPlayer); mBinding.ua.setOnClickListener(this::onUa); mBinding.http.setOnClickListener(this::setHttp); mBinding.flag.setOnClickListener(this::setFlag); @@ -66,12 +76,21 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B mBinding.caption.setOnClickListener(this::setCaption); mBinding.subtitle.setOnClickListener(this::onSubtitle); mBinding.caption.setOnLongClickListener(this::onCaption); + mBinding.danmuSpeed.setOnClickListener(this::setDanmuSpeed); + mBinding.danmuSize.setOnClickListener(this::setDanmuSize); + mBinding.danmuMaxLine.setOnClickListener(this::onDanmuMaxLine); } private void onUa(View view) { UaDialog.create(this).show(); } + private void setPlayer(View view) { + int index = Setting.getPlayer(); + Setting.putPlayer(index = index == player.length - 1 ? 0 : ++index); + mBinding.playerText.setText(player[index]); + } + @Override public void setUa(String ua) { mBinding.uaText.setText(ua); @@ -124,4 +143,27 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B public void setSubtitle(int size) { mBinding.subtitleText.setText(String.valueOf(size)); } + + public void setDanmuSpeed(View view) { + int index = Setting.getDanmuSpeed(); + Setting.putDanmuSpeed(index = index == danmuSpeed.length - 1 ? 0 : ++index); + mBinding.danmuSpeedText.setText(danmuSpeed[index]); + } + + public void setDanmuSize(View view) { + int index = Setting.getDanmuSize(); + Setting.putDanmuSize(index = index == danmuSize.length - 1 ? 0 : ++index); + mBinding.danmuSizeText.setText(danmuSize[index]); + } + + public void onDanmuMaxLine(View view) { + DanmuMaxLineDialog.create(this).show(); + } + + @Override + public void setDanmuMaxLine(int maxLine) { + mBinding.danmuMaxLineText.setText(String.valueOf(maxLine)); + Setting.putDanmuMaxLine(maxLine); + } + } 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 f6447c393..25b55dbe8 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 @@ -401,12 +401,14 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List private void setDanmuView() { mPlayers.setDanmuView(mBinding.danmaku); HashMap maxLines = new HashMap<>(); + float scrollSpeedFactor = 1.6f - (Setting.getDanmuSpeed() * 0.2f); + scrollSpeedFactor = scrollSpeedFactor < 0 ? 1.2f : scrollSpeedFactor; int maxLine = Setting.getDanmuMaxLine(3); maxLines.put(BaseDanmaku.TYPE_FIX_TOP, maxLine); maxLines.put(BaseDanmaku.TYPE_SCROLL_RL, maxLine); maxLines.put(BaseDanmaku.TYPE_SCROLL_LR, maxLine); maxLines.put(BaseDanmaku.TYPE_FIX_BOTTOM, maxLine); - mDanmakuContext.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3).setMaximumLines(maxLines).setDanmakuMargin(12).setScaleTextSize(0.8f); + mDanmakuContext.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3).setMaximumLines(maxLines).setScrollSpeedFactor(scrollSpeedFactor).setDanmakuMargin(12).setScaleTextSize(0.8f); mBinding.control.danmu.setActivated(Setting.isDanmu()); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DanmuMaxLineDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DanmuMaxLineDialog.java new file mode 100644 index 000000000..9aa37ebcb --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DanmuMaxLineDialog.java @@ -0,0 +1,53 @@ +package com.fongmi.android.tv.ui.dialog; + +import android.view.LayoutInflater; + +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.FragmentActivity; + +import com.fongmi.android.tv.Setting; +import com.fongmi.android.tv.databinding.DialogDanmuMaxlineBinding; +import com.fongmi.android.tv.impl.DanmuMaxLineCallback; +import com.fongmi.android.tv.utils.KeyUtil; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +public class DanmuMaxLineDialog { + + private final DialogDanmuMaxlineBinding binding; + private final DanmuMaxLineCallback callback; + private final AlertDialog dialog; + + public static DanmuMaxLineDialog create(FragmentActivity activity) { + return new DanmuMaxLineDialog(activity); + } + + public DanmuMaxLineDialog(FragmentActivity activity) { + this.callback = (DanmuMaxLineCallback) activity; + this.binding = DialogDanmuMaxlineBinding.inflate(LayoutInflater.from(activity)); + this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create(); + } + + public void show() { + initDialog(); + initView(); + initEvent(); + } + + private void initDialog() { + dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); + dialog.show(); + } + + private void initView() { + binding.slider.setValue(Setting.getDanmuMaxLine(3)); + } + + private void initEvent() { + binding.slider.addOnChangeListener((slider, value, fromUser) -> callback.setDanmuMaxLine((int) value)); + binding.slider.setOnKeyListener((view, keyCode, event) -> { + boolean enter = KeyUtil.isEnterKey(event); + if (enter) dialog.dismiss(); + return enter; + }); + } +} diff --git a/app/src/leanback/res/layout/activity_setting_player.xml b/app/src/leanback/res/layout/activity_setting_player.xml index 3895a612a..65daeff72 100644 --- a/app/src/leanback/res/layout/activity_setting_player.xml +++ b/app/src/leanback/res/layout/activity_setting_player.xml @@ -13,10 +13,43 @@ android:orientation="vertical" android:padding="24dp"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/leanback/res/layout/dialog_danmu_maxline.xml b/app/src/leanback/res/layout/dialog_danmu_maxline.xml new file mode 100644 index 000000000..97f2d3c78 --- /dev/null +++ b/app/src/leanback/res/layout/dialog_danmu_maxline.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file 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 141dd10f8..0978f1dce 100644 --- a/app/src/main/java/com/fongmi/android/tv/Setting.java +++ b/app/src/main/java/com/fongmi/android/tv/Setting.java @@ -249,6 +249,22 @@ public class Setting { Prefers.put("danmu_maxline", maxline); } + public static int getDanmuSpeed() { + return Prefers.getInt("danmu_speed", 2); + } + + public static void putDanmuSpeed(int speed) { + Prefers.put("danmu_speed", speed); + } + + public static int getDanmuSize() { + return Prefers.getInt("danmu_size", 0); + } + + public static void putDanmuSize(int size) { + Prefers.put("danmu_size", size); + } + public static boolean isCaption() { return Prefers.getBoolean("caption"); } diff --git a/app/src/main/java/com/fongmi/android/tv/impl/DanmuMaxLineCallback.java b/app/src/main/java/com/fongmi/android/tv/impl/DanmuMaxLineCallback.java new file mode 100644 index 000000000..7cf238045 --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/impl/DanmuMaxLineCallback.java @@ -0,0 +1,6 @@ +package com.fongmi.android.tv.impl; + +public interface DanmuMaxLineCallback { + + void setDanmuMaxLine(int maxLine); +} diff --git a/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java b/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java index cf6d8b5d5..12a121f3d 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java +++ b/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java @@ -3,6 +3,7 @@ package com.fongmi.android.tv.player.danmu; import android.graphics.Color; import android.text.TextUtils; +import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.bean.Danmu; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Path; @@ -28,9 +29,11 @@ public class Parser extends BaseDanmakuParser { private float scaleX; private float scaleY; private int index; + private float danmuSizeTimes; public Parser(String path) { this.danmu = Danmu.fromXml(getContent(path)); + this.danmuSizeTimes = 1.0f + (Setting.getDanmuSize() * 0.2f); } private String getContent(String path) { @@ -70,7 +73,7 @@ public class Parser extends BaseDanmakuParser { item = mContext.mDanmakuFactory.createDanmaku(type, mContext); item.setTime(time); item.setTimer(mTimer); - item.textSize = size; + item.textSize = size * danmuSizeTimes; item.textColor = color; item.textShadowColor = color <= Color.BLACK ? Color.WHITE : Color.BLACK; item.flags = mContext.mGlobalFlagValues; diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index cf10f2388..30303cfd7 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -80,6 +80,9 @@ 图片品质 图片尺寸 DoH + 弹幕速度 + 弹幕大小 + 弹幕最大行数 Proxy 缓存 备份 @@ -142,6 +145,23 @@ EXO + + 超慢 + + 适中 + + 超快 + + + + 1倍 + 1.2倍 + 1.4倍 + 1.6倍 + 1.8倍 + 2.0倍 + + diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index e8dd7f7e1..d8beea87e 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -80,6 +80,9 @@ 圖片品質 圖片尺寸 DoH + 弹幕速度 + 弹幕大小 + 弹幕最大行數 Proxy 暫存 備份 @@ -142,6 +145,23 @@ EXO + + 超慢 + + 適中 + + 超快 + + + + 1倍 + 1.2倍 + 1.4倍 + 1.6倍 + 1.8倍 + 2.0倍 + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 231a1b93c..25d8decf3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -80,6 +80,9 @@ Image quality Image size DoH + Bullet Speed + Bullet Size + Bullet Max Line Proxy Cache Backup @@ -142,6 +145,23 @@ EXO + + Super Slow + Slow + Moderate + Fast + Super Fast + + + + 1 times + 1.2 times + 1.4 times + 1.6 times + 1.8 times + 2.0 times + + Surface Texture 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 9054b8e9c..c6f183769 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 @@ -414,12 +414,14 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo private void setDanmuView() { mPlayers.setDanmuView(mBinding.danmaku); HashMap maxLines = new HashMap<>(); + float scrollSpeedFactor = 1.6f - (Setting.getDanmuSpeed() * 0.2f); + scrollSpeedFactor = scrollSpeedFactor < 0 ? 1.2f : scrollSpeedFactor; int maxLine = Setting.getDanmuMaxLine(2); maxLines.put(BaseDanmaku.TYPE_FIX_TOP, maxLine); maxLines.put(BaseDanmaku.TYPE_SCROLL_RL, maxLine); maxLines.put(BaseDanmaku.TYPE_SCROLL_LR, maxLine); maxLines.put(BaseDanmaku.TYPE_FIX_BOTTOM, maxLine); - mDanmakuContext.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3).setMaximumLines(maxLines).setDanmakuMargin(8).setScaleTextSize(0.8f); + mDanmakuContext.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3).setMaximumLines(maxLines).setScrollSpeedFactor(scrollSpeedFactor).setDanmakuMargin(8).setScaleTextSize(0.8f); checkDanmuImg(); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/DanmuMaxLineDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/DanmuMaxLineDialog.java new file mode 100644 index 000000000..b88515132 --- /dev/null +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/DanmuMaxLineDialog.java @@ -0,0 +1,54 @@ +package com.fongmi.android.tv.ui.dialog; + +import android.content.DialogInterface; +import android.view.LayoutInflater; + +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.Fragment; + +import com.fongmi.android.tv.R; +import com.fongmi.android.tv.Setting; +import com.fongmi.android.tv.databinding.DialogDanmuMaxlineBinding; +import com.fongmi.android.tv.impl.DanmuMaxLineCallback; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +public class DanmuMaxLineDialog { + + private final DialogDanmuMaxlineBinding binding; + private final DanmuMaxLineCallback callback; + private int value; + + public static DanmuMaxLineDialog create(Fragment fragment) { + return new DanmuMaxLineDialog(fragment); + } + + public DanmuMaxLineDialog(Fragment fragment) { + this.callback = (DanmuMaxLineCallback) fragment; + this.binding = DialogDanmuMaxlineBinding.inflate(LayoutInflater.from(fragment.getContext())); + } + + public void show() { + initDialog(); + initView(); + } + + private void initDialog() { + AlertDialog dialog = new MaterialAlertDialogBuilder(binding.getRoot().getContext()).setTitle(R.string.setting_danmu_maxline).setView(binding.getRoot()).setPositiveButton(R.string.dialog_positive, this::onPositive).setNegativeButton(R.string.dialog_negative, this::onNegative).create(); + dialog.getWindow().setDimAmount(0); + dialog.show(); + } + + private void initView() { + binding.slider.setValue(value = Setting.getDanmuMaxLine(2)); + } + + private void onPositive(DialogInterface dialog, int which) { + callback.setDanmuMaxLine((int) binding.slider.getValue()); + dialog.dismiss(); + } + + private void onNegative(DialogInterface dialog, int which) { + callback.setDanmuMaxLine(value); + dialog.dismiss(); + } +} diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java index ac7282023..7da37b783 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java @@ -131,7 +131,7 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit mBinding.player.setOnLongClickListener(this::onPlayerSetting); mBinding.wallDefault.setOnClickListener(this::setWallDefault); mBinding.wallRefresh.setOnClickListener(this::setWallRefresh); - mBinding.player.setOnClickListener(this::setPlayer); + mBinding.player.setOnClickListener(this::onPlayerSetting); mBinding.decode.setOnClickListener(this::setDecode); mBinding.render.setOnClickListener(this::setRender); mBinding.scale.setOnClickListener(this::setScale); @@ -295,12 +295,6 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit }); } - private void setPlayer(View view) { - int index = Setting.getPlayer(); - Setting.putPlayer(index = index == player.length - 1 ? 0 : ++index); - mBinding.playerText.setText(player[index]); - } - private void setDecode(View view) { int index = Setting.getDecode(); Setting.putDecode(index = index == decode.length - 1 ? 0 : ++index); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java index 29da95c35..f36c95ce8 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java @@ -14,20 +14,25 @@ import com.fongmi.android.tv.R; import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.databinding.FragmentSettingPlayerBinding; import com.fongmi.android.tv.impl.BufferCallback; +import com.fongmi.android.tv.impl.DanmuMaxLineCallback; import com.fongmi.android.tv.impl.SubtitleCallback; import com.fongmi.android.tv.impl.UaCallback; import com.fongmi.android.tv.player.ExoUtil; import com.fongmi.android.tv.player.Players; import com.fongmi.android.tv.ui.base.BaseFragment; import com.fongmi.android.tv.ui.dialog.BufferDialog; +import com.fongmi.android.tv.ui.dialog.DanmuMaxLineDialog; import com.fongmi.android.tv.ui.dialog.SubtitleDialog; import com.fongmi.android.tv.ui.dialog.UaDialog; import com.fongmi.android.tv.utils.ResUtil; import com.google.android.material.dialog.MaterialAlertDialogBuilder; -public class SettingPlayerFragment extends BaseFragment implements UaCallback, BufferCallback, SubtitleCallback { +public class SettingPlayerFragment extends BaseFragment implements UaCallback, BufferCallback, SubtitleCallback, DanmuMaxLineCallback { private FragmentSettingPlayerBinding mBinding; + private String[] player; + private String[] danmuSpeed; + private String[] danmuSize; private String[] background; private String[] caption; private String[] http; @@ -48,6 +53,7 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B @Override protected void initView() { + mBinding.playerText.setText((player = ResUtil.getStringArray(R.array.select_player))[Setting.getPlayer()]); mBinding.uaText.setText(Setting.getUa()); mBinding.tunnelText.setText(getSwitch(Setting.isTunnel())); mBinding.captionText.setText(getSwitch(Setting.isCaption())); @@ -57,11 +63,15 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B mBinding.httpText.setText((http = ResUtil.getStringArray(R.array.select_exo_http))[Setting.getHttp()]); mBinding.captionText.setText((caption = ResUtil.getStringArray(R.array.select_caption))[Setting.isCaption() ? 1 : 0]); mBinding.backgroundText.setText((background = ResUtil.getStringArray(R.array.select_background))[Setting.getBackground()]); + mBinding.danmuMaxLineText.setText(String.valueOf(Setting.getDanmuMaxLine(2))); + mBinding.danmuSizeText.setText((danmuSize = ResUtil.getStringArray(R.array.select_danmu_size))[Setting.getDanmuSize()]); + mBinding.danmuSpeedText.setText((danmuSpeed = ResUtil.getStringArray(R.array.select_danmu_speed))[Setting.getDanmuSpeed()]); setVisible(); } @Override protected void initEvent() { + mBinding.player.setOnClickListener(this::setPlayer); mBinding.ua.setOnClickListener(this::onUa); mBinding.http.setOnClickListener(this::setHttp); mBinding.flag.setOnClickListener(this::setFlag); @@ -71,6 +81,9 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B mBinding.subtitle.setOnClickListener(this::onSubtitle); mBinding.caption.setOnLongClickListener(this::onCaption); mBinding.background.setOnClickListener(this::setBackground); + mBinding.danmuSpeed.setOnClickListener(this::setDanmuSpeed); + mBinding.danmuSize.setOnClickListener(this::setDanmuSize); + mBinding.danmuMaxLine.setOnClickListener(this::onDanmuMaxLine); } private void setVisible() { @@ -84,6 +97,12 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B UaDialog.create(this).show(); } + private void setPlayer(View view) { + int index = Setting.getPlayer(); + Setting.putPlayer(index = index == player.length - 1 ? 0 : ++index); + mBinding.playerText.setText(player[index]); + } + @Override public void setUa(String ua) { mBinding.uaText.setText(ua); @@ -149,4 +168,27 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B public void onHiddenChanged(boolean hidden) { if (!hidden) setVisible(); } + + public void setDanmuSpeed(View view) { + int index = Setting.getDanmuSpeed(); + Setting.putDanmuSpeed(index = index == danmuSpeed.length - 1 ? 0 : ++index); + mBinding.danmuSpeedText.setText(danmuSpeed[index]); + } + + public void setDanmuSize(View view) { + int index = Setting.getDanmuSize(); + Setting.putDanmuSize(index = index == danmuSize.length - 1 ? 0 : ++index); + mBinding.danmuSizeText.setText(danmuSize[index]); + } + + public void onDanmuMaxLine(View view) { + DanmuMaxLineDialog.create(this).show(); + } + + @Override + public void setDanmuMaxLine(int maxLine) { + mBinding.danmuMaxLineText.setText(String.valueOf(maxLine)); + Setting.putDanmuMaxLine(maxLine); + } + } diff --git a/app/src/mobile/res/layout/dialog_danmu_maxline.xml b/app/src/mobile/res/layout/dialog_danmu_maxline.xml new file mode 100644 index 000000000..8a8475491 --- /dev/null +++ b/app/src/mobile/res/layout/dialog_danmu_maxline.xml @@ -0,0 +1,20 @@ + + + + + + \ No newline at end of file diff --git a/app/src/mobile/res/layout/fragment_setting_player.xml b/app/src/mobile/res/layout/fragment_setting_player.xml index becf65eb7..1ba5f6f55 100644 --- a/app/src/mobile/res/layout/fragment_setting_player.xml +++ b/app/src/mobile/res/layout/fragment_setting_player.xml @@ -43,10 +43,40 @@ android:paddingEnd="16dp" android:paddingBottom="16dp"> + + + + + + + + + @@ -274,6 +304,87 @@ android:textSize="16sp" /> + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file