Liu Song’s Projects


~/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