pull/219/head
FongMi 2 years ago
parent 78bbdc77e2
commit 3b848ea368
  1. 2
      app/schemas/com.fongmi.android.tv.db.AppDatabase/28.json
  2. 77
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java
  3. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  4. 24
      app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DanmuLineDialog.java
  5. 53
      app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DanmuSizeDialog.java
  6. 97
      app/src/leanback/res/layout/activity_setting_player.xml
  7. 0
      app/src/leanback/res/layout/dialog_danmu_line.xml
  8. 19
      app/src/leanback/res/layout/dialog_danmu_size.xml
  9. 24
      app/src/main/java/com/fongmi/android/tv/Setting.java
  10. 30
      app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java
  11. 6
      app/src/main/java/com/fongmi/android/tv/impl/DanmuLineCallback.java
  12. 6
      app/src/main/java/com/fongmi/android/tv/impl/DanmuMaxLineCallback.java
  13. 6
      app/src/main/java/com/fongmi/android/tv/impl/DanmuSizeCallback.java
  14. 11
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  15. 6
      app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java
  16. 16
      app/src/main/res/values-zh-rCN/strings.xml
  17. 16
      app/src/main/res/values-zh-rTW/strings.xml
  18. 16
      app/src/main/res/values/strings.xml
  19. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  20. 54
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/DanmuLineDialog.java
  21. 54
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/DanmuMaxLineDialog.java
  22. 54
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/DanmuSizeDialog.java
  23. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java
  24. 89
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java
  25. 0
      app/src/mobile/res/layout/dialog_danmu_line.xml
  26. 20
      app/src/mobile/res/layout/dialog_danmu_size.xml
  27. 68
      app/src/mobile/res/layout/fragment_setting_player.xml
  28. 8
      catvod/src/main/java/com/github/catvod/utils/Prefers.java

@ -1,7 +1,7 @@
{
"formatVersion": 1,
"database": {
"version": 27,
"version": 28,
"identityHash": "d4921f6e0b243ebdcdb3a62512537b4d",
"entities": [
{

@ -11,25 +11,26 @@ 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.DanmuLineCallback;
import com.fongmi.android.tv.impl.DanmuSizeCallback;
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.DanmuLineDialog;
import com.fongmi.android.tv.ui.dialog.DanmuSizeDialog;
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, DanmuMaxLineCallback {
public class SettingPlayerActivity extends BaseActivity implements UaCallback, BufferCallback, SubtitleCallback, DanmuLineCallback, DanmuSizeCallback {
private ActivitySettingPlayerBinding mBinding;
private String[] player;
private String[] danmuSpeed;
private String[] danmuSize;
private String[] caption;
private String[] player;
private String[] http;
private String[] flag;
@ -48,47 +49,45 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
@Override
protected void initView() {
mBinding.playerText.setText((player = ResUtil.getStringArray(R.array.select_player))[Setting.getPlayer()]);
setVisible();
mBinding.uaText.setText(Setting.getUa());
mBinding.tunnelText.setText(getSwitch(Setting.isTunnel()));
mBinding.bufferText.setText(String.valueOf(Setting.getBuffer()));
mBinding.subtitleText.setText(String.valueOf(Setting.getSubtitle()));
mBinding.caption.setVisibility(Setting.hasCaption() ? View.VISIBLE : View.GONE);
mBinding.http.setVisibility(Players.isExo(Setting.getPlayer()) ? View.VISIBLE : View.GONE);
mBinding.buffer.setVisibility(Players.isExo(Setting.getPlayer()) ? View.VISIBLE : View.GONE);
mBinding.tunnel.setVisibility(Players.isExo(Setting.getPlayer()) ? View.VISIBLE : View.GONE);
mBinding.danmuSizeText.setText(String.valueOf(Setting.getDanmuSize()));
mBinding.danmuLineText.setText(String.valueOf(Setting.getDanmuLine(3)));
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.playerText.setText((player = ResUtil.getStringArray(R.array.select_player))[Setting.getPlayer()]);
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);
mBinding.buffer.setOnClickListener(this::onBuffer);
mBinding.player.setOnClickListener(this::setPlayer);
mBinding.tunnel.setOnClickListener(this::setTunnel);
mBinding.caption.setOnClickListener(this::setCaption);
mBinding.subtitle.setOnClickListener(this::onSubtitle);
mBinding.caption.setOnLongClickListener(this::onCaption);
mBinding.danmuSize.setOnClickListener(this::onDanmuSize);
mBinding.danmuLine.setOnClickListener(this::onDanmuLine);
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 setVisible() {
mBinding.caption.setVisibility(Setting.hasCaption() ? View.VISIBLE : View.GONE);
mBinding.http.setVisibility(Players.isExo(Setting.getPlayer()) ? View.VISIBLE : View.GONE);
mBinding.buffer.setVisibility(Players.isExo(Setting.getPlayer()) ? View.VISIBLE : View.GONE);
mBinding.tunnel.setVisibility(Players.isExo(Setting.getPlayer()) ? View.VISIBLE : View.GONE);
}
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 onUa(View view) {
UaDialog.create(this).show();
}
@Override
@ -120,6 +119,13 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
Setting.putBuffer(times);
}
private void setPlayer(View view) {
int index = Setting.getPlayer();
Setting.putPlayer(index = index == player.length - 1 ? 0 : ++index);
mBinding.playerText.setText(player[index]);
setVisible();
}
private void setTunnel(View view) {
Setting.putTunnel(!Setting.isTunnel());
mBinding.tunnelText.setText(getSwitch(Setting.isTunnel()));
@ -144,26 +150,29 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
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 onDanmuSize(View view) {
DanmuSizeDialog.create(this).show();
}
public void setDanmuSize(View view) {
int index = Setting.getDanmuSize();
Setting.putDanmuSize(index = index == danmuSize.length - 1 ? 0 : ++index);
mBinding.danmuSizeText.setText(danmuSize[index]);
@Override
public void setDanmuSize(float size) {
mBinding.danmuSizeText.setText(String.valueOf(size));
Setting.putDanmuSize(size);
}
public void onDanmuMaxLine(View view) {
DanmuMaxLineDialog.create(this).show();
public void onDanmuLine(View view) {
DanmuLineDialog.create(this).show();
}
@Override
public void setDanmuMaxLine(int maxLine) {
mBinding.danmuMaxLineText.setText(String.valueOf(maxLine));
Setting.putDanmuMaxLine(maxLine);
public void setDanmuLine(int line) {
mBinding.danmuLineText.setText(String.valueOf(line));
Setting.putDanmuLine(line);
}
public void setDanmuSpeed(View view) {
int index = Setting.getDanmuSpeed();
Setting.putDanmuSpeed(index = index == danmuSpeed.length - 1 ? 0 : ++index);
mBinding.danmuSpeedText.setText(danmuSpeed[index]);
}
}

@ -399,11 +399,11 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
private void setDanmuView() {
int maxLine = Setting.getDanmuLine(3);
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);

@ -6,24 +6,24 @@ 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.databinding.DialogDanmuLineBinding;
import com.fongmi.android.tv.impl.DanmuLineCallback;
import com.fongmi.android.tv.utils.KeyUtil;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
public class DanmuMaxLineDialog {
public class DanmuLineDialog {
private final DialogDanmuMaxlineBinding binding;
private final DanmuMaxLineCallback callback;
private final DialogDanmuLineBinding binding;
private final DanmuLineCallback callback;
private final AlertDialog dialog;
public static DanmuMaxLineDialog create(FragmentActivity activity) {
return new DanmuMaxLineDialog(activity);
public static DanmuLineDialog create(FragmentActivity activity) {
return new DanmuLineDialog(activity);
}
public DanmuMaxLineDialog(FragmentActivity activity) {
this.callback = (DanmuMaxLineCallback) activity;
this.binding = DialogDanmuMaxlineBinding.inflate(LayoutInflater.from(activity));
public DanmuLineDialog(FragmentActivity activity) {
this.callback = (DanmuLineCallback) activity;
this.binding = DialogDanmuLineBinding.inflate(LayoutInflater.from(activity));
this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create();
}
@ -39,11 +39,11 @@ public class DanmuMaxLineDialog {
}
private void initView() {
binding.slider.setValue(Setting.getDanmuMaxLine(3));
binding.slider.setValue(Setting.getDanmuLine(3));
}
private void initEvent() {
binding.slider.addOnChangeListener((slider, value, fromUser) -> callback.setDanmuMaxLine((int) value));
binding.slider.addOnChangeListener((slider, value, fromUser) -> callback.setDanmuLine((int) value));
binding.slider.setOnKeyListener((view, keyCode, event) -> {
boolean enter = KeyUtil.isEnterKey(event);
if (enter) dialog.dismiss();

@ -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.DialogDanmuSizeBinding;
import com.fongmi.android.tv.impl.DanmuSizeCallback;
import com.fongmi.android.tv.utils.KeyUtil;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
public class DanmuSizeDialog {
private final DialogDanmuSizeBinding binding;
private final DanmuSizeCallback callback;
private final AlertDialog dialog;
public static DanmuSizeDialog create(FragmentActivity activity) {
return new DanmuSizeDialog(activity);
}
public DanmuSizeDialog(FragmentActivity activity) {
this.callback = (DanmuSizeCallback) activity;
this.binding = DialogDanmuSizeBinding.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.getDanmuSize());
}
private void initEvent() {
binding.slider.addOnChangeListener((slider, value, fromUser) -> callback.setDanmuSize((float) (Math.round(value * 100.0) / 100.0)));
binding.slider.setOnKeyListener((view, keyCode, event) -> {
boolean enter = KeyUtil.isEnterKey(event);
if (enter) dialog.dismiss();
return enter;
});
}
}

@ -23,22 +23,18 @@
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_width="wrap_content"
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_width="match_parent"
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" />
@ -166,7 +162,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/tunnel"
android:id="@+id/danmuSpeed"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -179,23 +175,23 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_player_tunnel"
android:text="@string/setting_danmu_speed"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/tunnelText"
android:id="@+id/danmuSpeedText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="" />
tools:text="" />
</LinearLayout>
<LinearLayout
android:id="@+id/http"
android:id="@+id/danmuSize"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -208,23 +204,32 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_player_http"
android:text="@string/setting_danmu_size"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/httpText"
android:layout_width="match_parent"
android:id="@+id/danmuSizeText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="OkHttp" />
tools:text="1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="@string/times"
android:textColor="@color/white"
android:textSize="18sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/buffer"
android:id="@+id/danmuLine"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -237,12 +242,12 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_player_buffer"
android:text="@string/setting_danmu_line"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/bufferText"
android:id="@+id/danmuLineText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
@ -255,14 +260,14 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="@string/times"
android:text="@string/lines"
android:textColor="@color/white"
android:textSize="18sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/danmuSpeed"
android:id="@+id/tunnel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -272,30 +277,26 @@
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_weight="0.3"
android:text="@string/setting_danmu_speed"
android:text="@string/setting_player_tunnel"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/danmuSpeedText"
android:layout_width="0dp"
android:id="@+id/tunnelText"
android:layout_width="match_parent"
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="" />
tools:text="" />
</LinearLayout>
<LinearLayout
android:id="@+id/danmuSize"
android:id="@+id/http"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -305,30 +306,26 @@
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_weight="0.3"
android:text="@string/setting_danmu_size"
android:text="@string/setting_player_http"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/danmuSizeText"
android:layout_width="0dp"
android:id="@+id/httpText"
android:layout_width="match_parent"
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倍" />
tools:text="OkHttp" />
</LinearLayout>
<LinearLayout
android:id="@+id/danmuMaxLine"
android:id="@+id/buffer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -338,27 +335,31 @@
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_weight="0.3"
android:text="@string/setting_danmu_maxline"
android:text="@string/setting_player_buffer"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/danmuMaxLineText"
android:id="@+id/bufferText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:ellipsize="middle"
android:layout_weight="1"
android:gravity="end"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="1" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="@string/times"
android:textColor="@color/white"
android:textSize="18sp" />
</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="0.2"
android:valueFrom="1"
android:valueTo="2"
app:thumbColor="@color/blue_500"
app:trackColorActive="@color/blue_500"
app:trackColorInactive="@color/blue_50" />
</FrameLayout>

@ -146,7 +146,7 @@ public class Setting {
}
public static int getSubtitle() {
return Math.max(Prefers.getInt("subtitle", 16), 14);
return Math.min(Math.max(Prefers.getInt("subtitle", 16), 14), 48);
}
public static void putSubtitle(int subtitle) {
@ -241,14 +241,6 @@ public class Setting {
Prefers.put("danmu", danmu);
}
public static int getDanmuMaxLine(int defaultValue) {
return Prefers.getInt("danmu_maxline", defaultValue);
}
public static void putDanmuMaxLine(int maxline) {
Prefers.put("danmu_maxline", maxline);
}
public static int getDanmuSpeed() {
return Prefers.getInt("danmu_speed", 2);
}
@ -257,14 +249,22 @@ public class Setting {
Prefers.put("danmu_speed", speed);
}
public static int getDanmuSize() {
return Prefers.getInt("danmu_size", 0);
public static float getDanmuSize() {
return Math.min(Math.max(Prefers.getFloat("danmu_size"), 1.0f), 2.0f);
}
public static void putDanmuSize(int size) {
public static void putDanmuSize(float size) {
Prefers.put("danmu_size", size);
}
public static int getDanmuLine(int line) {
return Math.min(Math.max(Prefers.getInt("danmu_line"), line), 15);
}
public static void putDanmuLine(int line) {
Prefers.put("danmu_line", line);
}
public static boolean isCaption() {
return Prefers.getBoolean("caption");
}

@ -38,7 +38,7 @@ import java.util.Locale;
@Database(entities = {Keep.class, Site.class, Live.class, Track.class, Config.class, Device.class, History.class}, version = AppDatabase.VERSION)
public abstract class AppDatabase extends RoomDatabase {
public static final int VERSION = 27;
public static final int VERSION = 28;
public static final String NAME = "tv";
public static final String SYMBOL = "@@@";
@ -89,26 +89,7 @@ public abstract class AppDatabase extends RoomDatabase {
}
private static AppDatabase create(Context context) {
return Room.databaseBuilder(context, AppDatabase.class, NAME)
.addMigrations(MIGRATION_11_12)
.addMigrations(MIGRATION_12_13)
.addMigrations(MIGRATION_13_14)
.addMigrations(MIGRATION_14_15)
.addMigrations(MIGRATION_15_16)
.addMigrations(MIGRATION_16_17)
.addMigrations(MIGRATION_17_18)
.addMigrations(MIGRATION_18_19)
.addMigrations(MIGRATION_19_20)
.addMigrations(MIGRATION_20_21)
.addMigrations(MIGRATION_21_22)
.addMigrations(MIGRATION_22_23)
.addMigrations(MIGRATION_23_24)
.addMigrations(MIGRATION_24_25)
.addMigrations(MIGRATION_25_26)
.addMigrations(MIGRATION_26_27)
.allowMainThreadQueries()
.fallbackToDestructiveMigration()
.build();
return Room.databaseBuilder(context, AppDatabase.class, NAME).addMigrations(MIGRATION_11_12).addMigrations(MIGRATION_12_13).addMigrations(MIGRATION_13_14).addMigrations(MIGRATION_14_15).addMigrations(MIGRATION_15_16).addMigrations(MIGRATION_16_17).addMigrations(MIGRATION_17_18).addMigrations(MIGRATION_18_19).addMigrations(MIGRATION_19_20).addMigrations(MIGRATION_20_21).addMigrations(MIGRATION_21_22).addMigrations(MIGRATION_22_23).addMigrations(MIGRATION_23_24).addMigrations(MIGRATION_24_25).addMigrations(MIGRATION_25_26).addMigrations(MIGRATION_26_27).addMigrations(MIGRATION_27_28).allowMainThreadQueries().fallbackToDestructiveMigration().build();
}
public abstract KeepDao getKeepDao();
@ -246,4 +227,11 @@ public abstract class AppDatabase extends RoomDatabase {
database.execSQL("CREATE TABLE IF NOT EXISTS `Live` (`name` TEXT NOT NULL, `boot` INTEGER NOT NULL, `pass` INTEGER NOT NULL, PRIMARY KEY(`name`))");
}
};
static final Migration MIGRATION_27_28 = new Migration(27, 28) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
Prefers.remove("danmu_size");
}
};
}

@ -0,0 +1,6 @@
package com.fongmi.android.tv.impl;
public interface DanmuLineCallback {
void setDanmuLine(int line);
}

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

@ -0,0 +1,6 @@
package com.fongmi.android.tv.impl;
public interface DanmuSizeCallback {
void setDanmuSize(float size);
}

@ -662,11 +662,9 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
public void prepared() {
App.post(() -> {
if (danmuView == null) return;
if (isPlaying() && danmuView.isPrepared()) {
danmuView.start(getPosition());
if (Setting.isDanmu()) danmuView.show();
else danmuView.hide();
}
if (isPlaying() && danmuView.isPrepared()) danmuView.start(getPosition());
if (Setting.isDanmu()) danmuView.show();
else danmuView.hide();
});
}
@ -677,12 +675,9 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
@Override
public void danmakuShown(BaseDanmaku danmaku) {
}
@Override
public void drawingFinished() {
}
}

@ -25,15 +25,15 @@ import master.flame.danmaku.danmaku.util.DanmakuUtils;
public class Parser extends BaseDanmakuParser {
private final Danmu danmu;
private final float dSize;
private BaseDanmaku item;
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);
this.dSize = Setting.getDanmuSize();
}
private String getContent(String path) {
@ -73,7 +73,7 @@ public class Parser extends BaseDanmakuParser {
item = mContext.mDanmakuFactory.createDanmaku(type, mContext);
item.setTime(time);
item.setTimer(mTimer);
item.textSize = size * danmuSizeTimes;
item.textSize = size * dSize;
item.textColor = color;
item.textShadowColor = color <= Color.BLACK ? Color.WHITE : Color.BLACK;
item.flags = mContext.mGlobalFlagValues;

@ -74,15 +74,15 @@
<string name="setting_player_caption">字幕样式</string>
<string name="setting_player_subtitle">字幕大小</string>
<string name="setting_player_background">后台播放</string>
<string name="setting_danmu_size">弹幕大小</string>
<string name="setting_danmu_speed">弹幕速度</string>
<string name="setting_danmu_line">弹幕行数</string>
<string name="setting_decode">解码方式</string>
<string name="setting_render">渲染方式</string>
<string name="setting_scale">缩放比例</string>
<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>
@ -133,6 +133,7 @@
<!-- UNIT -->
<string name="all">全部</string>
<string name="times"></string>
<string name="lines"></string>
<string-array name="select_decode">
<item>软解</item>
@ -153,15 +154,6 @@
<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>

@ -74,15 +74,15 @@
<string name="setting_player_caption">字幕樣式</string>
<string name="setting_player_subtitle">字幕大小</string>
<string name="setting_player_background">背景播放</string>
<string name="setting_danmu_size">彈幕大小</string>
<string name="setting_danmu_speed">彈幕速度</string>
<string name="setting_danmu_line">彈幕行數</string>
<string name="setting_decode">解碼方式</string>
<string name="setting_render">渲染方式</string>
<string name="setting_scale">縮放比例</string>
<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>
@ -133,6 +133,7 @@
<!-- UNIT -->
<string name="all">全部</string>
<string name="times"></string>
<string name="lines"></string>
<string-array name="select_decode">
<item>軟解</item>
@ -153,15 +154,6 @@
<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>

@ -74,15 +74,15 @@
<string name="setting_player_caption">Caption style</string>
<string name="setting_player_subtitle">Subtitle size</string>
<string name="setting_player_background">Background play</string>
<string name="setting_danmu_size">Danmu size</string>
<string name="setting_danmu_speed">Danmu speed</string>
<string name="setting_danmu_line">Danmu line</string>
<string name="setting_decode">Decode</string>
<string name="setting_render">Render</string>
<string name="setting_scale">Scale</string>
<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>
@ -133,6 +133,7 @@
<!-- UNIT -->
<string name="all">All</string>
<string name="times">times</string>
<string name="lines">lines</string>
<string-array name="select_decode">
<item>Soft</item>
@ -153,15 +154,6 @@
<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>

@ -412,11 +412,11 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
}
private void setDanmuView() {
int maxLine = Setting.getDanmuLine(2);
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);

@ -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.DialogDanmuLineBinding;
import com.fongmi.android.tv.impl.DanmuLineCallback;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
public class DanmuLineDialog {
private final DialogDanmuLineBinding binding;
private final DanmuLineCallback callback;
private int value;
public static DanmuLineDialog create(Fragment fragment) {
return new DanmuLineDialog(fragment);
}
public DanmuLineDialog(Fragment fragment) {
this.callback = (DanmuLineCallback) fragment;
this.binding = DialogDanmuLineBinding.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_line).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.getDanmuLine(2));
}
private void onPositive(DialogInterface dialog, int which) {
callback.setDanmuLine((int) binding.slider.getValue());
dialog.dismiss();
}
private void onNegative(DialogInterface dialog, int which) {
callback.setDanmuLine(value);
dialog.dismiss();
}
}

@ -1,54 +0,0 @@
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();
}
}

@ -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.DialogDanmuSizeBinding;
import com.fongmi.android.tv.impl.DanmuSizeCallback;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
public class DanmuSizeDialog {
private final DialogDanmuSizeBinding binding;
private final DanmuSizeCallback callback;
private float value;
public static DanmuSizeDialog create(Fragment fragment) {
return new DanmuSizeDialog(fragment);
}
public DanmuSizeDialog(Fragment fragment) {
this.callback = (DanmuSizeCallback) fragment;
this.binding = DialogDanmuSizeBinding.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_speed).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.getDanmuSize());
}
private void onPositive(DialogInterface dialog, int which) {
callback.setDanmuSize(binding.slider.getValue());
dialog.dismiss();
}
private void onNegative(DialogInterface dialog, int which) {
callback.setDanmuSize(value);
dialog.dismiss();
}
}

@ -128,7 +128,6 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
mBinding.vodHistory.setOnClickListener(this::onVodHistory);
mBinding.version.setOnLongClickListener(this::onVersionDev);
mBinding.liveHistory.setOnClickListener(this::onLiveHistory);
mBinding.player.setOnLongClickListener(this::onPlayerSetting);
mBinding.wallDefault.setOnClickListener(this::setWallDefault);
mBinding.wallRefresh.setOnClickListener(this::setWallRefresh);
mBinding.player.setOnClickListener(this::onPlayerSetting);
@ -266,9 +265,8 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
HistoryDialog.create(this).type(type = 1).show();
}
private boolean onPlayerSetting(View view) {
private void onPlayerSetting(View view) {
getRoot().change(2);
return true;
}
private void onVersion(View view) {

@ -14,27 +14,28 @@ 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.DanmuLineCallback;
import com.fongmi.android.tv.impl.DanmuSizeCallback;
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.DanmuLineDialog;
import com.fongmi.android.tv.ui.dialog.DanmuSizeDialog;
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, DanmuMaxLineCallback {
public class SettingPlayerFragment extends BaseFragment implements UaCallback, BufferCallback, SubtitleCallback, DanmuLineCallback, DanmuSizeCallback {
private FragmentSettingPlayerBinding mBinding;
private String[] player;
private String[] danmuSpeed;
private String[] danmuSize;
private String[] background;
private String[] caption;
private String[] player;
private String[] http;
private String[] flag;
@ -53,37 +54,37 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B
@Override
protected void initView() {
mBinding.playerText.setText((player = ResUtil.getStringArray(R.array.select_player))[Setting.getPlayer()]);
setVisible();
mBinding.uaText.setText(Setting.getUa());
mBinding.tunnelText.setText(getSwitch(Setting.isTunnel()));
mBinding.captionText.setText(getSwitch(Setting.isCaption()));
mBinding.bufferText.setText(String.valueOf(Setting.getBuffer()));
mBinding.subtitleText.setText(String.valueOf(Setting.getSubtitle()));
mBinding.danmuSizeText.setText(String.valueOf(Setting.getDanmuSize()));
mBinding.danmuLineText.setText(String.valueOf(Setting.getDanmuLine(2)));
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.playerText.setText((player = ResUtil.getStringArray(R.array.select_player))[Setting.getPlayer()]);
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);
mBinding.buffer.setOnClickListener(this::onBuffer);
mBinding.player.setOnClickListener(this::setPlayer);
mBinding.tunnel.setOnClickListener(this::setTunnel);
mBinding.caption.setOnClickListener(this::setCaption);
mBinding.subtitle.setOnClickListener(this::onSubtitle);
mBinding.caption.setOnLongClickListener(this::onCaption);
mBinding.danmuSize.setOnClickListener(this::onDanmuSize);
mBinding.danmuLine.setOnClickListener(this::onDanmuLine);
mBinding.danmuSpeed.setOnClickListener(this::onDanmuSpeed);
mBinding.background.setOnClickListener(this::setBackground);
mBinding.danmuSpeed.setOnClickListener(this::setDanmuSpeed);
mBinding.danmuSize.setOnClickListener(this::setDanmuSize);
mBinding.danmuMaxLine.setOnClickListener(this::onDanmuMaxLine);
}
private void setVisible() {
@ -97,12 +98,6 @@ 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);
@ -132,6 +127,13 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B
Setting.putBuffer(times);
}
private void setPlayer(View view) {
int index = Setting.getPlayer();
Setting.putPlayer(index = index == player.length - 1 ? 0 : ++index);
mBinding.playerText.setText(player[index]);
setVisible();
}
private void setTunnel(View view) {
Setting.putTunnel(!Setting.isTunnel());
mBinding.tunnelText.setText(getSwitch(Setting.isTunnel()));
@ -156,39 +158,44 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B
mBinding.subtitleText.setText(String.valueOf(size));
}
private void setBackground(View view) {
new MaterialAlertDialogBuilder(getActivity()).setTitle(R.string.setting_player_background).setNegativeButton(R.string.dialog_negative, null).setSingleChoiceItems(background, Setting.getBackground(), (dialog, which) -> {
mBinding.backgroundText.setText(background[which]);
Setting.putBackground(which);
dialog.dismiss();
}).show();
public void onDanmuSize(View view) {
DanmuSizeDialog.create(this).show();
}
@Override
public void onHiddenChanged(boolean hidden) {
if (!hidden) setVisible();
public void setDanmuSize(float size) {
mBinding.danmuSizeText.setText(String.valueOf(size));
Setting.putDanmuSize(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 onDanmuLine(View view) {
DanmuLineDialog.create(this).show();
}
public void setDanmuSize(View view) {
int index = Setting.getDanmuSize();
Setting.putDanmuSize(index = index == danmuSize.length - 1 ? 0 : ++index);
mBinding.danmuSizeText.setText(danmuSize[index]);
@Override
public void setDanmuLine(int line) {
mBinding.danmuLineText.setText(String.valueOf(line));
Setting.putDanmuLine(line);
}
public void onDanmuMaxLine(View view) {
DanmuMaxLineDialog.create(this).show();
public void onDanmuSpeed(View view) {
new MaterialAlertDialogBuilder(getActivity()).setTitle(R.string.setting_danmu_speed).setNegativeButton(R.string.dialog_negative, null).setSingleChoiceItems(danmuSpeed, Setting.getDanmuSpeed(), (dialog, which) -> {
mBinding.danmuSpeedText.setText(danmuSpeed[which]);
Setting.putDanmuSpeed(which);
dialog.dismiss();
}).show();
}
@Override
public void setDanmuMaxLine(int maxLine) {
mBinding.danmuMaxLineText.setText(String.valueOf(maxLine));
Setting.putDanmuMaxLine(maxLine);
private void setBackground(View view) {
new MaterialAlertDialogBuilder(getActivity()).setTitle(R.string.setting_player_background).setNegativeButton(R.string.dialog_negative, null).setSingleChoiceItems(background, Setting.getBackground(), (dialog, which) -> {
mBinding.backgroundText.setText(background[which]);
Setting.putBackground(which);
dialog.dismiss();
}).show();
}
@Override
public void onHiddenChanged(boolean hidden) {
if (!hidden) setVisible();
}
}

@ -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="0.2"
android:valueFrom="1"
android:valueTo="2"
app:trackColorInactive="@color/blue_50" />
</LinearLayout>

@ -216,7 +216,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/tunnel"
android:id="@+id/danmuSpeed"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -227,23 +227,23 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_player_tunnel"
android:text="@string/setting_danmu_speed"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/tunnelText"
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="" />
tools:text="" />
</LinearLayout>
<LinearLayout
android:id="@+id/http"
android:id="@+id/danmuSize"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -254,23 +254,32 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_player_http"
android:text="@string/setting_danmu_size"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/httpText"
android:layout_width="match_parent"
android:id="@+id/danmuSizeText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="OkHttp" />
tools:text="1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="@string/times"
android:textColor="@color/white"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/buffer"
android:id="@+id/danmuLine"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -281,12 +290,12 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_player_buffer"
android:text="@string/setting_danmu_line"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/bufferText"
android:id="@+id/danmuLineText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
@ -299,14 +308,14 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="@string/times"
android:text="@string/lines"
android:textColor="@color/white"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/danmuSpeed"
android:id="@+id/tunnel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -317,23 +326,23 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_danmu_speed"
android:text="@string/setting_player_tunnel"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/danmuSpeedText"
android:id="@+id/tunnelText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="" />
tools:text="" />
</LinearLayout>
<LinearLayout
android:id="@+id/danmuSize"
android:id="@+id/http"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -344,23 +353,23 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_danmu_size"
android:text="@string/setting_player_http"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/danmuSizeText"
android:id="@+id/httpText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="1倍" />
tools:text="OkHttp" />
</LinearLayout>
<LinearLayout
android:id="@+id/danmuMaxLine"
android:id="@+id/buffer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -371,19 +380,28 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_danmu_maxline"
android:text="@string/setting_player_buffer"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/danmuMaxLineText"
android:layout_width="match_parent"
android:id="@+id/bufferText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="@string/times"
android:textColor="@color/white"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

@ -47,6 +47,14 @@ public class Prefers {
return getPrefers().getInt(key, defaultValue);
}
public static float getFloat(String key) {
return getFloat(key, 0);
}
public static float getFloat(String key, float defaultValue) {
return getPrefers().getFloat(key, defaultValue);
}
public static boolean getBoolean(String key) {
return getBoolean(key, false);
}

Loading…
Cancel
Save