Merge pull request #226 from okcaptain/dev

update
pull/227/head^2
okcaptain 2 years ago committed by GitHub
commit 88a4ba2df5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 17
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java
  2. 3
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  3. 53
      app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DanmuAlphaDialog.java
  4. 38
      app/src/leanback/res/layout/activity_setting_player.xml
  5. 19
      app/src/leanback/res/layout/dialog_danmu_alpha.xml
  6. 2
      app/src/leanback/res/layout/dialog_danmu_size.xml
  7. 12
      app/src/main/java/com/fongmi/android/tv/Setting.java
  8. 6
      app/src/main/java/com/fongmi/android/tv/impl/DanmuAlphaCallback.java
  9. 1
      app/src/main/res/values-zh-rCN/strings.xml
  10. 1
      app/src/main/res/values-zh-rTW/strings.xml
  11. 1
      app/src/main/res/values/strings.xml
  12. 3
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  13. 54
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/DanmuAlphaDialog.java
  14. 16
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java
  15. 20
      app/src/mobile/res/layout/dialog_danmu_alpha.xml
  16. 2
      app/src/mobile/res/layout/dialog_danmu_size.xml
  17. 36
      app/src/mobile/res/layout/fragment_setting_player.xml

@ -11,6 +11,7 @@ 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.DanmuAlphaCallback;
import com.fongmi.android.tv.impl.DanmuLineCallback;
import com.fongmi.android.tv.impl.DanmuSizeCallback;
import com.fongmi.android.tv.impl.SubtitleCallback;
@ -19,13 +20,14 @@ 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.DanmuAlphaDialog;
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, DanmuLineCallback, DanmuSizeCallback {
public class SettingPlayerActivity extends BaseActivity implements UaCallback, BufferCallback, SubtitleCallback, DanmuLineCallback, DanmuSizeCallback, DanmuAlphaCallback {
private ActivitySettingPlayerBinding mBinding;
private String[] danmuSpeed;
@ -60,6 +62,7 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
mBinding.subtitleText.setText(String.valueOf(Setting.getSubtitle()));
mBinding.danmuSizeText.setText(String.valueOf(Setting.getDanmuSize()));
mBinding.danmuLineText.setText(String.valueOf(Setting.getDanmuLine(3)));
mBinding.danmuAlphaText.setText(String.valueOf(Setting.getDanmuAlpha()));
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.scaleText.setText((scale = ResUtil.getStringArray(R.array.select_scale))[Setting.getScale()]);
@ -86,6 +89,7 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
mBinding.caption.setOnLongClickListener(this::onCaption);
mBinding.danmuSize.setOnClickListener(this::onDanmuSize);
mBinding.danmuLine.setOnClickListener(this::onDanmuLine);
mBinding.danmuAlpha.setOnClickListener(this::onDanmuAlpha);
mBinding.danmuSpeed.setOnClickListener(this::setDanmuSpeed);
}
@ -203,4 +207,15 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
Setting.putDanmuSpeed(index = index == danmuSpeed.length - 1 ? 0 : ++index);
mBinding.danmuSpeedText.setText(danmuSpeed[index]);
}
public void onDanmuAlpha(View view) {
DanmuAlphaDialog.create(this).show();
}
@Override
public void setDanmuAlpha(int alpha) {
mBinding.danmuAlphaText.setText(String.valueOf(alpha));
Setting.putDanmuAlpha(alpha);
}
}

@ -415,6 +415,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private void setDanmuView() {
int maxLine = Setting.getDanmuLine(3);
float alpha = ((float) Setting.getDanmuAlpha()) / 100.0f;
mPlayers.setDanmuView(mBinding.danmaku);
HashMap<Integer, Integer> maxLines = new HashMap<>();
float scrollSpeedFactor = 1.6f - (Setting.getDanmuSpeed() * 0.2f);
@ -423,7 +424,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
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).setScrollSpeedFactor(scrollSpeedFactor).setDanmakuMargin(12).setScaleTextSize(0.8f);
mDanmakuContext.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3).setMaximumLines(maxLines).setScrollSpeedFactor(scrollSpeedFactor).setDanmakuTransparency(alpha).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.DialogDanmuAlphaBinding;
import com.fongmi.android.tv.impl.DanmuAlphaCallback;
import com.fongmi.android.tv.utils.KeyUtil;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
public class DanmuAlphaDialog {
private final DialogDanmuAlphaBinding binding;
private final DanmuAlphaCallback callback;
private final AlertDialog dialog;
public static DanmuAlphaDialog create(FragmentActivity activity) {
return new DanmuAlphaDialog(activity);
}
public DanmuAlphaDialog(FragmentActivity activity) {
this.callback = (DanmuAlphaCallback) activity;
this.binding = DialogDanmuAlphaBinding.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.getDanmuAlpha());
}
private void initEvent() {
binding.slider.addOnChangeListener((slider, value, fromUser) -> callback.setDanmuAlpha((int) value));
binding.slider.setOnKeyListener((view, keyCode, event) -> {
boolean enter = KeyUtil.isEnterKey(event);
if (enter) dialog.dismiss();
return enter;
});
}
}

@ -262,6 +262,44 @@
</LinearLayout>
<LinearLayout
android:id="@+id/danmuAlpha"
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="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/player_danmu_alpha"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/danmuAlphaText"
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="80" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="%"
android:textColor="@color/white"
android:textSize="18sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/flag"
android:layout_width="match_parent"

@ -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="5"
android:valueFrom="10"
android:valueTo="100"
app:thumbColor="@color/blue_500"
app:trackColorActive="@color/blue_500"
app:trackColorInactive="@color/blue_50" />
</FrameLayout>

@ -10,7 +10,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stepSize="0.2"
android:valueFrom="1"
android:valueFrom="0.6"
android:valueTo="2"
app:thumbColor="@color/blue_500"
app:trackColorActive="@color/blue_500"

@ -258,7 +258,7 @@ public class Setting {
}
public static float getDanmuSize() {
return Math.min(Math.max(Prefers.getFloat("danmu_size"), 1.0f), 2.0f);
return Math.min(Math.max(Prefers.getFloat("danmu_size", 1.0f), 0.5f), 2.0f);
}
public static void putDanmuSize(float size) {
@ -266,7 +266,15 @@ public class Setting {
}
public static int getDanmuLine(int line) {
return Math.min(Math.max(Prefers.getInt("danmu_line"), line), 15);
return Math.min(Math.max(Prefers.getInt("danmu_line", line), 1), 15);
}
public static void putDanmuAlpha(int alpha) {
Prefers.put("danmu_alpha", alpha);
}
public static int getDanmuAlpha() {
return Math.min(Math.max(Prefers.getInt("danmu_alpha", 90), 10), 100);
}
public static void putDanmuLine(int line) {

@ -0,0 +1,6 @@
package com.fongmi.android.tv.impl;
public interface DanmuAlphaCallback {
void setDanmuAlpha(int alpha);
}

@ -87,6 +87,7 @@
<string name="player_danmu_speed">弹幕速度</string>
<string name="player_danmu_size">弹幕大小</string>
<string name="player_danmu_line">弹幕行数</string>
<string name="player_danmu_alpha">弹幕透明</string>
<string name="player_background">后台播放</string>
<string name="player_flag">线路播放</string>
<string name="player_episode">选集样式</string>

@ -87,6 +87,7 @@
<string name="player_danmu_speed">彈幕速度</string>
<string name="player_danmu_size">彈幕大小</string>
<string name="player_danmu_line">彈幕行數</string>
<string name="player_danmu_alpha">彈幕透明</string>
<string name="player_background">背景播放</string>
<string name="player_flag">線路播放</string>
<string name="player_episode">選集樣式</string>

@ -87,6 +87,7 @@
<string name="player_danmu_speed">Danmu speed</string>
<string name="player_danmu_size">Danmu size</string>
<string name="player_danmu_line">Danmu line</string>
<string name="player_danmu_alpha">Danmu alpha</string>
<string name="player_background">Background play</string>
<string name="player_flag">Flag play</string>
<string name="player_episode">Episode style</string>

@ -413,6 +413,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private void setDanmuView() {
int maxLine = Setting.getDanmuLine(2);
float alpha = ((float) Setting.getDanmuAlpha()) / 100.0f;
mPlayers.setDanmuView(mBinding.danmaku);
HashMap<Integer, Integer> maxLines = new HashMap<>();
float scrollSpeedFactor = 1.6f - (Setting.getDanmuSpeed() * 0.2f);
@ -421,7 +422,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
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).setScrollSpeedFactor(scrollSpeedFactor).setDanmakuMargin(8).setScaleTextSize(0.8f);
mDanmakuContext.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3).setMaximumLines(maxLines).setScrollSpeedFactor(scrollSpeedFactor).setDanmakuTransparency(alpha).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.DialogDanmuAlphaBinding;
import com.fongmi.android.tv.impl.DanmuAlphaCallback;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
public class DanmuAlphaDialog {
private final DialogDanmuAlphaBinding binding;
private final DanmuAlphaCallback callback;
private int value;
public static DanmuAlphaDialog create(Fragment fragment) {
return new DanmuAlphaDialog(fragment);
}
public DanmuAlphaDialog(Fragment fragment) {
this.callback = (DanmuAlphaCallback) fragment;
this.binding = DialogDanmuAlphaBinding.inflate(LayoutInflater.from(fragment.getContext()));
}
public void show() {
initDialog();
initView();
}
private void initDialog() {
AlertDialog dialog = new MaterialAlertDialogBuilder(binding.getRoot().getContext()).setTitle(R.string.player_danmu_alpha).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.getDanmuAlpha());
}
private void onPositive(DialogInterface dialog, int which) {
callback.setDanmuAlpha((int) binding.slider.getValue());
dialog.dismiss();
}
private void onNegative(DialogInterface dialog, int which) {
callback.setDanmuAlpha(value);
dialog.dismiss();
}
}

@ -14,6 +14,7 @@ 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.DanmuAlphaCallback;
import com.fongmi.android.tv.impl.DanmuLineCallback;
import com.fongmi.android.tv.impl.DanmuSizeCallback;
import com.fongmi.android.tv.impl.SubtitleCallback;
@ -22,6 +23,7 @@ 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.DanmuAlphaDialog;
import com.fongmi.android.tv.ui.dialog.DanmuLineDialog;
import com.fongmi.android.tv.ui.dialog.DanmuSizeDialog;
import com.fongmi.android.tv.ui.dialog.SubtitleDialog;
@ -29,7 +31,7 @@ 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, DanmuLineCallback, DanmuSizeCallback {
public class SettingPlayerFragment extends BaseFragment implements UaCallback, BufferCallback, SubtitleCallback, DanmuLineCallback, DanmuSizeCallback, DanmuAlphaCallback {
private FragmentSettingPlayerBinding mBinding;
private String[] danmuSpeed;
@ -64,6 +66,7 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B
mBinding.subtitleText.setText(String.valueOf(Setting.getSubtitle()));
mBinding.danmuSizeText.setText(String.valueOf(Setting.getDanmuSize()));
mBinding.danmuLineText.setText(String.valueOf(Setting.getDanmuLine(2)));
mBinding.danmuAlphaText.setText(String.valueOf(Setting.getDanmuAlpha()));
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.scaleText.setText((scale = ResUtil.getStringArray(R.array.select_scale))[Setting.getScale()]);
@ -89,6 +92,7 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B
mBinding.caption.setOnLongClickListener(this::onCaption);
mBinding.danmuSize.setOnClickListener(this::onDanmuSize);
mBinding.danmuLine.setOnClickListener(this::onDanmuLine);
mBinding.danmuAlpha.setOnClickListener(this::onDanmuAlpha);
mBinding.danmuSpeed.setOnClickListener(this::onDanmuSpeed);
mBinding.background.setOnClickListener(this::onBackground);
}
@ -206,6 +210,16 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B
}).show();
}
public void onDanmuAlpha(View view) {
DanmuAlphaDialog.create(this).show();
}
@Override
public void setDanmuAlpha(int alpha) {
mBinding.danmuAlphaText.setText(String.valueOf(alpha));
Setting.putDanmuAlpha(alpha);
}
private void onBackground(View view) {
new MaterialAlertDialogBuilder(getActivity()).setTitle(R.string.player_background).setNegativeButton(R.string.dialog_negative, null).setSingleChoiceItems(background, Setting.getBackground(), (dialog, which) -> {
mBinding.backgroundText.setText(background[which]);

@ -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="5"
android:valueFrom="10"
android:valueTo="100"
app:trackColorInactive="@color/blue_50" />
</LinearLayout>

@ -13,7 +13,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stepSize="0.2"
android:valueFrom="1"
android:valueFrom="0.6"
android:valueTo="2"
app:trackColorInactive="@color/blue_50" />

@ -282,6 +282,42 @@
</LinearLayout>
<LinearLayout
android:id="@+id/danmuAlpha"
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/player_danmu_alpha"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/danmuAlphaText"
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="%"
android:textColor="@color/white"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/background"
android:layout_width="match_parent"

Loading…
Cancel
Save