~/Projects/tvbox
git clone https://code.lsong.org/tvbox
Commit
- Commit
- 0af730f904ebd9ba566e604402d39fd0fb76fd1b
- Author
- FongMi <[email protected]>
- Date
- 2023-11-13 18:16:06 +0800 +0800
- Diffstat
app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java | 1 app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java | 17 app/src/leanback/java/com/fongmi/android/tv/ui/dialog/SubtitleDialog.java | 11 app/src/leanback/res/drawable/ic_action_choose.xml | 10 app/src/leanback/res/drawable/ic_action_size.xml | 10 app/src/leanback/res/layout/dialog_track.xml | 59 app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java | 2 app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SubtitleDialog.java | 1 app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java | 1 app/src/mobile/res/layout/dialog_track.xml | 2
[leanback] support local subtitle choose
diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java index 904d76bc04623a7f21de2119df7dc6d541b2e0a8..150680a251bf55ae38e60f1cfdc9daac2205dc90 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java @@ -123,6 +123,5 @@ @Override public void setSubtitle(int size) { mBinding.subtitleText.setText(String.valueOf(size)); - Setting.putSubtitle(size); } } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index b558a35630baa0d897ea1fce9f8ee23ae57759fb..6823e2ea9acde62e7c50ded784ec8249a5809993 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -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; @@ -112,7 +113,7 @@ import okhttp3.Response; import tv.danmaku.ijk.media.player.ui.IjkVideoView; import android.text.Html; -import android.net.Uri; +import androidx.recyclerview.widget.RecyclerView; private ActivityVideoBinding mBinding; private ViewGroup.LayoutParams mFrameParams; @@ -423,11 +424,6 @@ } private void setDecodeView() { 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) { @@ -1162,8 +1158,9 @@ } } private void setTrackVisible(boolean visible) { -import android.net.Uri; +package com.fongmi.android.tv.ui.activity; import android.Manifest; + 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 +1498,12 @@ @Override public void onDoubleTap() { if (isFullscreen()) onKeyCenter(); + } + + @Override + public void setSubtitle(int size) { + getExo().getSubtitleView().setFixedTextSize(Dimension.SP, size); + getIjk().getSubtitleView().setFixedTextSize(Dimension.SP, size); } @Override diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/SubtitleDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/SubtitleDialog.java index 72d798036aa50773f8f04303a0c2831d6660f6ef..cc90ece283fe6acdaeb771a3973e4d5e8c87e1fc 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/SubtitleDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/SubtitleDialog.java @@ -23,6 +23,7 @@ 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 @@ this.binding = DialogSubtitleBinding.inflate(LayoutInflater.from(activity)); 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 @@ 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 @@ 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(); } diff --git a/app/src/leanback/res/drawable/ic_action_choose.xml b/app/src/leanback/res/drawable/ic_action_choose.xml new file mode 100644 index 0000000000000000000000000000000000000000..a56e7056a0091ab0eb176a44ff0f54582935f40e --- /dev/null +++ b/app/src/leanback/res/drawable/ic_action_choose.xml @@ -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> diff --git a/app/src/leanback/res/drawable/ic_action_size.xml b/app/src/leanback/res/drawable/ic_action_size.xml new file mode 100644 index 0000000000000000000000000000000000000000..f218cf121a7809e1e9beb06d7c9435e28b5a3af5 --- /dev/null +++ b/app/src/leanback/res/drawable/ic_action_size.xml @@ -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> diff --git a/app/src/leanback/res/layout/dialog_track.xml b/app/src/leanback/res/layout/dialog_track.xml index 852701927d910645aace3d6879c55ca2c54c1808..396725f067f741ccc3994707e1629848051fd34a 100644 --- a/app/src/leanback/res/layout/dialog_track.xml +++ b/app/src/leanback/res/layout/dialog_track.xml @@ -1,10 +1,69 @@ <?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" +<?xml version="1.0" encoding="utf-8"?> <com.fongmi.android.tv.ui.custom.CustomRecyclerView xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" +<?xml version="1.0" encoding="utf-8"?> xmlns:app="http://schemas.android.com/apk/res-auto" +<?xml version="1.0" encoding="utf-8"?> android:id="@+id/recycler" +<?xml version="1.0" encoding="utf-8"?> android:layout_width="match_parent" +<?xml version="1.0" encoding="utf-8"?> android:layout_height="wrap_content" +<?xml version="1.0" encoding="utf-8"?> android:overScrollMode="never" +<?xml version="1.0" encoding="utf-8"?> android:padding="16dp" +<?xml version="1.0" encoding="utf-8"?> app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" + android:orientation="horizontal"> <?xml version="1.0" encoding="utf-8"?> + android:id="@+id/recycler" + <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 + xmlns:app="http://schemas.android.com/apk/res-auto" + 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> \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java b/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java index 7b585a92f755f97d44c53132b27f1aa5d61dd6dc..856e855190f915579fe0040d4e406877750b6f0c 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java @@ -90,7 +90,7 @@ binding.choose.setOnClickListener(this::showChooser); } private void showSubtitle(View view) { - SubtitleDialog.create(activity).show(); + SubtitleDialog.create(activity).listen(true).show(); dismiss(); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SubtitleDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SubtitleDialog.java index a1b398a92019fe6c2ddfb5e0feeb6cbab5a7595e..adaff03fb1b3f780f906ffeafa4f1b6971d3991d 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SubtitleDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SubtitleDialog.java @@ -65,6 +65,7 @@ } private void onPositive(DialogInterface dialog, int which) { callback.setSubtitle((int) binding.slider.getValue()); + Setting.putSubtitle((int) binding.slider.getValue()); dialog.dismiss(); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java index 948b0e02cb40e5208a053ba8c3d70b7c02555d28..29da95c351f310fbbd55bc73d3b691a61a7b8e58 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java @@ -135,7 +135,6 @@ @Override public void setSubtitle(int size) { mBinding.subtitleText.setText(String.valueOf(size)); - Setting.putSubtitle(size); } private void setBackground(View view) { diff --git a/app/src/mobile/res/layout/dialog_track.xml b/app/src/mobile/res/layout/dialog_track.xml index 84a95bcea7d8eac257de291b6a94e57b0658945f..be8743736fa4c703d0ee2ead6c2d99f24c0fa53b 100644 --- a/app/src/mobile/res/layout/dialog_track.xml +++ b/app/src/mobile/res/layout/dialog_track.xml @@ -55,7 +55,7 @@ android:paddingEnd="16dp" android:paddingBottom="16dp" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" xmlns:tools="http://schemas.android.com/tools" - xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_height="wrap_content" tools:listitem="@layout/adapter_track" /> </LinearLayout> \ No newline at end of file