diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 7c0bf1275..c75dbd0b1 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -51,7 +51,6 @@ 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.CustomTarget; -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; @@ -60,7 +59,6 @@ import com.fongmi.android.tv.ui.adapter.QualityAdapter; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.custom.CustomKeyDownVod; import com.fongmi.android.tv.ui.custom.dialog.DescDialog; -import com.fongmi.android.tv.ui.custom.dialog.SubtitleDialog; import com.fongmi.android.tv.ui.custom.dialog.TrackDialog; import com.fongmi.android.tv.ui.presenter.ArrayPresenter; import com.fongmi.android.tv.ui.presenter.EpisodePresenter; @@ -96,7 +94,7 @@ import okhttp3.Call; import okhttp3.Response; import tv.danmaku.ijk.media.player.ui.IjkVideoView; -public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Listener, TrackDialog.Listener, ArrayPresenter.OnClickListener, Clock.Callback, SubtitleCallback { +public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Listener, TrackDialog.Listener, ArrayPresenter.OnClickListener, Clock.Callback { private ViewGroup.LayoutParams mFrameParams; private EpisodePresenter mEpisodePresenter; @@ -281,6 +279,8 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mBinding.control.text.setOnClickListener(this::onTrack); mBinding.control.audio.setOnClickListener(this::onTrack); mBinding.control.video.setOnClickListener(this::onTrack); + mBinding.control.text.setAddListener(this::onTextAdd); + mBinding.control.text.setSubListener(this::onTextSub); mBinding.control.speed.setAddListener(this::onSpeedAdd); mBinding.control.speed.setSubListener(this::onSpeedSub); mBinding.control.ending.setAddListener(this::onEndingAdd); @@ -298,7 +298,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mBinding.control.ending.setOnClickListener(view -> onEnding()); mBinding.control.change2.setOnClickListener(view -> onChange()); mBinding.control.opening.setOnClickListener(view -> onOpening()); - mBinding.control.text.setOnLongClickListener(view -> onTextLong()); mBinding.control.speed.setOnLongClickListener(view -> onSpeedLong()); mBinding.control.reset.setOnLongClickListener(view -> onResetToggle()); mBinding.control.ending.setOnLongClickListener(view -> onEndingReset()); @@ -362,6 +361,11 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis setSubtitle(16); } + 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); @@ -757,10 +761,18 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis hideControl(); } - private boolean onTextLong() { - SubtitleDialog.create(this).show(); - hideControl(); - return true; + private void onTextAdd() { + int size = Math.min(Setting.getSubtitle() + 1, 48); + mBinding.control.text.setText(String.valueOf(size)); + Setting.putSubtitle(size); + setSubtitle(size); + } + + private void onTextSub() { + int size = Math.max(Setting.getSubtitle() - 1, 14); + mBinding.control.text.setText(String.valueOf(size)); + Setting.putSubtitle(size); + setSubtitle(size); } private void onToggle() { @@ -808,6 +820,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } private void hideControl() { + mBinding.control.text.setText(R.string.play_track_text); mBinding.control.getRoot().setVisibility(View.GONE); App.removeCallbacks(mR1); } @@ -1314,12 +1327,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis 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); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SubtitleDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SubtitleDialog.java index a3cef6f9b..6574bc6f0 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SubtitleDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SubtitleDialog.java @@ -2,15 +2,22 @@ package com.fongmi.android.tv.ui.custom.dialog; import android.view.LayoutInflater; import android.view.View; +import android.view.WindowManager; +import androidx.annotation.Dimension; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.FragmentActivity; +import androidx.media3.common.text.Cue; import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.databinding.DialogSubtitleBinding; import com.fongmi.android.tv.impl.SubtitleCallback; +import com.fongmi.android.tv.player.ExoUtil; +import com.fongmi.android.tv.utils.ResUtil; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import java.util.Arrays; + public class SubtitleDialog { private final DialogSubtitleBinding binding; @@ -35,18 +42,24 @@ public class SubtitleDialog { } private void initDialog() { + WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); + params.width = (int) (ResUtil.getScreenWidth() * 0.45f); + dialog.getWindow().setAttributes(params); dialog.getWindow().setDimAmount(0); dialog.show(); } private void initView() { - binding.slider.setValue(value = Setting.getSubtitle()); + binding.slider.setValue(Setting.getSubtitle()); + binding.preview.setStyle(ExoUtil.getCaptionStyle()); + binding.preview.setFixedTextSize(Dimension.SP, value = Setting.getSubtitle()); + binding.preview.setCues(Arrays.asList(new Cue.Builder().setText("影視天下第一").build())); } private void initEvent() { binding.positive.setOnClickListener(this::onPositive); binding.negative.setOnClickListener(this::onNegative); - binding.slider.addOnChangeListener((slider, value, fromUser) -> callback.setSubtitle((int) value)); + binding.slider.addOnChangeListener((slider, value, fromUser) -> binding.preview.setFixedTextSize(Dimension.SP, value)); } private void onPositive(View view) { diff --git a/app/src/leanback/res/drawable/shape_subtitle.xml b/app/src/leanback/res/drawable/shape_subtitle.xml new file mode 100644 index 000000000..898f65fc7 --- /dev/null +++ b/app/src/leanback/res/drawable/shape_subtitle.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/leanback/res/layout/dialog_subtitle.xml b/app/src/leanback/res/layout/dialog_subtitle.xml index eae183a00..644ff8a70 100644 --- a/app/src/leanback/res/layout/dialog_subtitle.xml +++ b/app/src/leanback/res/layout/dialog_subtitle.xml @@ -3,10 +3,23 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" - android:gravity="center" android:orientation="vertical" android:padding="16dp"> + + + + + + diff --git a/app/src/leanback/res/layout/view_control_vod.xml b/app/src/leanback/res/layout/view_control_vod.xml index eb4b323f8..6cfc1ab16 100644 --- a/app/src/leanback/res/layout/view_control_vod.xml +++ b/app/src/leanback/res/layout/view_control_vod.xml @@ -140,7 +140,7 @@ android:textSize="14sp" tools:text="預設" /> -