danmu setting

pull/208/head
okjack 2 years ago
parent d2be54d6d0
commit 39f434c19b
  1. 8
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java
  2. 44
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java
  3. 4
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  4. 53
      app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DanmuMaxLineDialog.java
  5. 133
      app/src/leanback/res/layout/activity_setting_player.xml
  6. 19
      app/src/leanback/res/layout/dialog_danmu_maxline.xml
  7. 16
      app/src/main/java/com/fongmi/android/tv/Setting.java
  8. 6
      app/src/main/java/com/fongmi/android/tv/impl/DanmuMaxLineCallback.java
  9. 5
      app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java
  10. 20
      app/src/main/res/values-zh-rCN/strings.xml
  11. 20
      app/src/main/res/values-zh-rTW/strings.xml
  12. 20
      app/src/main/res/values/strings.xml
  13. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  14. 54
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/DanmuMaxLineDialog.java
  15. 8
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java
  16. 44
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java
  17. 20
      app/src/mobile/res/layout/dialog_danmu_maxline.xml
  18. 111
      app/src/mobile/res/layout/fragment_setting_player.xml

@ -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);

@ -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);
}
}

@ -401,12 +401,14 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private void setDanmuView() {
mPlayers.setDanmuView(mBinding.danmaku);
HashMap<Integer, Integer> 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());
}

@ -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;
});
}
}

@ -13,10 +13,43 @@
android:orientation="vertical"
android:padding="24dp">
<LinearLayout
android:id="@+id/player"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_weight="0.3"
android:text="@string/setting_player"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/playerText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:ellipsize="middle"
android:gravity="end"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="EXO" />
</LinearLayout>
<LinearLayout
android:id="@+id/ua"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
@ -227,5 +260,105 @@
android:textSize="18sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/danmuSpeed"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_weight="0.3"
android:text="@string/setting_danmu_speed"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/danmuSpeedText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:ellipsize="middle"
android:gravity="end"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="慢" />
</LinearLayout>
<LinearLayout
android:id="@+id/danmuSize"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_weight="0.3"
android:text="@string/setting_danmu_size"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/danmuSizeText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:ellipsize="middle"
android:gravity="end"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="1倍" />
</LinearLayout>
<LinearLayout
android:id="@+id/danmuMaxLine"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_weight="0.3"
android:text="@string/setting_danmu_maxline"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/danmuMaxLineText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:ellipsize="middle"
android:gravity="end"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="1" />
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="48dp">
<com.google.android.material.slider.Slider
android:id="@+id/slider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stepSize="1"
android:valueFrom="1"
android:valueTo="15"
app:thumbColor="@color/blue_500"
app:trackColorActive="@color/blue_500"
app:trackColorInactive="@color/blue_50" />
</FrameLayout>

@ -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");
}

@ -0,0 +1,6 @@
package com.fongmi.android.tv.impl;
public interface DanmuMaxLineCallback {
void setDanmuMaxLine(int maxLine);
}

@ -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;

@ -80,6 +80,9 @@
<string name="setting_quality">图片品质</string>
<string name="setting_size">图片尺寸</string>
<string name="setting_doh">DoH</string>
<string name="setting_danmu_speed">弹幕速度</string>
<string name="setting_danmu_size">弹幕大小</string>
<string name="setting_danmu_maxline">弹幕最大行数</string>
<string name="setting_proxy">Proxy</string>
<string name="setting_cache">缓存</string>
<string name="setting_backup">备份</string>
@ -142,6 +145,23 @@
<item>EXO</item>
</string-array>
<string-array name="select_danmu_speed">
<item>超慢</item>
<item></item>
<item>适中</item>
<item></item>
<item>超快</item>
</string-array>
<string-array name="select_danmu_size">
<item>1倍</item>
<item>1.2倍</item>
<item>1.4倍</item>
<item>1.6倍</item>
<item>1.8倍</item>
<item>2.0倍</item>
</string-array>
<string-array name="select_quality">
<item></item>
<item></item>

@ -80,6 +80,9 @@
<string name="setting_quality">圖片品質</string>
<string name="setting_size">圖片尺寸</string>
<string name="setting_doh">DoH</string>
<string name="setting_danmu_speed">弹幕速度</string>
<string name="setting_danmu_size">弹幕大小</string>
<string name="setting_danmu_maxline">弹幕最大行數</string>
<string name="setting_proxy">Proxy</string>
<string name="setting_cache">暫存</string>
<string name="setting_backup">備份</string>
@ -142,6 +145,23 @@
<item>EXO</item>
</string-array>
<string-array name="select_danmu_speed">
<item>超慢</item>
<item></item>
<item>適中</item>
<item></item>
<item>超快</item>
</string-array>
<string-array name="select_danmu_size">
<item>1倍</item>
<item>1.2倍</item>
<item>1.4倍</item>
<item>1.6倍</item>
<item>1.8倍</item>
<item>2.0倍</item>
</string-array>
<string-array name="select_quality">
<item></item>
<item></item>

@ -80,6 +80,9 @@
<string name="setting_quality">Image quality</string>
<string name="setting_size">Image size</string>
<string name="setting_doh">DoH</string>
<string name="setting_danmu_speed">Bullet Speed</string>
<string name="setting_danmu_size">Bullet Size</string>
<string name="setting_danmu_maxline">Bullet Max Line</string>
<string name="setting_proxy">Proxy</string>
<string name="setting_cache">Cache</string>
<string name="setting_backup">Backup</string>
@ -142,6 +145,23 @@
<item>EXO</item>
</string-array>
<string-array name="select_danmu_speed">
<item>Super Slow</item>
<item>Slow</item>
<item>Moderate</item>
<item>Fast</item>
<item>Super Fast</item>
</string-array>
<string-array name="select_danmu_size">
<item>1 times</item>
<item>1.2 times</item>
<item>1.4 times</item>
<item>1.6 times</item>
<item>1.8 times</item>
<item>2.0 times</item>
</string-array>
<string-array name="select_render">
<item>Surface</item>
<item>Texture</item>

@ -414,12 +414,14 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private void setDanmuView() {
mPlayers.setDanmuView(mBinding.danmaku);
HashMap<Integer, Integer> 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();
}

@ -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();
}
}

@ -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);

@ -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);
}
}

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="24dp"
android:paddingTop="16dp"
android:paddingEnd="24dp">
<com.google.android.material.slider.Slider
android:id="@+id/slider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stepSize="1"
android:valueFrom="1"
android:valueTo="15"
app:trackColorInactive="@color/blue_50" />
</LinearLayout>

@ -43,10 +43,40 @@
android:paddingEnd="16dp"
android:paddingBottom="16dp">
<LinearLayout
android:id="@+id/player"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_item"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_player"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/playerText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:gravity="end"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="EXO" />
</LinearLayout>
<LinearLayout
android:id="@+id/ua"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/shape_item"
android:orientation="horizontal">
@ -274,6 +304,87 @@
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/danmuSpeed"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/shape_item"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_danmu_speed"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/danmuSpeedText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="慢" />
</LinearLayout>
<LinearLayout
android:id="@+id/danmuSize"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/shape_item"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_danmu_size"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/danmuSizeText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="1倍" />
</LinearLayout>
<LinearLayout
android:id="@+id/danmuMaxLine"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/shape_item"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_danmu_maxline"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/danmuMaxLineText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="1" />
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Loading…
Cancel
Save