[leanback] support set subtitle size

pull/137/head
FongMi 3 years ago
parent dd1b0acc97
commit 6551904abd
  1. 18
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 15
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  3. 21
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java
  4. 60
      app/src/leanback/java/com/fongmi/android/tv/ui/adapter/SubtitleAdapter.java
  5. 61
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SubtitleDialog.java
  6. 29
      app/src/leanback/res/layout/activity_setting_player.xml
  7. 28
      app/src/leanback/res/layout/adapter_doh.xml
  8. 14
      app/src/leanback/res/layout/adapter_subtitle.xml
  9. 9
      app/src/leanback/res/layout/dialog_subtitle.xml
  10. 6
      app/src/main/java/com/fongmi/android/tv/impl/SubtitleCallback.java
  11. 8
      app/src/main/java/com/fongmi/android/tv/utils/Prefers.java
  12. 16
      app/src/main/res/values-zh-rCN/strings.xml
  13. 16
      app/src/main/res/values-zh-rTW/strings.xml
  14. 16
      app/src/main/res/values/strings.xml
  15. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java

@ -342,9 +342,19 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private void setVideoView() {
mPlayers.set(getExo(), getIjk());
getExo().getSubtitleView().setUserDefaultTextSize();
getExo().getSubtitleView().setStyle(ExoUtil.getCaptionStyle());
getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
setSubtitleView();
}
private void setSubtitleView() {
if (Prefers.getSubtitle() == 0) {
getExo().getSubtitleView().setUserDefaultTextSize();
getExo().getSubtitleView().setStyle(ExoUtil.getCaptionStyle());
getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
} else {
getExo().getSubtitleView().setStyle(ExoUtil.getCaptionStyle());
getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 14 + Prefers.getSubtitle() * 2);
getExo().getSubtitleView().setFixedTextSize(TypedValue.COMPLEX_UNIT_SP, 14 + Prefers.getSubtitle() * 2);
}
}
private void setScale(int scale) {
@ -530,7 +540,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private void enterFullscreen() {
mBinding.video.setForeground(null);
getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 24);
mBinding.video.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
mBinding.flag.setSelectedPosition(getCurrentFlag());
mKeyDown.setFull(true);
@ -540,7 +549,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private void exitFullscreen() {
mBinding.video.setForeground(ResUtil.getDrawable(R.drawable.selector_video));
getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
mBinding.video.setLayoutParams(mFrameParams);
mKeyDown.setFull(false);
setFullscreen(false);

@ -3,6 +3,7 @@ package com.fongmi.android.tv.ui.activity;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.View;
@ -35,6 +36,7 @@ import com.fongmi.android.tv.impl.Callback;
import com.fongmi.android.tv.impl.LiveCallback;
import com.fongmi.android.tv.impl.PassCallback;
import com.fongmi.android.tv.model.LiveViewModel;
import com.fongmi.android.tv.player.ExoUtil;
import com.fongmi.android.tv.player.Players;
import com.fongmi.android.tv.player.source.Source;
import com.fongmi.android.tv.ui.base.BaseActivity;
@ -197,6 +199,19 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
mBinding.control.across.setActivated(Prefers.isAcross());
mBinding.control.change.setActivated(Prefers.isChange());
mBinding.control.home.setVisibility(LiveConfig.isOnly() ? View.GONE : View.VISIBLE);
setSubtitleView();
}
private void setSubtitleView() {
if (Prefers.getSubtitle() == 0) {
getExo().getSubtitleView().setUserDefaultTextSize();
getExo().getSubtitleView().setStyle(ExoUtil.getCaptionStyle());
getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
} else {
getExo().getSubtitleView().setStyle(ExoUtil.getCaptionStyle());
getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 14 + Prefers.getSubtitle() * 2);
getExo().getSubtitleView().setFixedTextSize(TypedValue.COMPLEX_UNIT_SP, 14 + Prefers.getSubtitle() * 2);
}
}
private void setScale(int scale) {

@ -8,17 +8,20 @@ import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.databinding.ActivitySettingPlayerBinding;
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.custom.dialog.SubtitleDialog;
import com.fongmi.android.tv.ui.custom.dialog.UaDialog;
import com.fongmi.android.tv.utils.Prefers;
import com.fongmi.android.tv.utils.ResUtil;
public class SettingPlayerActivity extends BaseActivity implements UaCallback {
public class SettingPlayerActivity extends BaseActivity implements UaCallback, SubtitleCallback {
private ActivitySettingPlayerBinding mBinding;
private String[] subtitle;
private String[] http;
public static void start(Activity activity) {
@ -38,9 +41,10 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback {
protected void initView() {
mBinding.uaText.setText(Prefers.getUa());
mBinding.tunnelText.setText(getSwitch(Prefers.isTunnel()));
mBinding.httpText.setText((http = ResUtil.getStringArray(R.array.select_player_http))[Prefers.getHttp()]);
mBinding.tunnel.setVisibility(Players.isExo(Prefers.getPlayer()) ? View.VISIBLE : View.GONE);
mBinding.http.setVisibility(Players.isExo(Prefers.getPlayer()) ? View.VISIBLE : View.GONE);
mBinding.tunnel.setVisibility(Players.isExo(Prefers.getPlayer()) ? View.VISIBLE : View.GONE);
mBinding.httpText.setText((http = ResUtil.getStringArray(R.array.select_exo_http))[Prefers.getHttp()]);
mBinding.subtitleText.setText((subtitle = ResUtil.getStringArray(R.array.select_subtitle))[Prefers.getSubtitle()]);
}
@Override
@ -48,12 +52,17 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback {
mBinding.ua.setOnClickListener(this::onUa);
mBinding.http.setOnClickListener(this::setHttp);
mBinding.tunnel.setOnClickListener(this::setTunnel);
mBinding.subtitle.setOnClickListener(this::onSubtitle);
}
private void onUa(View view) {
UaDialog.create(this).show();
}
private void onSubtitle(View view) {
SubtitleDialog.create(this).show();
}
private void setHttp(View view) {
int index = Prefers.getHttp();
Prefers.putHttp(index = index == http.length - 1 ? 0 : ++index);
@ -71,4 +80,10 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback {
mBinding.uaText.setText(ua);
Prefers.putUa(ua);
}
@Override
public void setSubtitle(int position) {
mBinding.subtitleText.setText(subtitle[position]);
Prefers.putSubtitle(position);
}
}

@ -0,0 +1,60 @@
package com.fongmi.android.tv.ui.adapter;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.databinding.AdapterSubtitleBinding;
import com.fongmi.android.tv.utils.Prefers;
import com.fongmi.android.tv.utils.ResUtil;
import java.util.Arrays;
import java.util.List;
public class SubtitleAdapter extends RecyclerView.Adapter<SubtitleAdapter.ViewHolder> {
private final OnClickListener mListener;
private final List<String> mItems;
public SubtitleAdapter(OnClickListener listener) {
this.mItems = Arrays.asList(ResUtil.getStringArray(R.array.select_subtitle));
this.mListener = listener;
}
public interface OnClickListener {
void onItemClick(int position);
}
@Override
public int getItemCount() {
return mItems.size();
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ViewHolder(AdapterSubtitleBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
String item = mItems.get(position);
holder.binding.text.setText(item);
holder.binding.text.setActivated(Prefers.getSubtitle() == position);
holder.binding.text.setOnClickListener(v -> mListener.onItemClick(position));
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private final AdapterSubtitleBinding binding;
public ViewHolder(@NonNull AdapterSubtitleBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
}
}

@ -0,0 +1,61 @@
package com.fongmi.android.tv.ui.custom.dialog;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.WindowManager;
import androidx.appcompat.app.AlertDialog;
import com.fongmi.android.tv.databinding.DialogSubtitleBinding;
import com.fongmi.android.tv.impl.SubtitleCallback;
import com.fongmi.android.tv.ui.adapter.SubtitleAdapter;
import com.fongmi.android.tv.ui.custom.SpaceItemDecoration;
import com.fongmi.android.tv.utils.Prefers;
import com.fongmi.android.tv.utils.ResUtil;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
public class SubtitleDialog implements SubtitleAdapter.OnClickListener {
private final DialogSubtitleBinding binding;
private final SubtitleCallback callback;
private final SubtitleAdapter adapter;
private final AlertDialog dialog;
public static SubtitleDialog create(Activity activity) {
return new SubtitleDialog(activity);
}
public SubtitleDialog(Activity activity) {
this.callback = (SubtitleCallback) activity;
this.binding = DialogSubtitleBinding.inflate(LayoutInflater.from(activity));
this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create();
this.adapter = new SubtitleAdapter(this);
}
public void show() {
setRecyclerView();
setDialog();
}
private void setRecyclerView() {
binding.recycler.setAdapter(adapter);
binding.recycler.setHasFixedSize(true);
binding.recycler.addItemDecoration(new SpaceItemDecoration(1, 16));
binding.recycler.scrollToPosition(Prefers.getSubtitle());
}
private void setDialog() {
if (adapter.getItemCount() == 0) return;
WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.width = (int) (ResUtil.getScreenWidth() * 0.4f);
dialog.getWindow().setAttributes(params);
dialog.getWindow().setDimAmount(0);
dialog.show();
}
@Override
public void onItemClick(int position) {
callback.setSubtitle(position);
dialog.dismiss();
}
}

@ -102,5 +102,34 @@
tools:text="關" />
</LinearLayout>
<LinearLayout
android:id="@+id/subtitle"
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/setting_player_subtitle"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/subtitleText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="預設" />
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

@ -1,20 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:singleLine="true"
android:textColor="@color/text"
android:textSize="18sp"
tools:text="Google" />
</LinearLayout>
android:layout_height="40dp"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:singleLine="true"
android:textColor="@color/text"
android:textSize="18sp"
tools:text="Google" />

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:singleLine="true"
android:textColor="@color/text"
android:textSize="18sp"
tools:text="14sp" />

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<com.fongmi.android.tv.ui.custom.CustomRecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:maxHeight="352dp" />

@ -0,0 +1,6 @@
package com.fongmi.android.tv.impl;
public interface SubtitleCallback {
void setSubtitle(int position);
}

@ -220,6 +220,14 @@ public class Prefers {
put("ua", ua);
}
public static int getSubtitle() {
return getInt("subtitle");
}
public static void putSubtitle(int subtitle) {
put("subtitle", subtitle);
}
public static boolean isTunnel() {
return getBoolean("exo_tunnel");
}

@ -68,6 +68,7 @@
<string name="setting_player_ua">User-Agent</string>
<string name="setting_player_http">连线方式</string>
<string name="setting_player_tunnel">隧道模式</string>
<string name="setting_player_subtitle">字幕大小</string>
<string name="setting_decode">解码方式</string>
<string name="setting_render">渲染方式</string>
<string name="setting_scale">缩放比例</string>
@ -135,7 +136,7 @@
<item>EXO</item>
</string-array>
<string-array name="select_player_http">
<string-array name="select_exo_http">
<item>预设</item>
<item>OkHttp</item>
</string-array>
@ -166,4 +167,17 @@
<item>重播</item>
</string-array>
<string-array name="select_subtitle">
<item>默认</item>
<item>14sp</item>
<item>16sp</item>
<item>18sp</item>
<item>20sp</item>
<item>22sp</item>
<item>24sp</item>
<item>26sp</item>
<item>28sp</item>
<item>30sp</item>
</string-array>
</resources>

@ -68,6 +68,7 @@
<string name="setting_player_ua">User-Agent</string>
<string name="setting_player_http">連線方式</string>
<string name="setting_player_tunnel">隧道模式</string>
<string name="setting_player_subtitle">字幕大小</string>
<string name="setting_decode">解碼方式</string>
<string name="setting_render">渲染方式</string>
<string name="setting_scale">縮放比例</string>
@ -135,7 +136,7 @@
<item>EXO</item>
</string-array>
<string-array name="select_player_http">
<string-array name="select_exo_http">
<item>預設</item>
<item>OkHttp</item>
</string-array>
@ -166,4 +167,17 @@
<item>重播</item>
</string-array>
<string-array name="select_subtitle">
<item>預設</item>
<item>14sp</item>
<item>16sp</item>
<item>18sp</item>
<item>20sp</item>
<item>22sp</item>
<item>24sp</item>
<item>26sp</item>
<item>28sp</item>
<item>30sp</item>
</string-array>
</resources>

@ -68,6 +68,7 @@
<string name="setting_player_ua">User-Agent</string>
<string name="setting_player_http">HTTP method</string>
<string name="setting_player_tunnel">Tunnel mode</string>
<string name="setting_player_subtitle">Subtitle size</string>
<string name="setting_decode">Decode</string>
<string name="setting_render">Render</string>
<string name="setting_scale">Scale</string>
@ -135,7 +136,7 @@
<item>EXO</item>
</string-array>
<string-array name="select_player_http">
<string-array name="select_exo_http">
<item>Default</item>
<item>OkHttp</item>
</string-array>
@ -171,4 +172,17 @@
<item>Replay</item>
</string-array>
<string-array name="select_subtitle">
<item>Default</item>
<item>14sp</item>
<item>16sp</item>
<item>18sp</item>
<item>20sp</item>
<item>22sp</item>
<item>24sp</item>
<item>26sp</item>
<item>28sp</item>
<item>30sp</item>
</string-array>
</resources>

@ -40,7 +40,7 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback {
protected void initView() {
mBinding.uaText.setText(Prefers.getUa());
mBinding.tunnelText.setText(getSwitch(Prefers.isTunnel()));
mBinding.httpText.setText((http = ResUtil.getStringArray(R.array.select_player_http))[Prefers.getHttp()]);
mBinding.httpText.setText((http = ResUtil.getStringArray(R.array.select_exo_http))[Prefers.getHttp()]);
setVisible();
}

Loading…
Cancel
Save