From 38b7df4fff696fe04a3769279e54233d85b694fb Mon Sep 17 00:00:00 2001 From: okjackcaptain <378702538@qq.com> Date: Sun, 25 Sep 2022 11:09:21 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=86=85=E7=BD=AE=E5=AD=97=E5=B9=95?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E9=80=89=E6=8B=A9=E4=B8=AD=E6=96=87=20-=20?= =?UTF-8?q?=E5=86=85=E7=BD=AE=E5=AD=97=E5=B9=95=E6=98=BE=E7=A4=BAbug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20-=20=E5=AD=97=E5=B9=95=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E7=99=BD=E8=89=B2=E9=BB=91=E8=BE=B9=20-=20?= =?UTF-8?q?=E5=AD=97=E5=B9=95=E6=A0=B7=E5=BC=8F=E6=96=B0=E5=A2=9E=E5=B0=91?= =?UTF-8?q?=E5=A5=B3=E7=B2=89=20-=20=E5=8E=BB=E6=8E=89=E5=AD=97=E5=B9=95?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E7=BB=93=E6=9E=9C=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../github/tvbox/osc/player/TrackInfo.java | 4 +- .../subtitle/widget/SimpleSubtitleView.java | 7 ++- .../tvbox/osc/ui/activity/PlayActivity.java | 49 ++++++++++++++--- .../osc/ui/dialog/SearchSubtitleDialog.java | 9 ---- .../tvbox/osc/ui/dialog/SubtitleDialog.java | 26 +++++++++ .../tvbox/osc/ui/fragment/PlayFragment.java | 49 ++++++++++++++--- app/src/main/res/layout/dialog_select.xml | 2 +- app/src/main/res/layout/dialog_subtitle.xml | 54 +++++++++++++++++++ .../res/layout/player_vod_control_view.xml | 4 ++ app/src/main/res/values/colors.xml | 1 + 10 files changed, 177 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/github/tvbox/osc/player/TrackInfo.java b/app/src/main/java/com/github/tvbox/osc/player/TrackInfo.java index 506e888e..68160792 100644 --- a/app/src/main/java/com/github/tvbox/osc/player/TrackInfo.java +++ b/app/src/main/java/com/github/tvbox/osc/player/TrackInfo.java @@ -26,8 +26,8 @@ public class TrackInfo { public int getSelected(List list, boolean track) { int i = 0; - for (TrackInfoBean audio : list) { - if (audio.selected) return track ? audio.index : i; + for (TrackInfoBean trackInfoBean : list) { + if (trackInfoBean.selected) return track ? trackInfoBean.index : i; i++; } return 99999; diff --git a/app/src/main/java/com/github/tvbox/osc/subtitle/widget/SimpleSubtitleView.java b/app/src/main/java/com/github/tvbox/osc/subtitle/widget/SimpleSubtitleView.java index e71ba214..2d10b89a 100644 --- a/app/src/main/java/com/github/tvbox/osc/subtitle/widget/SimpleSubtitleView.java +++ b/app/src/main/java/com/github/tvbox/osc/subtitle/widget/SimpleSubtitleView.java @@ -92,7 +92,12 @@ public class SimpleSubtitleView extends TextView setText(EMPTY_TEXT); return; } - setText(Html.fromHtml(subtitle.content)); + String text = subtitle.content; + text = text.replaceAll("(?:\\r\\n)", "
"); + text = text.replaceAll("(?:\\r)", "
"); + text = text.replaceAll("(?:\\n)", "
"); + text = text.replaceAll("\\{[\\s\\S]*\\}", ""); + setText(Html.fromHtml(text)); } @Override diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java index 7a09bd4e..7ac33e39 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java @@ -204,7 +204,11 @@ public class PlayActivity extends BaseActivity { @Override public void selectSubtitle() { - selectMySubtitle(); + try { + selectMySubtitle(); + } catch (Exception e) { + e.printStackTrace(); + } } @Override @@ -230,10 +234,13 @@ public class PlayActivity extends BaseActivity { } } - void selectMySubtitle() { + void selectMySubtitle() throws Exception { SubtitleDialog subtitleDialog = new SubtitleDialog(PlayActivity.this); - if (mController.mSubtitleView.hasInternal) { + int playerType = mVodPlayerCfg.getInt("pl"); + if (mController.mSubtitleView.hasInternal && playerType == 1) { subtitleDialog.selectInternal.setVisibility(View.VISIBLE); + } else { + subtitleDialog.selectInternal.setVisibility(View.GONE); } subtitleDialog.setSubtitleViewListener(new SubtitleDialog.SubtitleViewListener() { @Override @@ -248,6 +255,10 @@ public class PlayActivity extends BaseActivity { public void selectInternalSubtitle() { selectMyInternalSubtitle(); } + @Override + public void setTextStyle(int style) { + setSubtitleViewTextStyle(style); + } }); subtitleDialog.setSearchSubtitleListener(new SubtitleDialog.SearchSubtitleListener() { @Override @@ -297,6 +308,16 @@ public class PlayActivity extends BaseActivity { subtitleDialog.show(); } + void setSubtitleViewTextStyle(int style) { + if (style == 0) { + mController.mSubtitleView.setTextColor(getBaseContext().getResources().getColorStateList(R.color.color_FFFFFF)); + mController.mSubtitleView.setShadowLayer(2, 1, 1, R.color.color_CC000000); + } else if (style == 1) { + mController.mSubtitleView.setTextColor(getBaseContext().getResources().getColorStateList(R.color.color_FFB6C1)); + mController.mSubtitleView.setShadowLayer(2, 1, 1, R.color.color_FFFFFF); + } + } + void selectMyAudioTrack() { AbstractPlayer mediaPlayer = mVideoView.getMediaPlayer(); if (!(mediaPlayer instanceof IjkMediaPlayer)) { @@ -341,9 +362,10 @@ public class PlayActivity extends BaseActivity { @Override public String getDisplay(TrackInfoBean val) { -// return val.index + " : " + val.language; - String str = val.name.substring(val.name.substring(0, val.name.indexOf(",")).length()+1).trim(); - return val.index + " : " + str; + String name = val.name.replace("AUDIO,", ""); + name = name.replace("N/A,", ""); + name = name.replace(" ", ""); + return val.index + " : " + val.language + " : " + name; } }, new DiffUtil.ItemCallback() { @Override @@ -497,8 +519,8 @@ public class PlayActivity extends BaseActivity { } private void initSubtitleView() { + TrackInfo trackInfo = null; if (mVideoView.getMediaPlayer() instanceof IjkMediaPlayer) { - TrackInfo trackInfo = null; trackInfo = ((IjkMediaPlayer)(mVideoView.getMediaPlayer())).getTrackInfo(); if (trackInfo != null && trackInfo.getSubtitle().size() > 0) { mController.mSubtitleView.hasInternal = true; @@ -525,6 +547,19 @@ public class PlayActivity extends BaseActivity { } else { if (mController.mSubtitleView.hasInternal) { mController.mSubtitleView.isInternal = true; + if (trackInfo != null) { + List subtitleTrackList = trackInfo.getSubtitle(); + int selectedIndex = trackInfo.getSubtitleSelected(true); + for(TrackInfoBean subtitleTrackInfoBean : subtitleTrackList) { + String lowerLang = subtitleTrackInfoBean.language.toLowerCase(); + if (lowerLang.startsWith("zh") || lowerLang.startsWith("ch")) { + if (selectedIndex != subtitleTrackInfoBean.index) { + ((IjkMediaPlayer)(mVideoView.getMediaPlayer())).setTrack(subtitleTrackInfoBean.index); + break; + } + } + } + } } } } diff --git a/app/src/main/java/com/github/tvbox/osc/ui/dialog/SearchSubtitleDialog.java b/app/src/main/java/com/github/tvbox/osc/ui/dialog/SearchSubtitleDialog.java index 31bcbd56..c6a389ec 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/dialog/SearchSubtitleDialog.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/dialog/SearchSubtitleDialog.java @@ -150,15 +150,6 @@ public class SearchSubtitleDialog extends BaseDialog { }); return; } - //过滤结果 - ArrayList data_new=new ArrayList<>(); - for (int i=0;i< data.size();i++){ - Subtitle subtitle = data.get(i); - if(subtitle.getName().contains(searchWord)){ - data_new.add(subtitle); - } - } - data = data_new; if (data.size() > 0) { mGridView.requestFocus(); diff --git a/app/src/main/java/com/github/tvbox/osc/ui/dialog/SubtitleDialog.java b/app/src/main/java/com/github/tvbox/osc/ui/dialog/SubtitleDialog.java index 364d360a..3e57a189 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/dialog/SubtitleDialog.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/dialog/SubtitleDialog.java @@ -4,6 +4,7 @@ import android.app.Activity; import android.content.Context; import android.view.View; import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.NonNull; @@ -24,6 +25,8 @@ public class SubtitleDialog extends BaseDialog { private TextView subtitleTimeMinus; private TextView subtitleTimeText; private TextView subtitleTimePlus; + private TextView subtitleStyleOne; + private TextView subtitleStyleTwo; private SearchSubtitleListener mSearchSubtitleListener; private LocalFileChooserListener mLocalFileChooserListener; @@ -48,6 +51,8 @@ public class SubtitleDialog extends BaseDialog { subtitleTimeMinus = findViewById(R.id.subtitleTimeMinus); subtitleTimeText = findViewById(R.id.subtitleTimeText); subtitleTimePlus = findViewById(R.id.subtitleTimePlus); + subtitleStyleOne = findViewById(R.id.subtitleStyleOne); + subtitleStyleTwo = findViewById(R.id.subtitleStyleTwo); selectLocal.setOnClickListener(new View.OnClickListener() { @Override @@ -153,6 +158,26 @@ public class SubtitleDialog extends BaseDialog { mSubtitleViewListener.selectInternalSubtitle(); } }); + + subtitleStyleOne.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + int style = 0; + dismiss(); + mSubtitleViewListener.setTextStyle(style); + Toast.makeText(getContext(), "设置样式成功", Toast.LENGTH_SHORT).show(); + } + }); + + subtitleStyleTwo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + int style = 1; + dismiss(); + mSubtitleViewListener.setTextStyle(style); + Toast.makeText(getContext(), "设置样式成功", Toast.LENGTH_SHORT).show(); + } + }); } public void setLocalFileChooserListener(LocalFileChooserListener localFileChooserListener) { @@ -179,5 +204,6 @@ public class SubtitleDialog extends BaseDialog { void setTextSize(int size); void setSubtitleDelay(int milliseconds); void selectInternalSubtitle(); + void setTextStyle(int style); } } diff --git a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java index b162d857..59671d26 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java @@ -203,7 +203,11 @@ public class PlayFragment extends BaseLazyFragment { @Override public void selectSubtitle() { - selectMySubtitle(); + try { + selectMySubtitle(); + } catch (Exception e) { + e.printStackTrace(); + } } @Override @@ -229,10 +233,13 @@ public class PlayFragment extends BaseLazyFragment { } } - void selectMySubtitle() { + void selectMySubtitle() throws Exception { SubtitleDialog subtitleDialog = new SubtitleDialog(getActivity()); - if (mController.mSubtitleView.hasInternal) { + int playerType = mVodPlayerCfg.getInt("pl"); + if (mController.mSubtitleView.hasInternal && playerType == 1) { subtitleDialog.selectInternal.setVisibility(View.VISIBLE); + } else { + subtitleDialog.selectInternal.setVisibility(View.GONE); } subtitleDialog.setSubtitleViewListener(new SubtitleDialog.SubtitleViewListener() { @Override @@ -243,11 +250,14 @@ public class PlayFragment extends BaseLazyFragment { public void setSubtitleDelay(int milliseconds) { mController.mSubtitleView.setSubtitleDelay(milliseconds); } - @Override public void selectInternalSubtitle() { selectMyInternalSubtitle(); } + @Override + public void setTextStyle(int style) { + setSubtitleViewTextStyle(style); + } }); subtitleDialog.setSearchSubtitleListener(new SubtitleDialog.SearchSubtitleListener() { @Override @@ -297,6 +307,15 @@ public class PlayFragment extends BaseLazyFragment { subtitleDialog.show(); } + void setSubtitleViewTextStyle(int style) { + if (style == 0) { + mController.mSubtitleView.setTextColor(getContext().getResources().getColorStateList(R.color.color_FFFFFF)); + mController.mSubtitleView.setShadowLayer(2, 1, 1, R.color.color_CC000000); + } else if (style == 1) { + mController.mSubtitleView.setTextColor(getContext().getResources().getColorStateList(R.color.color_FFB6C1)); + mController.mSubtitleView.setShadowLayer(2, 1, 1, R.color.color_FFFFFF); + } + } void selectMyAudioTrack() { AbstractPlayer mediaPlayer = mVideoView.getMediaPlayer(); @@ -342,9 +361,10 @@ public class PlayFragment extends BaseLazyFragment { @Override public String getDisplay(TrackInfoBean val) { -// return val.index + " : " + val.language; - String str = val.name.substring(val.name.substring(0, val.name.indexOf(",")).length()+1).trim(); - return val.index + " : " + str; + String name = val.name.replace("AUDIO,", ""); + name = name.replace("N/A,", ""); + name = name.replace(" ", ""); + return val.index + " : " + val.language + " : " + name; } }, new DiffUtil.ItemCallback() { @Override @@ -496,8 +516,8 @@ public class PlayFragment extends BaseLazyFragment { } private void initSubtitleView() { + TrackInfo trackInfo = null; if (mVideoView.getMediaPlayer() instanceof IjkMediaPlayer) { - TrackInfo trackInfo = null; trackInfo = ((IjkMediaPlayer)(mVideoView.getMediaPlayer())).getTrackInfo(); if (trackInfo != null && trackInfo.getSubtitle().size() > 0) { mController.mSubtitleView.hasInternal = true; @@ -524,6 +544,19 @@ public class PlayFragment extends BaseLazyFragment { } else { if (mController.mSubtitleView.hasInternal) { mController.mSubtitleView.isInternal = true; + if (trackInfo != null) { + List subtitleTrackList = trackInfo.getSubtitle(); + int selectedIndex = trackInfo.getSubtitleSelected(true); + for(TrackInfoBean subtitleTrackInfoBean : subtitleTrackList) { + String lowerLang = subtitleTrackInfoBean.language.toLowerCase(); + if (lowerLang.startsWith("zh") || lowerLang.startsWith("ch")) { + if (selectedIndex != subtitleTrackInfoBean.index) { + ((IjkMediaPlayer)(mVideoView.getMediaPlayer())).setTrack(subtitleTrackInfoBean.index); + break; + } + } + } + } } } } diff --git a/app/src/main/res/layout/dialog_select.xml b/app/src/main/res/layout/dialog_select.xml index b07e34e2..8316033b 100644 --- a/app/src/main/res/layout/dialog_select.xml +++ b/app/src/main/res/layout/dialog_select.xml @@ -6,7 +6,7 @@ android:layout_height="match_parent"> diff --git a/app/src/main/res/layout/dialog_subtitle.xml b/app/src/main/res/layout/dialog_subtitle.xml index e3e65569..809fab5d 100644 --- a/app/src/main/res/layout/dialog_subtitle.xml +++ b/app/src/main/res/layout/dialog_subtitle.xml @@ -109,6 +109,60 @@ + + + + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 978551ba..f7da5f40 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -12,6 +12,7 @@ #BD0CADE2 #FF0057 #FF5F00 + #FFB6C1 #3D3D3D #32364E #6632364E