From 2e666b0cd2fb316e2fb0d9b7d89a78cb72dd4201 Mon Sep 17 00:00:00 2001 From: okjack Date: Tue, 4 Jun 2024 11:16:50 +0800 Subject: [PATCH 1/6] Update proguard-rules.pro --- app/proguard-rules.pro | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index cae59a738..13015298f 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -21,6 +21,8 @@ -keepclassmembers,allowobfuscation class * { @org.simpleframework.xml.Text ; } -keepclassmembers,allowobfuscation class * { @org.simpleframework.xml.Path ; } -keepclassmembers,allowobfuscation class * { @org.simpleframework.xml.ElementList ; } +-keepclassmembers,allowobfuscation class * { @org.simpleframework.xml.Root ; } +-keepclassmembers,allowobfuscation class * { @org.simpleframework.xml.Attribute ; } # OkHttp -dontwarn okhttp3.** @@ -90,6 +92,9 @@ public static ** valueOf(java.lang.String); } +# bean +-keep class com.fongmi.android.tv.bean.** { *; } + # x5 -dontwarn dalvik.** -dontwarn com.tencent.smtt.** From c11ff31d6b2494128daca0f071af11dcc3aab928 Mon Sep 17 00:00:00 2001 From: okjack Date: Tue, 4 Jun 2024 18:21:02 +0800 Subject: [PATCH 2/6] Update IjkVideoView.java --- .../main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java index 848dfa1c7..82c3cdd6d 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java @@ -460,7 +460,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl mPlayer.setOption(format, "fflags", "fastseek"); mPlayer.setOption(format, "http-detect-range-support", 0); mPlayer.setOption(player, "enable-accurate-seek", 0); - mPlayer.setOption(player, "framedrop", 5); + mPlayer.setOption(player, "framedrop", 1); mPlayer.setOption(player, "max-buffer-size", 15 * 1024 * 1024); mPlayer.setOption(player, "mediacodec", mCurrentDecode); mPlayer.setOption(player, "mediacodec-hevc", mCurrentDecode); From b34e0fe6b77acbf2f394280f3e688267b187beb5 Mon Sep 17 00:00:00 2001 From: okjack Date: Tue, 4 Jun 2024 18:26:20 +0800 Subject: [PATCH 3/6] Danmaku Sync --- .../java/com/fongmi/android/tv/Setting.java | 8 ------ .../com/fongmi/android/tv/player/Players.java | 10 ++----- .../android/tv/player/danmu/Parser.java | 22 ++++++--------- .../tv/ui/fragment/SettingCustomFragment.java | 13 --------- .../res/layout/fragment_setting_custom.xml | 28 ------------------- 5 files changed, 12 insertions(+), 69 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/Setting.java b/app/src/main/java/com/fongmi/android/tv/Setting.java index 8652d4c89..f5596a26a 100644 --- a/app/src/main/java/com/fongmi/android/tv/Setting.java +++ b/app/src/main/java/com/fongmi/android/tv/Setting.java @@ -286,14 +286,6 @@ public class Setting { return Math.min(Math.max(Prefers.getInt("danmu_alpha", 90), 10), 100); } - public static void putDanmuSync(boolean sync) { - Prefers.put("danmu_sync", sync); - } - - public static boolean isDanmuSync() { - return Prefers.getBoolean("danmu_sync", false); - } - public static void putDanmuAlpha(int alpha) { Prefers.put("danmu_alpha", alpha); } diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index 620435b3d..8f1059b9a 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -81,11 +81,9 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic private Sub sub; private long position; - private float speed; private int player; private int error; private int retry; - private boolean danmuSync; public static boolean isExo(int type) { return type == EXO; @@ -112,7 +110,6 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic builder = new StringBuilder(); runnable = ErrorEvent::timeout; formatter = new Formatter(builder, Locale.getDefault()); - danmuSync = Setting.isDanmuSync(); createSession(activity); return this; } @@ -308,8 +305,8 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic } public String setSpeed(float speed) { - if (exoPlayer != null && !Setting.isTunnel()) exoPlayer.setPlaybackSpeed(this.speed = speed); - if (ijkPlayer != null) ijkPlayer.setSpeed(this.speed = speed); + if (exoPlayer != null && !Setting.isTunnel()) exoPlayer.setPlaybackSpeed(speed); + if (ijkPlayer != null) ijkPlayer.setSpeed(speed); return getSpeedText(); } @@ -689,8 +686,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic @Override public void updateTimer(DanmakuTimer timer) { - if (danmuSync) App.post(() -> timer.update(getPosition())); - else if (speed != 1) timer.add((long) (timer.lastInterval() * (speed - 1))); + } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java b/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java index cf6d8b5d5..72318e239 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java +++ b/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java @@ -24,10 +24,8 @@ import master.flame.danmaku.danmaku.util.DanmakuUtils; public class Parser extends BaseDanmakuParser { private final Danmu danmu; - private BaseDanmaku item; private float scaleX; private float scaleY; - private int index; public Parser(String path) { this.danmu = Danmu.fromXml(getContent(path)); @@ -45,11 +43,9 @@ public class Parser extends BaseDanmakuParser { for (Danmu.Data data : danmu.getData()) { String[] values = data.getParam().split(","); if (values.length < 4) continue; - setParam(values); - setText(data.getText()); - synchronized (result.obtainSynchronizer()) { - result.addItem(item); - } + BaseDanmaku item = createDanmaku(values); + setText(item, data.getText()); + result.addItem(item); } return result; } @@ -62,27 +58,27 @@ public class Parser extends BaseDanmakuParser { return this; } - private void setParam(String[] values) { + private BaseDanmaku createDanmaku(String[] values) { int type = Integer.parseInt(values[1]); long time = (long) (Float.parseFloat(values[0]) * 1000); float size = Float.parseFloat(values[2]) * (mDispDensity - 0.6f); int color = (int) ((0x00000000ff000000L | Long.parseLong(values[3])) & 0x00000000ffffffffL); - item = mContext.mDanmakuFactory.createDanmaku(type, mContext); + BaseDanmaku item = mContext.mDanmakuFactory.createDanmaku(type, mContext); item.setTime(time); item.setTimer(mTimer); item.textSize = size; item.textColor = color; item.textShadowColor = color <= Color.BLACK ? Color.WHITE : Color.BLACK; item.flags = mContext.mGlobalFlagValues; + return item; } - private void setText(String text) { - item.index = index++; + private void setText(BaseDanmaku item, String text) { DanmakuUtils.fillText(item, decodeXmlString(text)); - if (item.getType() == BaseDanmaku.TYPE_SPECIAL && text.startsWith("[") && text.endsWith("]")) setSpecial(); + if (item.getType() == BaseDanmaku.TYPE_SPECIAL && text.startsWith("[") && text.endsWith("]")) setSpecial(item); } - private void setSpecial() { + private void setSpecial(BaseDanmaku item) { String[] textArr = null; try { JSONArray jsonArray = new JSONArray(item.text); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java index 9e103adc3..dce98d730 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java @@ -45,7 +45,6 @@ public class SettingCustomFragment extends BaseFragment { @Override protected void initView() { mBinding.sizeText.setText((size = ResUtil.getStringArray(R.array.select_size))[Setting.getSize()]); - mBinding.danmuSyncText.setText(getSwitch(Setting.isDanmuSync())); mBinding.speedText.setText(getSpeedText()); mBinding.incognitoText.setText(getSwitch(Setting.isIncognito())); mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch())); @@ -57,9 +56,7 @@ public class SettingCustomFragment extends BaseFragment { @Override protected void initEvent() { - mBinding.title.setOnLongClickListener(this::onTitle); mBinding.size.setOnClickListener(this::setSize); - mBinding.danmuSync.setOnClickListener(this::setDanmuSync); mBinding.speed.setOnClickListener(this::setSpeed); mBinding.speed.setOnLongClickListener(this::resetSpeed); mBinding.incognito.setOnClickListener(this::setIncognito); @@ -72,11 +69,6 @@ public class SettingCustomFragment extends BaseFragment { } - private boolean onTitle(View view) { - mBinding.danmuSync.setVisibility(View.VISIBLE); - return true; - } - private void setSize(View view) { new MaterialAlertDialogBuilder(getActivity()).setTitle(R.string.setting_size).setNegativeButton(R.string.dialog_negative, null).setSingleChoiceItems(size, Setting.getSize(), (dialog, which) -> { mBinding.sizeText.setText(size[which]); @@ -86,11 +78,6 @@ public class SettingCustomFragment extends BaseFragment { }).show(); } - private void setDanmuSync(View view) { - Setting.putDanmuSync(!Setting.isDanmuSync()); - mBinding.danmuSyncText.setText(getSwitch(Setting.isDanmuSync())); - } - private String getSpeedText() { return String.format(Locale.getDefault(), "%.2f", Setting.getPlaySpeed()); } diff --git a/app/src/mobile/res/layout/fragment_setting_custom.xml b/app/src/mobile/res/layout/fragment_setting_custom.xml index b7cb91fed..1a8c0090b 100644 --- a/app/src/mobile/res/layout/fragment_setting_custom.xml +++ b/app/src/mobile/res/layout/fragment_setting_custom.xml @@ -70,34 +70,6 @@ - - - - - - - - Date: Tue, 4 Jun 2024 18:28:27 +0800 Subject: [PATCH 4/6] Fix vod pic bug --- .../java/com/fongmi/android/tv/ui/activity/VideoActivity.java | 2 +- .../java/com/fongmi/android/tv/ui/activity/VideoActivity.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 ae856add9..7e1fd73a4 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 @@ -1227,6 +1227,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List if (Setting.isIncognito() && mHistory.getKey().equals(getHistoryKey())) mHistory.delete(); mBinding.control.opening.setText(mHistory.getOpening() == 0 ? getString(R.string.play_op) : mPlayers.stringToTime(mHistory.getOpening())); mBinding.control.ending.setText(mHistory.getEnding() == 0 ? getString(R.string.play_ed) : mPlayers.stringToTime(mHistory.getEnding())); + mHistory.setVodPic(item.getVodPic()); mPlayers.setPlayer(getPlayer()); setScale(getScale()); setPlayerView(); @@ -1237,7 +1238,6 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List History history = new History(); history.setKey(getHistoryKey()); history.setCid(VodConfig.getCid()); - history.setVodPic(item.getVodPic()); history.setVodName(item.getVodName()); history.findEpisode(item.getVodFlags()); history.setSpeed(Setting.getPlaySpeed()); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 7adb95db6..a150294f3 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -1131,6 +1131,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo if (Setting.isIncognito() && mHistory.getKey().equals(getHistoryKey())) mHistory.delete(); mBinding.control.action.opening.setText(mHistory.getOpening() == 0 ? getString(R.string.play_op) : mPlayers.stringToTime(mHistory.getOpening())); mBinding.control.action.ending.setText(mHistory.getEnding() == 0 ? getString(R.string.play_ed) : mPlayers.stringToTime(mHistory.getEnding())); + mHistory.setVodPic(item.getVodPic()); mPlayers.setPlayer(getPlayer()); setScale(getScale()); setPlayerView(); @@ -1141,7 +1142,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo History history = new History(); history.setKey(getHistoryKey()); history.setCid(VodConfig.getCid()); - history.setVodPic(item.getVodPic()); history.setVodName(item.getVodName()); history.findEpisode(item.getVodFlags()); history.setSpeed(Setting.getPlaySpeed()); From 0ee7c69ffb1013a1b2db8c6b2eaeb4d23628a5a0 Mon Sep 17 00:00:00 2001 From: okjack Date: Tue, 4 Jun 2024 18:30:55 +0800 Subject: [PATCH 5/6] Fix trans bug --- .../fongmi/android/tv/ui/activity/VodActivity.java | 3 +-- .../fongmi/android/tv/api/config/VodConfig.java | 2 +- .../java/com/fongmi/android/tv/bean/Result.java | 10 ++++++++++ .../main/java/com/fongmi/android/tv/bean/Site.java | 14 ++++++++++++++ .../fongmi/android/tv/ui/fragment/VodFragment.java | 3 +-- 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java index f4b136093..9e050ccc7 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java @@ -31,7 +31,6 @@ import com.fongmi.android.tv.ui.presenter.TypePresenter; import com.fongmi.android.tv.utils.KeyUtil; import com.fongmi.android.tv.utils.ResUtil; import com.github.catvod.utils.Prefers; -import com.github.catvod.utils.Trans; import java.util.ArrayList; import java.util.List; @@ -110,7 +109,7 @@ public class VodActivity extends BaseActivity implements TypePresenter.OnClickLi private List getTypes(Result result) { List items = new ArrayList<>(); - for (String cate : getSite().getCategories()) for (Class item : result.getTypes()) if (Trans.s2t(cate).equals(item.getTypeName())) items.add(item); + for (String cate : getSite().getCategories()) for (Class item : result.getTypes()) if (cate.equals(item.getTypeName())) items.add(item); return items; } diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java index 877a0d72a..2555b1421 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java @@ -197,7 +197,7 @@ public class VodConfig { if (sites.contains(site)) continue; site.setApi(parseApi(site.getApi())); site.setExt(parseExt(site.getExt())); - sites.add(site.sync()); + sites.add(site.trans().sync()); } for (Site site : sites) { if (site.getKey().equals(config.getHome())) { diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Result.java b/app/src/main/java/com/fongmi/android/tv/bean/Result.java index 489496f24..494f9094e 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Result.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Result.java @@ -70,6 +70,8 @@ public class Result implements Parcelable { private String format; @SerializedName("click") private String click; + @SerializedName("js") + private String js; @SerializedName("key") private String key; @SerializedName("pagecount") @@ -241,6 +243,14 @@ public class Result implements Parcelable { this.click = click; } + public String getJs() { + return TextUtils.isEmpty(js) ? "" : js; + } + + public void setJs(String js) { + this.js = js; + } + public String getKey() { return TextUtils.isEmpty(key) ? "" : key; } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Site.java b/app/src/main/java/com/fongmi/android/tv/bean/Site.java index e1a54a325..982b80771 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Site.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Site.java @@ -15,10 +15,12 @@ import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.db.AppDatabase; import com.fongmi.android.tv.gson.ExtAdapter; import com.github.catvod.utils.Json; +import com.github.catvod.utils.Trans; import com.google.gson.JsonElement; import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -203,6 +205,10 @@ public class Site implements Parcelable { return categories == null ? Collections.emptyList() : categories; } + public void setCategories(List categories) { + this.categories = categories; + } + public JsonElement getHeader() { return header; } @@ -253,6 +259,14 @@ public class Site implements Parcelable { return Headers.of(Json.toMap(getHeader())); } + public Site trans() { + if (Trans.pass()) return this; + List categories = new ArrayList<>(); + for (String cate : getCategories()) categories.add(Trans.s2t(cate)); + setCategories(categories); + return this; + } + public Site sync() { Site item = find(getKey()); if (item == null) return this; diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index 4be5d22f3..8198e3de1 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -59,7 +59,6 @@ import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.ResUtil; import com.fongmi.android.tv.utils.UrlUtil; import com.github.catvod.net.OkHttp; -import com.github.catvod.utils.Trans; import com.google.common.net.HttpHeaders; import com.permissionx.guolindev.PermissionX; @@ -183,7 +182,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal private Result handle(Result result) { List types = new ArrayList<>(); for (Class type : result.getTypes()) if (result.getFilters().containsKey(type.getTypeId())) type.setFilters(result.getFilters().get(type.getTypeId())); - for (String cate : getSite().getCategories()) for (Class type : result.getTypes()) if (Trans.s2t(cate).equals(type.getTypeName())) types.add(type); + for (String cate : getSite().getCategories()) for (Class type : result.getTypes()) if (cate.equals(type.getTypeName())) types.add(type); result.setTypes(types); return result; } From 9674b786613350b573320040e8d432ce1847fb3c Mon Sep 17 00:00:00 2001 From: okjack Date: Tue, 4 Jun 2024 18:31:37 +0800 Subject: [PATCH 6/6] build.gradle --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 0f36ef5be..e46fec9a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,7 +14,7 @@ android { //noinspection ExpiredTargetSdkVersion targetSdk 28 versionCode 237 - versionName "2.3.7" + versionName "0604" javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]