[leanback] support local subtitle choose

pull/171/head
FongMi 2 years ago
parent ffe0c07efa
commit 0af730f904
  1. 1
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java
  2. 16
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  3. 11
      app/src/leanback/java/com/fongmi/android/tv/ui/dialog/SubtitleDialog.java
  4. 10
      app/src/leanback/res/drawable/ic_action_choose.xml
  5. 10
      app/src/leanback/res/drawable/ic_action_size.xml
  6. 62
      app/src/leanback/res/layout/dialog_track.xml
  7. 2
      app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java
  8. 1
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SubtitleDialog.java
  9. 1
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java
  10. 2
      app/src/mobile/res/layout/dialog_track.xml

@ -123,6 +123,5 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
@Override
public void setSubtitle(int size) {
mBinding.subtitleText.setText(String.valueOf(size));
Setting.putSubtitle(size);
}
}

@ -56,6 +56,7 @@ import com.fongmi.android.tv.event.ErrorEvent;
import com.fongmi.android.tv.event.PlayerEvent;
import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.impl.Callback;
import com.fongmi.android.tv.impl.SubtitleCallback;
import com.fongmi.android.tv.model.SiteViewModel;
import com.fongmi.android.tv.player.ExoUtil;
import com.fongmi.android.tv.player.Players;
@ -111,7 +112,7 @@ import okhttp3.Call;
import okhttp3.Response;
import tv.danmaku.ijk.media.player.ui.IjkVideoView;
public class VideoActivity extends BaseActivity implements CustomKeyDownVod.Listener, TrackDialog.Listener, ArrayPresenter.OnClickListener, Clock.Callback {
public class VideoActivity extends BaseActivity implements CustomKeyDownVod.Listener, TrackDialog.Listener, ArrayPresenter.OnClickListener, Clock.Callback, SubtitleCallback {
private ActivityVideoBinding mBinding;
private ViewGroup.LayoutParams mFrameParams;
@ -424,11 +425,6 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
mBinding.control.decode.setText(mPlayers.getDecodeText());
}
private void setSubtitle(int size) {
getExo().getSubtitleView().setFixedTextSize(Dimension.SP, size);
getIjk().getSubtitleView().setFixedTextSize(Dimension.SP, size);
}
private void setScale(int scale) {
getExo().setResizeMode(scale);
getIjk().setResizeMode(scale);
@ -1161,7 +1157,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
private void setTrackVisible(boolean visible) {
mBinding.control.text.setVisibility(visible && mPlayers.haveTrack(C.TRACK_TYPE_TEXT) ? View.VISIBLE : View.GONE);
mBinding.control.text.setVisibility(visible && (mPlayers.haveTrack(C.TRACK_TYPE_TEXT) || mPlayers.isExo()) ? View.VISIBLE : View.GONE);
mBinding.control.audio.setVisibility(visible && mPlayers.haveTrack(C.TRACK_TYPE_AUDIO) ? View.VISIBLE : View.GONE);
mBinding.control.video.setVisibility(visible && mPlayers.haveTrack(C.TRACK_TYPE_VIDEO) ? View.VISIBLE : View.GONE);
}
@ -1501,6 +1497,12 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
if (isFullscreen()) onKeyCenter();
}
@Override
public void setSubtitle(int size) {
getExo().getSubtitleView().setFixedTextSize(Dimension.SP, size);
getIjk().getSubtitleView().setFixedTextSize(Dimension.SP, size);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);

@ -23,6 +23,7 @@ public class SubtitleDialog {
private final DialogSubtitleBinding binding;
private final SubtitleCallback callback;
private final AlertDialog dialog;
private boolean listen;
private int value;
public static SubtitleDialog create(FragmentActivity activity) {
@ -35,6 +36,11 @@ public class SubtitleDialog {
this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create();
}
public SubtitleDialog listen(boolean listen) {
this.listen = listen;
return this;
}
public void show() {
initDialog();
initView();
@ -52,6 +58,7 @@ public class SubtitleDialog {
private void initView() {
binding.slider.setValue(Setting.getSubtitle());
binding.preview.setStyle(ExoUtil.getCaptionStyle());
binding.preview.setVisibility(listen ? View.GONE : View.VISIBLE);
binding.preview.setFixedTextSize(Dimension.SP, value = Setting.getSubtitle());
binding.preview.setCues(Arrays.asList(new Cue.Builder().setText("影視天下第一").build()));
}
@ -59,11 +66,13 @@ public class SubtitleDialog {
private void initEvent() {
binding.positive.setOnClickListener(this::onPositive);
binding.negative.setOnClickListener(this::onNegative);
binding.slider.addOnChangeListener((slider, value, fromUser) -> binding.preview.setFixedTextSize(Dimension.SP, value));
if (listen) binding.slider.addOnChangeListener((slider, value, fromUser) -> callback.setSubtitle((int) value));
else binding.slider.addOnChangeListener((slider, value, fromUser) -> binding.preview.setFixedTextSize(Dimension.SP, value));
}
private void onPositive(View view) {
callback.setSubtitle((int) binding.slider.getValue());
Setting.putSubtitle((int) binding.slider.getValue());
dialog.dismiss();
}

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M20,6h-8l-1.41,-1.41C10.21,4.21 9.7,4 9.17,4L4,4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,8c0,-1.1 -0.9,-2 -2,-2zM19,18L5,18c-0.55,0 -1,-0.45 -1,-1L4,9c0,-0.55 0.45,-1 1,-1h14c0.55,0 1,0.45 1,1v8c0,0.55 -0.45,1 -1,1z" />
</vector>

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M576.54,265L420.39,265Q402.76,265 390.42,252.65Q378.08,240.29 378.08,222.65Q378.08,205 390.42,192.5Q402.76,180 420.39,180L817.69,180Q835.32,180 847.66,192.35Q860,204.71 860,222.35Q860,240 847.66,252.5Q835.32,265 817.69,265L661.54,265L661.54,737.69Q661.54,755.32 649.18,767.66Q636.83,780 619.18,780Q601.54,780 589.04,767.55Q576.54,755.09 576.54,737.31L576.54,265ZM219.23,463.08L142.31,463.08Q124.68,463.08 112.34,450.72Q100,438.37 100,420.72Q100,403.08 112.34,390.58Q124.68,378.08 142.31,378.08L380.77,378.08Q398.4,378.08 410.74,390.43Q423.08,402.78 423.08,420.43Q423.08,438.08 410.74,450.58Q398.4,463.08 380.77,463.08L303.85,463.08L303.85,737.69Q303.85,755.32 291.49,767.66Q279.14,780 261.49,780Q243.85,780 231.54,767.66Q219.23,755.32 219.23,737.69L219.23,463.08Z" />
</vector>

@ -1,10 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<com.fongmi.android.tv.ui.custom.CustomRecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/recycler"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:overScrollMode="never"
android:padding="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:maxHeight="220dp" />
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="?android:attr/textColorPrimary"
android:textSize="16sp"
tools:text="選擇字幕" />
<ImageView
android:id="@+id/choose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:src="@drawable/ic_action_choose"
android:visibility="gone"
tools:visibility="visible" />
<ImageView
android:id="@+id/size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless"
android:src="@drawable/ic_action_size"
android:visibility="gone"
tools:visibility="visible" />
</LinearLayout>
<com.fongmi.android.tv.ui.custom.CustomRecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:clipToPadding="false"
android:overScrollMode="never"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:paddingBottom="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:maxHeight="204dp"
tools:listitem="@layout/adapter_track" />
</LinearLayout>

@ -90,7 +90,7 @@ public final class TrackDialog extends BaseDialog implements TrackAdapter.OnClic
}
private void showSubtitle(View view) {
SubtitleDialog.create(activity).show();
SubtitleDialog.create(activity).listen(true).show();
dismiss();
}

@ -65,6 +65,7 @@ public class SubtitleDialog {
private void onPositive(DialogInterface dialog, int which) {
callback.setSubtitle((int) binding.slider.getValue());
Setting.putSubtitle((int) binding.slider.getValue());
dialog.dismiss();
}

@ -135,7 +135,6 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B
@Override
public void setSubtitle(int size) {
mBinding.subtitleText.setText(String.valueOf(size));
Setting.putSubtitle(size);
}
private void setBackground(View view) {

@ -54,7 +54,7 @@
android:paddingEnd="16dp"
android:paddingBottom="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:maxHeight="228dp"
app:maxHeight="212dp"
tools:listitem="@layout/adapter_track" />
</LinearLayout>
Loading…
Cancel
Save