From dae8536aeac4eec830318ccbb4c261a59f52f4ed Mon Sep 17 00:00:00 2001 From: okjack Date: Sun, 14 Jan 2024 21:18:26 +0800 Subject: [PATCH 01/14] build.gradle --- app/build.gradle | 27 +++++++++---------- .../com/fongmi/android/tv/player/ExoUtil.java | 6 +---- build.gradle | 1 + catvod/build.gradle | 2 +- ijkplayer/build.gradle | 2 +- settings.gradle | 3 --- 6 files changed, 16 insertions(+), 25 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 572830ab3..22e2f0a92 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -94,22 +94,19 @@ dependencies { implementation project(':jianpian') implementation project(':forcetech') implementation project(':ijkplayer') - pythonImplementation project(':pyramid') - implementation project(':media-lib-database') - implementation project(':media-lib-datasource') - implementation project(':media-lib-datasource-okhttp') - implementation project(':media-lib-datasource-rtmp') - implementation project(':media-lib-decoder-av1') - implementation project(':media-lib-decoder-ffmpeg') - implementation project(':media-lib-exoplayer') - implementation project(':media-lib-exoplayer-dash') - implementation project(':media-lib-exoplayer-hls') - implementation project(':media-lib-exoplayer-rtsp') - implementation project(':media-lib-exoplayer-smoothstreaming') - implementation project(':media-lib-extractor') - implementation project(':media-lib-session') - implementation project(':media-lib-ui') implementation platform('org.jetbrains.kotlin:kotlin-bom:1.8.20') + implementation 'androidx.media3:media3-database:' + media3Version + implementation 'androidx.media3:media3-datasource:' + media3Version + implementation 'androidx.media3:media3-datasource-okhttp:' + media3Version + implementation 'androidx.media3:media3-datasource-rtmp:' + media3Version + implementation 'androidx.media3:media3-exoplayer:' + media3Version + implementation 'androidx.media3:media3-exoplayer-dash:' + media3Version + implementation 'androidx.media3:media3-exoplayer-hls:' + media3Version + implementation 'androidx.media3:media3-exoplayer-rtsp:' + media3Version + implementation 'androidx.media3:media3-exoplayer-smoothstreaming:' + media3Version + implementation 'androidx.media3:media3-extractor:' + media3Version + implementation 'androidx.media3:media3-session:' + media3Version + implementation 'androidx.media3:media3-ui:' + media3Version implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.biometric:biometric:1.1.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.6.2' diff --git a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java index efed90cbe..6ff2a6afe 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java @@ -43,7 +43,6 @@ import com.fongmi.android.tv.bean.Channel; import com.fongmi.android.tv.bean.Drm; import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.bean.Sub; -import com.fongmi.android.tv.utils.Sniffer; import com.fongmi.android.tv.utils.UrlUtil; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Path; @@ -67,7 +66,7 @@ public class ExoUtil { private static Cache cache; public static LoadControl buildLoadControl() { - return new DefaultLoadControl(Setting.getBuffer()); + return new DefaultLoadControl(); } public static TrackSelector buildTrackSelector() { @@ -116,7 +115,6 @@ public class ExoUtil { private static String getMimeType(String format, int errorCode) { if (format != null) return format; - if (errorCode == PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED || errorCode == PlaybackException.ERROR_CODE_PARSING_MANIFEST_MALFORMED) return MimeTypes.APPLICATION_OCTET; if (errorCode == PlaybackException.ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED || errorCode == PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED) return MimeTypes.APPLICATION_M3U8; return null; } @@ -145,9 +143,7 @@ public class ExoUtil { MediaItem.Builder builder = new MediaItem.Builder().setUri(uri); if (subs.size() > 0) builder.setSubtitleConfigurations(getSubtitles(subs)); if (drm != null) builder.setDrmConfiguration(drm.get()); - builder.setAllowChunklessPreparation(Players.isHard()); if (mimeType != null) builder.setMimeType(mimeType); - builder.setAds(Sniffer.getRegex(uri)); return builder.build(); } diff --git a/build.gradle b/build.gradle index 99d97e231..a31a4c46a 100644 --- a/build.gradle +++ b/build.gradle @@ -12,6 +12,7 @@ tasks.register('clean', Delete) { project.ext { gsonVersion = '2.10.1' jsoupVersion = '1.15.3' + media3Version = '1.2.0' okhttpVersion = '4.11.0' annotationVersion = '1.3.0' } diff --git a/catvod/build.gradle b/catvod/build.gradle index 8d26bb222..41b3cf264 100644 --- a/catvod/build.gradle +++ b/catvod/build.gradle @@ -12,7 +12,7 @@ android { } dependencies { - api project(':media-lib-common') + api 'androidx.media3:media3-common:' + media3Version api 'androidx.annotation:annotation:' + annotationVersion api 'androidx.preference:preference:1.2.1' api 'com.google.code.gson:gson:' + gsonVersion diff --git a/ijkplayer/build.gradle b/ijkplayer/build.gradle index 2d5929478..802edde4c 100644 --- a/ijkplayer/build.gradle +++ b/ijkplayer/build.gradle @@ -17,5 +17,5 @@ android { dependencies { implementation project(':catvod') - implementation project(':media-lib-ui') + implementation 'androidx.media3:media3-ui:1.1.1' } \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 3d87e8ff5..926fd148f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -29,12 +29,9 @@ include ':hook' include ':tvbus' include ':catvod' include ':danmaku' -include ':pyramid' include ':quickjs' include ':thunder' include ':jianpian' include ':forcetech' include ':ijkplayer' rootProject.name = "TV" -gradle.ext.androidxMediaModulePrefix = 'media-' -apply from: file("/media/core_settings.gradle") From 806992eeb820b691da4d78069a854f603113daac Mon Sep 17 00:00:00 2001 From: FongMi Date: Wed, 17 Jan 2024 15:16:12 +0800 Subject: [PATCH 02/14] Update media3 to 1.2.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a31a4c46a..8c2d420ed 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ tasks.register('clean', Delete) { project.ext { gsonVersion = '2.10.1' jsoupVersion = '1.15.3' - media3Version = '1.2.0' + media3Version = '1.2.1' okhttpVersion = '4.11.0' annotationVersion = '1.3.0' } From 8ee99c6caa17acaa10d47a8b0ff81548ffbb1894 Mon Sep 17 00:00:00 2001 From: FongMi Date: Thu, 15 Feb 2024 11:45:28 +0800 Subject: [PATCH 03/14] Clean gradle --- app/build.gradle | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d66690408..6db57cd5d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -93,9 +93,6 @@ dependencies { implementation project(':jianpian') implementation project(':forcetech') implementation project(':ijkplayer') - implementation platform('org.jetbrains.kotlin:kotlin-bom:1.8.20') - implementation 'androidx.media3:media3-database:' + media3Version - implementation 'androidx.media3:media3-datasource:' + media3Version implementation 'androidx.media3:media3-datasource-okhttp:' + media3Version implementation 'androidx.media3:media3-datasource-rtmp:' + media3Version implementation 'androidx.media3:media3-exoplayer:' + media3Version @@ -103,8 +100,6 @@ dependencies { implementation 'androidx.media3:media3-exoplayer-hls:' + media3Version implementation 'androidx.media3:media3-exoplayer-rtsp:' + media3Version implementation 'androidx.media3:media3-exoplayer-smoothstreaming:' + media3Version - implementation 'androidx.media3:media3-extractor:' + media3Version - implementation 'androidx.media3:media3-session:' + media3Version implementation 'androidx.media3:media3-ui:' + media3Version implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.biometric:biometric:1.1.0' From 1516e728d2856c9ae4fac9f3e9d146c993b9d7db Mon Sep 17 00:00:00 2001 From: "pixeebot[bot]" <104101892+pixeebot[bot]@users.noreply.github.com> Date: Sun, 3 Mar 2024 16:10:07 +0000 Subject: [PATCH 04/14] Switch order of literals to prevent NullPointerException --- .../android/tv/ui/activity/VodActivity.java | 2 +- .../android/tv/ui/dialog/ConfigDialog.java | 6 +++--- .../android/tv/ui/dialog/ProxyDialog.java | 4 ++-- .../fongmi/android/tv/ui/dialog/UaDialog.java | 4 ++-- .../tv/ui/fragment/CollectFragment.java | 2 +- .../android/tv/ui/fragment/VodFragment.java | 2 +- .../android/tv/api/config/VodConfig.java | 6 +++--- .../com/fongmi/android/tv/bean/Class.java | 2 +- .../com/fongmi/android/tv/bean/Style.java | 8 ++++---- .../java/com/fongmi/android/tv/bean/Vod.java | 4 ++-- .../android/tv/model/SiteViewModel.java | 6 +++--- .../com/fongmi/android/tv/player/Players.java | 10 +++++----- .../android/tv/player/extractor/Force.java | 2 +- .../android/tv/player/extractor/JianPian.java | 2 +- .../android/tv/player/extractor/Push.java | 2 +- .../android/tv/player/extractor/TVBus.java | 2 +- .../android/tv/player/extractor/Thunder.java | 2 +- .../android/tv/player/extractor/Video.java | 2 +- .../android/tv/player/extractor/ZLive.java | 2 +- .../android/tv/server/process/Action.java | 2 +- .../android/tv/server/process/Cache.java | 2 +- .../android/tv/ui/custom/CustomWebView.java | 4 ++-- .../com/fongmi/android/tv/utils/M3U8.java | 2 +- .../com/fongmi/android/tv/utils/UrlUtil.java | 6 +++--- .../tv/ui/activity/CollectActivity.java | 2 +- .../tv/ui/activity/FolderActivity.java | 2 +- .../android/tv/ui/dialog/ConfigDialog.java | 6 +++--- .../android/tv/ui/dialog/ProxyDialog.java | 4 ++-- .../fongmi/android/tv/ui/dialog/UaDialog.java | 4 ++-- .../android/tv/ui/fragment/TypeFragment.java | 8 ++++---- .../android/tv/ui/fragment/VodFragment.java | 2 +- .../java/com/github/catvod/utils/Prefers.java | 2 +- .../java/com/github/catvod/utils/Trans.java | 2 +- .../src/main/java/com/forcetech/Util.java | 2 +- .../ijk/media/player/IjkMediaMeta.java | 20 +++++++++---------- .../ijk/media/player/misc/IjkMediaFormat.java | 2 +- .../ijk/media/player/ui/IjkVideoView.java | 4 ++-- .../com/fongmi/quickjs/utils/Connect.java | 6 +++--- .../java/com/fongmi/quickjs/utils/Parser.java | 8 ++++---- 39 files changed, 80 insertions(+), 80 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 4138a52da..b61cd3b1b 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 @@ -190,7 +190,7 @@ public class VodActivity extends BaseActivity implements TypePresenter.OnClickLi @Override public Fragment getItem(int position) { Class type = (Class) mAdapter.get(position); - return VodFragment.newInstance(getKey(), type.getTypeId(), type.getStyle(), type.getExtend(false), type.getTypeFlag().equals("1")); + return VodFragment.newInstance(getKey(), type.getTypeId(), type.getStyle(), type.getExtend(false), "1".equals(type.getTypeFlag())); } @Override diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/ConfigDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/ConfigDialog.java index 4c815c06b..b2b2c5b5c 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/ConfigDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/ConfigDialog.java @@ -122,13 +122,13 @@ public class ConfigDialog implements DialogInterface.OnDismissListener { } private void detect(String s) { - if (append && s.equalsIgnoreCase("h")) { + if (append && "h".equalsIgnoreCase(s)) { append = false; binding.text.append("ttp://"); - } else if (append && s.equalsIgnoreCase("f")) { + } else if (append && "f".equalsIgnoreCase(s)) { append = false; binding.text.append("ile://"); - } else if (append && s.equalsIgnoreCase("a")) { + } else if (append && "a".equalsIgnoreCase(s)) { append = false; binding.text.append("ssets://"); } else if (s.length() > 1) { diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/ProxyDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/ProxyDialog.java index dc24f31a5..3299a7061 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/ProxyDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/ProxyDialog.java @@ -83,10 +83,10 @@ public class ProxyDialog implements DialogInterface.OnDismissListener { } private void detect(String s) { - if (append && s.equalsIgnoreCase("h")) { + if (append && "h".equalsIgnoreCase(s)) { append = false; binding.text.append("ttp://"); - } else if (append && s.equalsIgnoreCase("s")) { + } else if (append && "s".equalsIgnoreCase(s)) { append = false; binding.text.append("ocks5://"); } else if (append && s.length() == 1) { diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/UaDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/UaDialog.java index 9f9e21e4a..e0cf2c931 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/UaDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/UaDialog.java @@ -84,10 +84,10 @@ public class UaDialog implements DialogInterface.OnDismissListener { } private void detect(String s) { - if (append && s.equalsIgnoreCase("c")) { + if (append && "c".equalsIgnoreCase(s)) { append = false; binding.text.setText(Util.CHROME); - } else if (append && s.equalsIgnoreCase("o")) { + } else if (append && "o".equalsIgnoreCase(s)) { append = false; binding.text.setText(okhttp3.internal.Util.userAgent); } else if (s.length() > 1) { diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java index 259c95890..82852528d 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java @@ -128,7 +128,7 @@ public class CollectFragment extends BaseFragment implements CustomScroller.Call @Override public void onLoadMore(String page) { - if (mCollect == null || mCollect.getSite().getKey().equals("all")) return; + if (mCollect == null || "all".equals(mCollect.getSite().getKey())) return; mViewModel.searchContent(mCollect.getSite(), getKeyword(), page); mScroller.setLoading(true); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index ceb9f9613..c9e950fbf 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -175,7 +175,7 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback } private void getVideo(String typeId, String page) { - boolean first = page.equals("1"); + boolean first = "1".equals(page); if (first) mLast = null; if (first) showProgress(); int filterSize = mOpen ? mFilters.size() : 0; 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 007857d3b..2ff524487 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 @@ -255,9 +255,9 @@ public class VodConfig { } public Object[] proxyLocal(Map params) { - if (params.containsKey("do") && params.get("do").equals("js")) { + if (params.containsKey("do") && "js".equals(params.get("do"))) { return jsLoader.proxyInvoke(params); - } else if (params.containsKey("do") && params.get("do").equals("py")) { + } else if (params.containsKey("do") && "py".equals(params.get("do"))) { return pyLoader.proxyInvoke(params); } else { return jarLoader.proxyInvoke(params); @@ -376,4 +376,4 @@ public class VodConfig { boolean load = !TextUtils.isEmpty(wall) && WallConfig.get().needSync(wall); if (load) WallConfig.get().config(Config.find(wall, config.getName(), 2).update()); } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Class.java b/app/src/main/java/com/fongmi/android/tv/bean/Class.java index b0e115928..46fe01677 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Class.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Class.java @@ -121,7 +121,7 @@ public class Class implements Parcelable { } public boolean isHome() { - return getTypeId().equals("home"); + return "home".equals(getTypeId()); } public void trans() { diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Style.java b/app/src/main/java/com/fongmi/android/tv/bean/Style.java index 898d4c97b..3e1161d44 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Style.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Style.java @@ -51,15 +51,15 @@ public class Style implements Parcelable { } public boolean isRect() { - return getType().equals("rect"); + return "rect".equals(getType()); } public boolean isOval() { - return getType().equals("oval"); + return "oval".equals(getType()); } public boolean isList() { - return getType().equals("list"); + return "list".equals(getType()); } public boolean isLand() { @@ -112,4 +112,4 @@ public class Style implements Parcelable { return new Style[size]; } }; -} \ No newline at end of file +} diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java index 2d6317b09..65b0dbfde 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java @@ -228,11 +228,11 @@ public class Vod implements Parcelable { } public boolean isFolder() { - return getVodTag().equals("folder") || getCate() != null; + return "folder".equals(getVodTag()) || getCate() != null; } public boolean isManga() { - return getVodTag().equals("manga"); + return "manga".equals(getVodTag()); } public Style getStyle(Style style) { diff --git a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java index b018d7600..dd7ea86d9 100644 --- a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java +++ b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java @@ -127,7 +127,7 @@ public class SiteViewModel extends ViewModel { if (!result.getList().isEmpty()) result.getList().get(0).setVodFlags(); if (!result.getList().isEmpty()) checkThunder(result.getList().get(0).getVodFlags()); return result; - } else if (site.isEmpty() && key.equals("push_agent")) { + } else if (site.isEmpty() && "push_agent".equals(key)) { Vod vod = new Vod(); vod.setVodId(id); vod.setVodName(id); @@ -175,7 +175,7 @@ public class SiteViewModel extends ViewModel { result.setUrl(Source.get().fetch(result)); result.setHeader(site.getHeader()); return result; - } else if (site.isEmpty() && key.equals("push_agent")) { + } else if (site.isEmpty() && "push_agent".equals(key)) { Result result = new Result(); result.setParse(0); result.setFlag(flag); @@ -185,7 +185,7 @@ public class SiteViewModel extends ViewModel { } else { Url url = Url.create().add(id); String type = Uri.parse(id).getQueryParameter("type"); - if (type != null && type.equals("json")) url = Result.fromJson(OkHttp.newCall(id, site.getHeaders()).execute().body().string()).getUrl(); + if (type != null && "json".equals(type)) url = Result.fromJson(OkHttp.newCall(id, site.getHeaders()).execute().body().string()).getUrl(); Result result = new Result(); result.setUrl(url); result.setFlag(flag); 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 24e82a10b..fd76749c1 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 @@ -556,13 +556,13 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic Uri uri = UrlUtil.uri(url); String host = UrlUtil.host(uri); String scheme = UrlUtil.scheme(uri); - if (scheme.equals("data")) return false; - return scheme.isEmpty() || scheme.equals("file") ? !Path.exists(url) : host.isEmpty(); + if ("data".equals(scheme)) return false; + return scheme.isEmpty() || "file".equals(scheme) ? !Path.exists(url) : host.isEmpty(); } public static Map checkUa(Map headers) { if (Setting.getUa().isEmpty()) return headers; - for (Map.Entry header : headers.entrySet()) if (header.getKey().equalsIgnoreCase(HttpHeaders.USER_AGENT)) return headers; + for (Map.Entry header : headers.entrySet()) if (HttpHeaders.USER_AGENT.equalsIgnoreCase(header.getKey())) return headers; headers.put(HttpHeaders.USER_AGENT, Setting.getUa()); return headers; } @@ -582,8 +582,8 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic if (data == null || data.getExtras() == null) return; int position = data.getExtras().getInt("position", 0); String endBy = data.getExtras().getString("end_by", ""); - if (endBy.equals("playback_completion")) ActionEvent.next(); - if (endBy.equals("user")) seekTo(position); + if ("playback_completion".equals(endBy)) ActionEvent.next(); + if ("user".equals(endBy)) seekTo(position); } catch (Exception e) { e.printStackTrace(); } diff --git a/app/src/main/java/com/fongmi/android/tv/player/extractor/Force.java b/app/src/main/java/com/fongmi/android/tv/player/extractor/Force.java index 02fc07e98..4cb1f40ff 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/extractor/Force.java +++ b/app/src/main/java/com/fongmi/android/tv/player/extractor/Force.java @@ -23,7 +23,7 @@ public class Force implements Source.Extractor { @Override public boolean match(String scheme, String host) { - return !scheme.equals("push") && scheme.startsWith("p") || scheme.equals("mitv"); + return !"push".equals(scheme) && scheme.startsWith("p") || "mitv".equals(scheme); } private void init(String scheme) { diff --git a/app/src/main/java/com/fongmi/android/tv/player/extractor/JianPian.java b/app/src/main/java/com/fongmi/android/tv/player/extractor/JianPian.java index 5eaf3ca75..29be27035 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/extractor/JianPian.java +++ b/app/src/main/java/com/fongmi/android/tv/player/extractor/JianPian.java @@ -19,7 +19,7 @@ public class JianPian implements Source.Extractor { @Override public boolean match(String scheme, String host) { - return scheme.equals("tvbox-xg") || scheme.equals("jianpian") || scheme.equals("ftp"); + return "tvbox-xg".equals(scheme) || "jianpian".equals(scheme) || "ftp".equals(scheme); } private void init() { diff --git a/app/src/main/java/com/fongmi/android/tv/player/extractor/Push.java b/app/src/main/java/com/fongmi/android/tv/player/extractor/Push.java index 08a532e19..0a1910ea6 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/extractor/Push.java +++ b/app/src/main/java/com/fongmi/android/tv/player/extractor/Push.java @@ -10,7 +10,7 @@ public class Push implements Source.Extractor { @Override public boolean match(String scheme, String host) { - return scheme.equals("push"); + return "push".equals(scheme); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/player/extractor/TVBus.java b/app/src/main/java/com/fongmi/android/tv/player/extractor/TVBus.java index 37bbbe92e..22b86eb40 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/extractor/TVBus.java +++ b/app/src/main/java/com/fongmi/android/tv/player/extractor/TVBus.java @@ -18,7 +18,7 @@ public class TVBus implements Source.Extractor, Listener { @Override public boolean match(String scheme, String host) { - return scheme.equals("tvbus"); + return "tvbus".equals(scheme); } private void init(Core core) { diff --git a/app/src/main/java/com/fongmi/android/tv/player/extractor/Thunder.java b/app/src/main/java/com/fongmi/android/tv/player/extractor/Thunder.java index 080e9388d..e7cf2e91d 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/extractor/Thunder.java +++ b/app/src/main/java/com/fongmi/android/tv/player/extractor/Thunder.java @@ -29,7 +29,7 @@ public class Thunder implements Source.Extractor { @Override public boolean match(String scheme, String host) { - return scheme.equals("magnet") || scheme.equals("ed2k"); + return "magnet".equals(scheme) || "ed2k".equals(scheme); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/player/extractor/Video.java b/app/src/main/java/com/fongmi/android/tv/player/extractor/Video.java index ef8d68af0..add9b2beb 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/extractor/Video.java +++ b/app/src/main/java/com/fongmi/android/tv/player/extractor/Video.java @@ -6,7 +6,7 @@ public class Video implements Source.Extractor { @Override public boolean match(String scheme, String host) { - return scheme.equals("video"); + return "video".equals(scheme); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/player/extractor/ZLive.java b/app/src/main/java/com/fongmi/android/tv/player/extractor/ZLive.java index 2c22c1025..dc5cc6c73 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/extractor/ZLive.java +++ b/app/src/main/java/com/fongmi/android/tv/player/extractor/ZLive.java @@ -24,7 +24,7 @@ public class ZLive implements Source.Extractor { @Override public boolean match(String scheme, String host) { - return scheme.equals("zlive"); + return "zlive".equals(scheme); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/server/process/Action.java b/app/src/main/java/com/fongmi/android/tv/server/process/Action.java index 2c0a52923..138b56e79 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/process/Action.java +++ b/app/src/main/java/com/fongmi/android/tv/server/process/Action.java @@ -30,7 +30,7 @@ public class Action implements Process { @Override public boolean isRequest(NanoHTTPD.IHTTPSession session, String path) { - return path.equals("/action"); + return "/action".equals(path); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/server/process/Cache.java b/app/src/main/java/com/fongmi/android/tv/server/process/Cache.java index 15830ed76..24e044425 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/process/Cache.java +++ b/app/src/main/java/com/fongmi/android/tv/server/process/Cache.java @@ -14,7 +14,7 @@ public class Cache implements Process { @Override public boolean isRequest(NanoHTTPD.IHTTPSession session, String path) { - return path.equals("/cache"); + return "/cache".equals(path); } private String getKey(String rule, String key) { diff --git a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java index 490914456..8d41fe079 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java @@ -95,8 +95,8 @@ public class CustomWebView extends WebView { private void checkHeader(String url, Map headers) { for (String key : headers.keySet()) { - if (key.equalsIgnoreCase(HttpHeaders.COOKIE)) CookieManager.getInstance().setCookie(url, headers.get(key)); - if (key.equalsIgnoreCase(HttpHeaders.USER_AGENT)) getSettings().setUserAgentString(headers.get(key)); + if (HttpHeaders.COOKIE.equalsIgnoreCase(key)) CookieManager.getInstance().setCookie(url, headers.get(key)); + if (HttpHeaders.USER_AGENT.equalsIgnoreCase(key)) getSettings().setUserAgentString(headers.get(key)); } } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java b/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java index 8497c0d69..2e240fbd0 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java @@ -69,7 +69,7 @@ public class M3U8 { private static Headers getHeader(Map headers) { Headers.Builder builder = new Headers.Builder(); - for (Map.Entry header : headers.entrySet()) if (header.getKey().equalsIgnoreCase(HttpHeaders.USER_AGENT) || header.getKey().equalsIgnoreCase(HttpHeaders.REFERER) || header.getKey().equalsIgnoreCase(HttpHeaders.COOKIE)) builder.add(header.getKey(), header.getValue()); + for (Map.Entry header : headers.entrySet()) if (HttpHeaders.USER_AGENT.equalsIgnoreCase(header.getKey()) || HttpHeaders.REFERER.equalsIgnoreCase(header.getKey()) || HttpHeaders.COOKIE.equalsIgnoreCase(header.getKey())) builder.add(header.getKey(), header.getValue()); builder.add(HttpHeaders.RANGE, "bytes=0-"); return builder.build(); } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/UrlUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/UrlUtil.java index 1dd2a12b3..084f3978e 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/UrlUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/UrlUtil.java @@ -44,9 +44,9 @@ public class UrlUtil { } public static String fixHeader(String key) { - if (key.equalsIgnoreCase(HttpHeaders.USER_AGENT)) return HttpHeaders.USER_AGENT; - if (key.equalsIgnoreCase(HttpHeaders.REFERER)) return HttpHeaders.REFERER; - if (key.equalsIgnoreCase(HttpHeaders.COOKIE)) return HttpHeaders.COOKIE; + if (HttpHeaders.USER_AGENT.equalsIgnoreCase(key)) return HttpHeaders.USER_AGENT; + if (HttpHeaders.REFERER.equalsIgnoreCase(key)) return HttpHeaders.REFERER; + if (HttpHeaders.COOKIE.equalsIgnoreCase(key)) return HttpHeaders.COOKIE; return key; } } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/CollectActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/CollectActivity.java index fdbc80e47..792867df7 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/CollectActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/CollectActivity.java @@ -295,7 +295,7 @@ public class CollectActivity extends BaseActivity implements CustomScroller.Call @Override public void onLoadMore(String page) { Collect activated = mCollectAdapter.getActivated(); - if (activated.getSite().getKey().equals("all")) return; + if ("all".equals(activated.getSite().getKey())) return; mViewModel.searchContent(activated.getSite(), mBinding.keyword.getText().toString(), page); activated.setPage(Integer.parseInt(page)); mScroller.setLoading(true); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/FolderActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/FolderActivity.java index aaa8bdcca..93586481f 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/FolderActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/FolderActivity.java @@ -45,7 +45,7 @@ public class FolderActivity extends BaseActivity { Result result = getResult(); Class type = result.getTypes().get(0); mBinding.text.setText(type.getTypeName()); - getSupportFragmentManager().beginTransaction().replace(R.id.container, TypeFragment.newInstance(getKey(), type.getTypeId(), type.getStyle(), new HashMap<>(), type.getTypeFlag().equals("1")), "0").commitAllowingStateLoss(); + getSupportFragmentManager().beginTransaction().replace(R.id.container, TypeFragment.newInstance(getKey(), type.getTypeId(), type.getStyle(), new HashMap<>(), "1".equals(type.getTypeFlag())), "0").commitAllowingStateLoss(); } private TypeFragment getFragment() { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ConfigDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ConfigDialog.java index 590911590..d5288f5ee 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ConfigDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ConfigDialog.java @@ -104,13 +104,13 @@ public class ConfigDialog { } private void detect(String s) { - if (append && s.equalsIgnoreCase("h")) { + if (append && "h".equalsIgnoreCase(s)) { append = false; binding.url.append("ttp://"); - } else if (append && s.equalsIgnoreCase("f")) { + } else if (append && "f".equalsIgnoreCase(s)) { append = false; binding.url.append("ile://"); - } else if (append && s.equalsIgnoreCase("a")) { + } else if (append && "a".equalsIgnoreCase(s)) { append = false; binding.url.append("ssets://"); } else if (s.length() > 1) { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ProxyDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ProxyDialog.java index acbf53279..2f6e96e78 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ProxyDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ProxyDialog.java @@ -64,10 +64,10 @@ public class ProxyDialog { } private void detect(String s) { - if (append && s.equalsIgnoreCase("h")) { + if (append && "h".equalsIgnoreCase(s)) { append = false; binding.text.append("ttp://"); - } else if (append && s.equalsIgnoreCase("s")) { + } else if (append && "s".equalsIgnoreCase(s)) { append = false; binding.text.append("ocks5://"); } else if (append && s.length() == 1) { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/UaDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/UaDialog.java index be45a98e0..81c345091 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/UaDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/UaDialog.java @@ -65,10 +65,10 @@ public class UaDialog { } private void detect(String s) { - if (append && s.equalsIgnoreCase("c")) { + if (append && "c".equalsIgnoreCase(s)) { append = false; binding.text.setText(Util.CHROME); - } else if (append && s.equalsIgnoreCase("o")) { + } else if (append && "o".equalsIgnoreCase(s)) { append = false; binding.text.setText(okhttp3.internal.Util.userAgent); } else if (s.length() > 1) { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java index f095f574c..2bf56a330 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java @@ -83,7 +83,7 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac } private boolean isHome() { - return getTypeId().equals("home"); + return "home".equals(getTypeId()); } private Site getSite() { @@ -146,9 +146,9 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac } private void getVideo(String typeId, String page) { - if (page.equals("1")) mAdapter.clear(); - if (page.equals("1") && !mBinding.swipeLayout.isRefreshing()) mBinding.progressLayout.showProgress(); - if (isHome() && page.equals("1")) setAdapter(getParent().getResult()); + if ("1".equals(page)) mAdapter.clear(); + if ("1".equals(page) && !mBinding.swipeLayout.isRefreshing()) mBinding.progressLayout.showProgress(); + if (isHome() && "1".equals(page)) setAdapter(getParent().getResult()); else mViewModel.categoryContent(getKey(), typeId, page, true, mExtends); } 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 debb05652..9c7426e6a 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 @@ -383,7 +383,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal @Override public Fragment getItem(int position) { Class type = mAdapter.get(position); - return TypeFragment.newInstance(getSite().getKey(), type.getTypeId(), type.getStyle(), type.getExtend(true), type.getTypeFlag().equals("1")); + return TypeFragment.newInstance(getSite().getKey(), type.getTypeId(), type.getStyle(), type.getExtend(true), "1".equals(type.getTypeFlag())); } @Override diff --git a/catvod/src/main/java/com/github/catvod/utils/Prefers.java b/catvod/src/main/java/com/github/catvod/utils/Prefers.java index 9faac0ebf..9a0e8b4dd 100644 --- a/catvod/src/main/java/com/github/catvod/utils/Prefers.java +++ b/catvod/src/main/java/com/github/catvod/utils/Prefers.java @@ -104,7 +104,7 @@ public class Prefers { } private static Object convert(Map.Entry entry) { - if (entry.getKey().equals("danmu_size")) { + if ("danmu_size".equals(entry.getKey())) { return Float.parseFloat(entry.getValue().toString()); } else { return entry.getValue(); diff --git a/catvod/src/main/java/com/github/catvod/utils/Trans.java b/catvod/src/main/java/com/github/catvod/utils/Trans.java index 4440339a5..8e5f541ed 100644 --- a/catvod/src/main/java/com/github/catvod/utils/Trans.java +++ b/catvod/src/main/java/com/github/catvod/utils/Trans.java @@ -23,7 +23,7 @@ public class Trans { private Trans() { s2t = new HashMap<>(); t2s = new HashMap<>(); - trans = Locale.getDefault().getCountry().equals("TW"); + trans = "TW".equals(Locale.getDefault().getCountry()); if (trans) init(); } diff --git a/forcetech/src/main/java/com/forcetech/Util.java b/forcetech/src/main/java/com/forcetech/Util.java index 141a701cc..eb3b457f0 100644 --- a/forcetech/src/main/java/com/forcetech/Util.java +++ b/forcetech/src/main/java/com/forcetech/Util.java @@ -29,7 +29,7 @@ public class Util { public static String scheme(String url) { String scheme = Uri.parse(url).getScheme(); - if (scheme.equals("P2p")) scheme = "mitv"; + if ("P2p".equals(scheme)) scheme = "mitv"; return scheme.toLowerCase(); } diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaMeta.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaMeta.java index b3d3922bb..abc454a90 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaMeta.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaMeta.java @@ -176,14 +176,14 @@ public class IjkMediaMeta { private static String convertLang(String text) { if (text == null) return null; - if (text.equals("chi")) return "zh"; - if (text.equals("cze")) return "cs"; - if (text.equals("dut")) return "nl"; - if (text.equals("fre")) return "fr"; - if (text.equals("ger")) return "de"; - if (text.equals("gre")) return "el"; - if (text.equals("ice")) return "is"; - if (text.equals("rum")) return "ro"; + if ("chi".equals(text)) return "zh"; + if ("cze".equals(text)) return "cs"; + if ("dut".equals(text)) return "nl"; + if ("fre".equals(text)) return "fr"; + if ("ger".equals(text)) return "de"; + if ("gre".equals(text)) return "el"; + if ("ice".equals(text)) return "is"; + if ("rum".equals(text)) return "ro"; return text; } @@ -217,7 +217,7 @@ public class IjkMediaMeta { streamMeta.mCodecLongName = streamMeta.getString(IJKM_KEY_CODEC_LONG_NAME); streamMeta.mBitrate = streamMeta.getInt(IJKM_KEY_BITRATE); - if (streamMeta.mType.equalsIgnoreCase(IJKM_VAL_TYPE__VIDEO)) { + if (IJKM_VAL_TYPE__VIDEO.equalsIgnoreCase(streamMeta.mType)) { streamMeta.mWidth = streamMeta.getInt(IJKM_KEY_WIDTH); streamMeta.mHeight = streamMeta.getInt(IJKM_KEY_HEIGHT); streamMeta.mFpsNum = streamMeta.getInt(IJKM_KEY_FPS_NUM); @@ -226,7 +226,7 @@ public class IjkMediaMeta { streamMeta.mTbrDen = streamMeta.getInt(IJKM_KEY_TBR_DEN); streamMeta.mSarNum = streamMeta.getInt(IJKM_KEY_SAR_NUM); streamMeta.mSarDen = streamMeta.getInt(IJKM_KEY_SAR_DEN); - } else if (streamMeta.mType.equalsIgnoreCase(IJKM_VAL_TYPE__AUDIO)) { + } else if (IJKM_VAL_TYPE__AUDIO.equalsIgnoreCase(streamMeta.mType)) { streamMeta.mSampleRate = streamMeta.getInt(IJKM_KEY_SAMPLE_RATE); streamMeta.mChannelLayout = streamMeta.getLong(IJKM_KEY_CHANNEL_LAYOUT); } diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/misc/IjkMediaFormat.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/misc/IjkMediaFormat.java index ded144c7a..996cbcc52 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/misc/IjkMediaFormat.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/misc/IjkMediaFormat.java @@ -175,7 +175,7 @@ public class IjkMediaFormat implements IMediaFormat { sb.append(profile); String codecName = mediaFormat.getString(IjkMediaMeta.IJKM_KEY_CODEC_NAME); - if (!TextUtils.isEmpty(codecName) && codecName.equalsIgnoreCase(CODEC_NAME_H264)) { + if (!TextUtils.isEmpty(codecName) && CODEC_NAME_H264.equalsIgnoreCase(codecName)) { int level = mediaFormat.getInteger(IjkMediaMeta.IJKM_KEY_CODEC_LEVEL); if (level < 10) return sb.toString(); 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 7df9778be..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 @@ -413,7 +413,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl for (int index = 0; index < trackInfos.size(); index++) { ITrackInfo trackInfo = trackInfos.get(index); if (trackInfo.getTrackType() != ITrackInfo.MEDIA_TRACK_TYPE_TEXT) continue; - if (trackInfo.getLanguage().equals("zh") && index != selected) { + if ("zh".equals(trackInfo.getLanguage()) && index != selected) { mPlayer.selectTrack(index); break; } @@ -560,4 +560,4 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl requestLayout(); } } -} \ No newline at end of file +} diff --git a/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java b/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java index 2c476501d..b6ac1fecc 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java @@ -65,9 +65,9 @@ public class Connect { } private static RequestBody getPostBody(Req req, String contentType) { - if (req.getData() != null && req.getPostType().equals("json")) return getJsonBody(req); - if (req.getData() != null && req.getPostType().equals("form")) return getFormBody(req); - if (req.getData() != null && req.getPostType().equals("form-data")) return getFormDataBody(req); + if (req.getData() != null && "json".equals(req.getPostType())) return getJsonBody(req); + if (req.getData() != null && "form".equals(req.getPostType())) return getFormBody(req); + if (req.getData() != null && "form-data".equals(req.getPostType())) return getFormDataBody(req); if (req.getBody() != null && contentType != null) return RequestBody.create(req.getBody(), MediaType.get(contentType)); return RequestBody.create("", null); } diff --git a/quickjs/src/main/java/com/fongmi/quickjs/utils/Parser.java b/quickjs/src/main/java/com/fongmi/quickjs/utils/Parser.java index 17d57b327..8a216a1af 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/utils/Parser.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/utils/Parser.java @@ -117,9 +117,9 @@ public class Parser { public String pdfh(String html, String rule, String addUrl) { Document doc = cache.getPdfh(html); - if (rule.equals("body&&Text") || rule.equals("Text")) { + if ("body&&Text".equals(rule) || "Text".equals(rule)) { return doc.text(); - } else if (rule.equals("body&&Html") || rule.equals("Html")) { + } else if ("body&&Html".equals(rule) || "Html".equals(rule)) { return doc.html(); } String option = ""; @@ -138,9 +138,9 @@ public class Parser { if (elements.isEmpty()) return ""; } if (TextUtils.isEmpty(option)) return elements.outerHtml(); - if (option.equals("Text")) { + if ("Text".equals(option)) { return elements.text(); - } else if (option.equals("Html")) { + } else if ("Html".equals(option)) { return elements.html(); } else { String result = elements.attr(option); From d70d9a07e68356b218c8bc5dc8a690c2becc7382 Mon Sep 17 00:00:00 2001 From: "pixeebot[bot]" <104101892+pixeebot[bot]@users.noreply.github.com> Date: Sun, 3 Mar 2024 16:22:15 +0000 Subject: [PATCH 05/14] Introduced protections against predictable RNG abuse --- .../java/com/fongmi/android/tv/ui/fragment/VodFragment.java | 3 ++- quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java | 3 ++- .../src/main/java/com/xunlei/downloadlib/android/XLUtil.java | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) 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 9c7426e6a..e70d271eb 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 @@ -54,6 +54,7 @@ import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Trans; import com.google.common.net.HttpHeaders; import com.permissionx.guolindev.PermissionX; +import java.security.SecureRandom; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -161,7 +162,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal private void updateHot() { App.post(mRunnable, 10 * 1000); if (mHots.isEmpty() || mHots.size() < 10) return; - mBinding.hot.setText(mHots.get(new Random().nextInt(11))); + mBinding.hot.setText(mHots.get(new SecureRandom().nextInt(11))); } private Result handle(Result result) { diff --git a/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java b/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java index b6ac1fecc..5fcb6691e 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java @@ -7,6 +7,7 @@ import com.github.catvod.utils.Util; import com.google.common.net.HttpHeaders; import com.whl.quickjs.wrapper.JSObject; import com.whl.quickjs.wrapper.QuickJSContext; +import java.security.SecureRandom; import java.util.List; import java.util.Map; @@ -84,7 +85,7 @@ public class Connect { } private static RequestBody getFormDataBody(Req req) { - String boundary = "--dio-boundary-" + new Random().nextInt(42949) + "" + new Random().nextInt(67296); + String boundary = "--dio-boundary-" + new SecureRandom().nextInt(42949) + "" + new SecureRandom().nextInt(67296); MultipartBody.Builder builder = new MultipartBody.Builder(boundary).setType(MultipartBody.FORM); Map params = Json.toMap(req.getData()); for (String key : params.keySet()) builder.addFormDataPart(key, params.get(key)); diff --git a/thunder/src/main/java/com/xunlei/downloadlib/android/XLUtil.java b/thunder/src/main/java/com/xunlei/downloadlib/android/XLUtil.java index 848663c96..05dc6226d 100644 --- a/thunder/src/main/java/com/xunlei/downloadlib/android/XLUtil.java +++ b/thunder/src/main/java/com/xunlei/downloadlib/android/XLUtil.java @@ -1,6 +1,7 @@ package com.xunlei.downloadlib.android; import android.util.Base64; +import java.security.SecureRandom; import java.util.Random; import java.util.UUID; @@ -22,7 +23,7 @@ public class XLUtil { } private static String random(String base, int length) { - Random random = new Random(); + Random random = new SecureRandom(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < length; i++) sb.append(base.charAt(random.nextInt(base.length()))); return sb.toString(); From 9168b88d9b21d4e50ba1d1c07aa0ae23c1fa8406 Mon Sep 17 00:00:00 2001 From: "pixeebot[bot]" <104101892+pixeebot[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 05:52:03 +0000 Subject: [PATCH 06/14] Switch order of literals to prevent NullPointerException --- .../java/com/fongmi/android/tv/ui/activity/HomeActivity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java index 2cd3a33b2..a6698e23b 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java @@ -563,7 +563,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen public Fragment getItem(int position) { if (position == 0) return new HomeFragment(); Class type = (Class) mAdapter.get(position); - return VodFragment.newInstance(getHome().getKey(), type.getTypeId(), type.getStyle(), type.getExtend(false), type.getTypeFlag().equals("1")); + return VodFragment.newInstance(getHome().getKey(), type.getTypeId(), type.getStyle(), type.getExtend(false), "1".equals(type.getTypeFlag())); } @Override @@ -575,4 +575,4 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { } } -} \ No newline at end of file +} From 45ce544630b9ccfd6828a6391dca804ae6e070e5 Mon Sep 17 00:00:00 2001 From: jadehh Date: Mon, 15 Apr 2024 22:34:27 +0800 Subject: [PATCH 07/14] * Add Md5X Function * Add Http Post Raw Methods --- .../main/java/com/fongmi/quickjs/method/Global.java | 8 ++++++++ .../main/java/com/fongmi/quickjs/utils/Connect.java | 7 +++++++ .../main/java/com/fongmi/quickjs/utils/Crypto.java | 11 +++++++++++ 3 files changed, 26 insertions(+) diff --git a/quickjs/src/main/java/com/fongmi/quickjs/method/Global.java b/quickjs/src/main/java/com/fongmi/quickjs/method/Global.java index 65c1f64aa..3be1acfed 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/method/Global.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/method/Global.java @@ -147,6 +147,14 @@ public class Global { return parser.joinUrl(parent, child); } + @Keep + @JSMethod + public String md5X(String text) { + String result = Crypto.md5(text); + Logger.t("md5X").d("text:%s\nresult:\n%s" , text, result); + return result; + } + @Keep @JSMethod public String aesX(String mode, boolean encrypt, String input, boolean inBase64, String key, String iv, boolean outBase64) { diff --git a/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java b/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java index 5fcb6691e..3d8e9a1a4 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java @@ -69,6 +69,7 @@ public class Connect { if (req.getData() != null && "json".equals(req.getPostType())) return getJsonBody(req); if (req.getData() != null && "form".equals(req.getPostType())) return getFormBody(req); if (req.getData() != null && "form-data".equals(req.getPostType())) return getFormDataBody(req); + if (req.getData() != null && "raw".equals(req.getPostType())) return getRawBody(req); if (req.getBody() != null && contentType != null) return RequestBody.create(req.getBody(), MediaType.get(contentType)); return RequestBody.create("", null); } @@ -77,6 +78,10 @@ public class Connect { return RequestBody.create(req.getData().toString(), MediaType.get("application/json")); } + private static RequestBody getRawBody(Req req) { + return RequestBody.create(req.getData().toString(), MediaType.get("application/json; charset=utf-8")); + } + private static RequestBody getFormBody(Req req) { FormBody.Builder builder = new FormBody.Builder(); Map params = Json.toMap(req.getData()); @@ -92,6 +97,8 @@ public class Connect { return builder.build(); } + + private static void setHeader(QuickJSContext ctx, Response res, JSObject object) { for (Map.Entry> entry : res.headers().toMultimap().entrySet()) { if (entry.getValue().size() == 1) object.setProperty(entry.getKey(), entry.getValue().get(0)); diff --git a/quickjs/src/main/java/com/fongmi/quickjs/utils/Crypto.java b/quickjs/src/main/java/com/fongmi/quickjs/utils/Crypto.java index ee66a02f7..1ef28f03f 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/utils/Crypto.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/utils/Crypto.java @@ -14,9 +14,20 @@ import java.util.Arrays; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; +import com.github.catvod.utils.Util; public class Crypto { + public static String md5(String text) { + try { + return Util.md5(text); + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + + public static String aes(String mode, boolean encrypt, String input, boolean inBase64, String key, String iv, boolean outBase64) { try { byte[] keyBuf = key.getBytes(); From 64e6ad575eb300f33a18df47b13db8d20bb87030 Mon Sep 17 00:00:00 2001 From: jade Date: Tue, 30 Apr 2024 13:27:36 +0800 Subject: [PATCH 08/14] update set language --- .../tv/ui/activity/SettingCustomActivity.java | 13 +++ .../android/tv/ui/base/BaseActivity.java | 2 + .../android/tv/ui/dialog/LanguageDialog.java | 87 +++++++++++++++++++ .../fongmi/android/tv/utils/LanguageUtil.java | 27 ++++++ .../res/layout/activity_setting_custom.xml | 36 ++++++++ .../main/java/com/fongmi/android/tv/App.java | 3 + .../java/com/fongmi/android/tv/Setting.java | 25 ++++++ app/src/main/res/values-zh-rCN/strings.xml | 7 ++ app/src/main/res/values-zh-rTW/strings.xml | 7 ++ app/src/main/res/values/strings.xml | 7 ++ 10 files changed, 214 insertions(+) create mode 100644 app/src/leanback/java/com/fongmi/android/tv/ui/dialog/LanguageDialog.java create mode 100644 app/src/leanback/java/com/fongmi/android/tv/utils/LanguageUtil.java diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java index 9c9cbc8a8..f4fce8df2 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java @@ -14,6 +14,7 @@ import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.dialog.ButtonsDialog; import com.fongmi.android.tv.ui.dialog.DisplayDialog; +import com.fongmi.android.tv.ui.dialog.LanguageDialog; import com.fongmi.android.tv.ui.dialog.MenuKeyDialog; import com.fongmi.android.tv.ui.dialog.X5WebViewDialog; import com.fongmi.android.tv.utils.ResUtil; @@ -59,6 +60,7 @@ public class SettingCustomActivity extends BaseActivity { mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch())); mBinding.homeUIText.setText((homeUI = ResUtil.getStringArray(R.array.select_home_ui))[Setting.getHomeUI()]); mBinding.homeHistoryText.setText(getSwitch(Setting.isHomeHistory())); + mBinding.languageText.setText((ResUtil.getStringArray(R.array.select_language))[Setting.getLanguage()]); mBinding.parseWebviewText.setText((parseWebview = ResUtil.getStringArray(R.array.select_parse_webview))[Setting.getParseWebView()]); } @@ -79,7 +81,9 @@ public class SettingCustomActivity extends BaseActivity { mBinding.homeUI.setOnClickListener(this::setHomeUI); mBinding.homeButtons.setOnClickListener(this::onHomeButtons); mBinding.homeHistory.setOnClickListener(this::setHomeHistory); + mBinding.setLanguage.setOnClickListener(this::setLanguage); mBinding.parseWebview.setOnClickListener(this::setParseWebview); + } private void setQuality(View view) { @@ -174,6 +178,15 @@ public class SettingCustomActivity extends BaseActivity { mBinding.homeHistoryText.setText(getSwitch(Setting.isHomeHistory())); } + private void setLanguage(View view) { + LanguageDialog.create(this).show(); + } + + public void setLanguageText() { + mBinding.languageText.setText((ResUtil.getStringArray(R.array.select_language))[Setting.getLanguage()]); + } + + private void setParseWebview(View view) { int index = Setting.getParseWebView(); Setting.putParseWebView(index = index == parseWebview.length - 1 ? 0 : ++index); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/base/BaseActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/base/BaseActivity.java index de6620d03..be2a6b64b 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/base/BaseActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/base/BaseActivity.java @@ -19,6 +19,7 @@ import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.api.config.WallConfig; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.utils.FileUtil; +import com.fongmi.android.tv.utils.LanguageUtil; import com.fongmi.android.tv.utils.ResUtil; import com.fongmi.android.tv.utils.Util; @@ -37,6 +38,7 @@ public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + LanguageUtil.setLanguage(this.getResources(),Setting.getLanguage()); setContentView(getBinding().getRoot()); EventBus.getDefault().register(this); Util.hideSystemUI(this); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/LanguageDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/LanguageDialog.java new file mode 100644 index 000000000..57c4c5c07 --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/LanguageDialog.java @@ -0,0 +1,87 @@ +package com.fongmi.android.tv.ui.dialog; + +import android.app.Activity; +import android.view.LayoutInflater; +import android.view.WindowManager; + +import androidx.appcompat.app.AlertDialog; +import androidx.recyclerview.widget.GridLayoutManager; + +import com.fongmi.android.tv.R; +import com.fongmi.android.tv.Setting; +import com.fongmi.android.tv.databinding.DialogMenuBinding; +import com.fongmi.android.tv.ui.activity.SettingCustomActivity; +import com.fongmi.android.tv.ui.adapter.MenuAdapter; +import com.fongmi.android.tv.ui.custom.SpaceItemDecoration; +import com.fongmi.android.tv.utils.LanguageUtil; +import com.fongmi.android.tv.utils.ResUtil; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class LanguageDialog implements MenuAdapter.OnClickListener { + private final DialogMenuBinding binding; + private final MenuAdapter adapter; + private final AlertDialog dialog; + + private final Activity activity; + + + public static LanguageDialog create(Activity activity) { + return new LanguageDialog(activity); + } + + public LanguageDialog(Activity activity) { + String[] items = ResUtil.getStringArray(R.array.select_language); + List mItems = new ArrayList<>(Arrays.asList(items)); + this.adapter = new MenuAdapter(this, mItems); + this.activity = activity; + this.binding = DialogMenuBinding.inflate(LayoutInflater.from(activity)); + this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create(); + } + + public void show() { + initView(); + } + + private int getCount() { + return 1; + } + + private float getWidth() { + return 0.4f + (getCount() - 1) * 0.2f; + } + + private void initView() { + setRecyclerView(); + setDialog(); + } + + private void setRecyclerView() { + binding.recycler.setAdapter(adapter); + binding.recycler.setHasFixedSize(true); + binding.recycler.setItemAnimator(null); + binding.recycler.addItemDecoration(new SpaceItemDecoration(getCount(), 16)); + binding.recycler.setLayoutManager(new GridLayoutManager(dialog.getContext(), getCount())); + binding.recycler.post(() -> binding.recycler.scrollToPosition(Setting.getLanguage())); + + } + + private void setDialog() { + WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); + params.width = (int) (ResUtil.getScreenWidth() * getWidth()); + dialog.getWindow().setAttributes(params); + dialog.getWindow().setDimAmount(0); + dialog.show(); + } + + @Override + public void onItemClick(int position) { + if (dialog != null) dialog.dismiss(); + Setting.putLanguage(position); + ((SettingCustomActivity) activity).setLanguageText(); + LanguageUtil.restartApp(activity); + } +} diff --git a/app/src/leanback/java/com/fongmi/android/tv/utils/LanguageUtil.java b/app/src/leanback/java/com/fongmi/android/tv/utils/LanguageUtil.java new file mode 100644 index 000000000..0d1f23a40 --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/utils/LanguageUtil.java @@ -0,0 +1,27 @@ +package com.fongmi.android.tv.utils; + +import android.app.Activity; +import android.content.Intent; +import android.content.res.Resources; + +import java.util.Locale; + +public class LanguageUtil { + public static void setLanguage(Resources resources, int lang) { + resources.getConfiguration().locale = getLocaleByLanguage(lang); + resources.updateConfiguration(resources.getConfiguration(), resources.getDisplayMetrics()); + } + + private static Locale getLocaleByLanguage(int lang) { + if (lang == 0) return Locale.ENGLISH; + else if (lang == 1) return Locale.CHINESE; + else if (lang == 2) return Locale.TRADITIONAL_CHINESE; + else return Locale.ENGLISH; + } + + public static void restartApp(Activity activity) { + Intent intent = activity.getBaseContext().getPackageManager().getLaunchIntentForPackage(activity.getBaseContext().getPackageName()); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + activity.startActivity(intent); + } +} diff --git a/app/src/leanback/res/layout/activity_setting_custom.xml b/app/src/leanback/res/layout/activity_setting_custom.xml index 842689396..a83243293 100644 --- a/app/src/leanback/res/layout/activity_setting_custom.xml +++ b/app/src/leanback/res/layout/activity_setting_custom.xml @@ -501,5 +501,41 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/android/tv/App.java b/app/src/main/java/com/fongmi/android/tv/App.java index 0e96213f1..1806ae83c 100644 --- a/app/src/main/java/com/fongmi/android/tv/App.java +++ b/app/src/main/java/com/fongmi/android/tv/App.java @@ -14,6 +14,7 @@ import androidx.core.os.HandlerCompat; import com.fongmi.android.tv.api.config.LiveConfig; import com.fongmi.android.tv.ui.activity.CrashActivity; +import com.fongmi.android.tv.utils.LanguageUtil; import com.fongmi.android.tv.utils.Notify; import com.github.catvod.Init; import com.github.catvod.bean.Doh; @@ -84,6 +85,7 @@ public class App extends Application { private void setActivity(Activity activity) { this.activity = activity; + LanguageUtil.setLanguage(getResources(),Setting.getLanguage()); } private LogAdapter getLogAdapter() { @@ -144,6 +146,7 @@ public class App extends Application { public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) { } }); + } @Override 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 dde4e9371..2d3e6f9cc 100644 --- a/app/src/main/java/com/fongmi/android/tv/Setting.java +++ b/app/src/main/java/com/fongmi/android/tv/Setting.java @@ -7,6 +7,8 @@ import android.provider.Settings; import com.fongmi.android.tv.player.Players; import com.github.catvod.utils.Prefers; +import java.util.Locale; + public class Setting { public static String getDoh() { @@ -477,6 +479,27 @@ public class Setting { return Math.min(Prefers.getInt("config_cache", 0), 2); } + public static void putLanguage(int key) { + Prefers.put("language", key); + } + + private static int getLocalLanguage() { + if (Locale.getDefault().getLanguage().equals("zh")) { + if (Locale.getDefault().getCountry().equals("TW")) { + return 2; + } else { + return 1; + } + } else { + return 0; + } + } + + public static int getLanguage() { + int defaultValue = getLocalLanguage(); + return Prefers.getInt("language", defaultValue); + } + public static void putParseWebView(int key) { Prefers.put("parse_webview", key); } @@ -484,4 +507,6 @@ public class Setting { public static int getParseWebView() { return Prefers.getInt("parse_webview", 0); } + + } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 6bbd1af39..d539c13c9 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -80,6 +80,7 @@ 图片品质 图片尺寸 聚合搜索 + 语言设置 嗅探内核 全屏菜单键 首页菜单键 @@ -259,6 +260,12 @@ 设置页面 + + 英文 + 简体中文 + 繁体中文 + + 系统 X5 WebView diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 9ac646637..ac0ad0546 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -80,6 +80,7 @@ 圖片品質 圖片尺寸 聚合搜索 + 語言設置 嗅探內核 全屏選單鍵 首頁選單鍵 @@ -259,6 +260,12 @@ 設置頁面 + + 英文 + 簡體中文 + 繁體中文 + + 系統 X5 WebView diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d16d8c602..327802871 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -80,6 +80,7 @@ Image quality Image size Aggregated search + Lanuage setting Parse webview Fullscreen menu key Home menu key @@ -259,6 +260,12 @@ Setting page + + English + Simplified Chinese + Traditional Chinese + + System X5 WebView From c704715c261cdcb8812b3b0b2ad6a8bb9de4b7a8 Mon Sep 17 00:00:00 2001 From: jade Date: Tue, 30 Apr 2024 15:14:03 +0800 Subject: [PATCH 09/14] move languageUtil File to App Floder --- .../java/com/fongmi/android/tv/utils/LanguageUtil.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/src/{leanback => main}/java/com/fongmi/android/tv/utils/LanguageUtil.java (100%) diff --git a/app/src/leanback/java/com/fongmi/android/tv/utils/LanguageUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/LanguageUtil.java similarity index 100% rename from app/src/leanback/java/com/fongmi/android/tv/utils/LanguageUtil.java rename to app/src/main/java/com/fongmi/android/tv/utils/LanguageUtil.java From f4f9df783616da4266db4b0abc5a66498316a383 Mon Sep 17 00:00:00 2001 From: jade Date: Tue, 30 Apr 2024 15:59:59 +0800 Subject: [PATCH 10/14] * support mobile set language --- .../android/tv/ui/base/BaseActivity.java | 2 ++ .../tv/ui/fragment/SettingCustomFragment.java | 15 +++++++++++ .../res/layout/fragment_setting_custom.xml | 25 +++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java index 076bfbd08..76dc12bf4 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java @@ -19,6 +19,7 @@ import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.api.config.WallConfig; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.utils.FileUtil; +import com.fongmi.android.tv.utils.LanguageUtil; import com.fongmi.android.tv.utils.ResUtil; import org.greenrobot.eventbus.EventBus; @@ -34,6 +35,7 @@ public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + LanguageUtil.setLanguage(this.getResources(),Setting.getLanguage()); if (transparent()) setTransparent(this); setContentView(getBinding().getRoot()); EventBus.getDefault().register(this); 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 7040f079c..a7321fb0a 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 @@ -13,6 +13,7 @@ import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.databinding.FragmentSettingCustomBinding; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.ui.base.BaseFragment; +import com.fongmi.android.tv.utils.LanguageUtil; import com.fongmi.android.tv.utils.ResUtil; import com.google.android.material.dialog.MaterialAlertDialogBuilder; @@ -23,6 +24,8 @@ public class SettingCustomFragment extends BaseFragment { private FragmentSettingCustomBinding mBinding; private String[] size; + private String[] lang; + public static SettingCustomFragment newInstance() { return new SettingCustomFragment(); } @@ -44,6 +47,7 @@ public class SettingCustomFragment extends BaseFragment { mBinding.incognitoText.setText(getSwitch(Setting.isIncognito())); mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch())); mBinding.homeChangeConfigText.setText(getSwitch(Setting.isHomeChangeConfig())); + mBinding.languageText.setText((lang = ResUtil.getStringArray(R.array.select_language))[Setting.getLanguage()]); } @Override @@ -56,6 +60,8 @@ public class SettingCustomFragment extends BaseFragment { mBinding.incognito.setOnClickListener(this::setIncognito); mBinding.aggregatedSearch.setOnClickListener(this::setAggregatedSearch); mBinding.homeChangeConfig.setOnClickListener(this::setHomeChangeConfig); + mBinding.language.setOnClickListener(this::setLanguage); + } private boolean onTitle(View view) { @@ -111,4 +117,13 @@ public class SettingCustomFragment extends BaseFragment { RefreshEvent.config(); } + private void setLanguage(View view) { + new MaterialAlertDialogBuilder(getActivity()).setTitle(R.string.setting_language).setNegativeButton(R.string.dialog_negative, null).setSingleChoiceItems(lang, Setting.getLanguage(), (dialog, which) -> { + mBinding.languageText.setText(lang[which]); + Setting.putLanguage(which); + dialog.dismiss(); + LanguageUtil.restartApp(getActivity()); + }).show(); + } + } diff --git a/app/src/mobile/res/layout/fragment_setting_custom.xml b/app/src/mobile/res/layout/fragment_setting_custom.xml index 3470facb9..252beac15 100644 --- a/app/src/mobile/res/layout/fragment_setting_custom.xml +++ b/app/src/mobile/res/layout/fragment_setting_custom.xml @@ -206,6 +206,31 @@ + + + + + + \ No newline at end of file From cf0ea88ca77a22cfef7264d3027597aa27882613 Mon Sep 17 00:00:00 2001 From: okjack Date: Thu, 2 May 2024 20:13:13 +0800 Subject: [PATCH 11/14] update --- .../leanback/res/layout/activity_setting_custom.xml | 11 ++--------- app/src/mobile/res/layout/fragment_setting_custom.xml | 4 ++-- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/app/src/leanback/res/layout/activity_setting_custom.xml b/app/src/leanback/res/layout/activity_setting_custom.xml index a83243293..acee8fe49 100644 --- a/app/src/leanback/res/layout/activity_setting_custom.xml +++ b/app/src/leanback/res/layout/activity_setting_custom.xml @@ -475,6 +475,7 @@ android:id="@+id/parseWebview" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_marginEnd="16dp" android:layout_weight="1" android:background="@drawable/selector_item" android:focusable="true" @@ -500,15 +501,6 @@ - - - - - + \ No newline at end of file diff --git a/app/src/mobile/res/layout/fragment_setting_custom.xml b/app/src/mobile/res/layout/fragment_setting_custom.xml index 252beac15..cfad70e6f 100644 --- a/app/src/mobile/res/layout/fragment_setting_custom.xml +++ b/app/src/mobile/res/layout/fragment_setting_custom.xml @@ -220,14 +220,14 @@ android:layout_marginEnd="16dp" android:text="@string/setting_language" android:textColor="@color/white" - android:textSize="18sp" /> + android:textSize="16sp" /> From a9da06a832d8555db9ab8815be65c71585ccc6b5 Mon Sep 17 00:00:00 2001 From: okjack Date: Thu, 2 May 2024 20:20:55 +0800 Subject: [PATCH 12/14] update --- .../android/tv/ui/dialog/LanguageDialog.java | 4 ++-- .../java/com/fongmi/android/tv/Setting.java | 16 ++------------ .../fongmi/android/tv/utils/LanguageUtil.java | 21 ++++++++++++------- .../com/fongmi/android/tv/utils/Util.java | 6 ++++++ 4 files changed, 24 insertions(+), 23 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/LanguageDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/LanguageDialog.java index 57c4c5c07..b270df545 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/LanguageDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/LanguageDialog.java @@ -13,8 +13,8 @@ import com.fongmi.android.tv.databinding.DialogMenuBinding; import com.fongmi.android.tv.ui.activity.SettingCustomActivity; import com.fongmi.android.tv.ui.adapter.MenuAdapter; import com.fongmi.android.tv.ui.custom.SpaceItemDecoration; -import com.fongmi.android.tv.utils.LanguageUtil; import com.fongmi.android.tv.utils.ResUtil; +import com.fongmi.android.tv.utils.Util; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import java.util.ArrayList; @@ -82,6 +82,6 @@ public class LanguageDialog implements MenuAdapter.OnClickListener { if (dialog != null) dialog.dismiss(); Setting.putLanguage(position); ((SettingCustomActivity) activity).setLanguageText(); - LanguageUtil.restartApp(activity); + Util.restartApp(activity); } } 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 2d3e6f9cc..def02a36e 100644 --- a/app/src/main/java/com/fongmi/android/tv/Setting.java +++ b/app/src/main/java/com/fongmi/android/tv/Setting.java @@ -5,6 +5,7 @@ import android.content.Intent; import android.provider.Settings; import com.fongmi.android.tv.player.Players; +import com.fongmi.android.tv.utils.LanguageUtil; import com.github.catvod.utils.Prefers; import java.util.Locale; @@ -483,21 +484,8 @@ public class Setting { Prefers.put("language", key); } - private static int getLocalLanguage() { - if (Locale.getDefault().getLanguage().equals("zh")) { - if (Locale.getDefault().getCountry().equals("TW")) { - return 2; - } else { - return 1; - } - } else { - return 0; - } - } - public static int getLanguage() { - int defaultValue = getLocalLanguage(); - return Prefers.getInt("language", defaultValue); + return Prefers.getInt("language", LanguageUtil.locale()); } public static void putParseWebView(int key) { diff --git a/app/src/main/java/com/fongmi/android/tv/utils/LanguageUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/LanguageUtil.java index 0d1f23a40..7a7b84256 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/LanguageUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/LanguageUtil.java @@ -8,20 +8,27 @@ import java.util.Locale; public class LanguageUtil { public static void setLanguage(Resources resources, int lang) { - resources.getConfiguration().locale = getLocaleByLanguage(lang); + resources.getConfiguration().locale = getLocale(lang); resources.updateConfiguration(resources.getConfiguration(), resources.getDisplayMetrics()); } - private static Locale getLocaleByLanguage(int lang) { + public static int locale() { + if (Locale.getDefault().getLanguage().equals("zh")) { + if (Locale.getDefault().getCountry().equals("TW")) { + return 2; + } else { + return 1; + } + } else { + return 0; + } + } + + private static Locale getLocale(int lang) { if (lang == 0) return Locale.ENGLISH; else if (lang == 1) return Locale.CHINESE; else if (lang == 2) return Locale.TRADITIONAL_CHINESE; else return Locale.ENGLISH; } - public static void restartApp(Activity activity) { - Intent intent = activity.getBaseContext().getPackageManager().getLaunchIntentForPackage(activity.getBaseContext().getPackageName()); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - activity.startActivity(intent); - } } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Util.java b/app/src/main/java/com/fongmi/android/tv/utils/Util.java index bb6f81973..cc1073982 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Util.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Util.java @@ -186,4 +186,10 @@ public class Util { return batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY); } + public static void restartApp(Activity activity) { + Intent intent = activity.getBaseContext().getPackageManager().getLaunchIntentForPackage(activity.getBaseContext().getPackageName()); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + activity.startActivity(intent); + } + } From 4352818301f75fdfb5ca0024ba00d7d7530db727 Mon Sep 17 00:00:00 2001 From: okjack Date: Thu, 2 May 2024 20:22:00 +0800 Subject: [PATCH 13/14] update --- .../fongmi/android/tv/ui/fragment/SettingCustomFragment.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 a7321fb0a..a5bf3012d 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 @@ -13,8 +13,8 @@ import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.databinding.FragmentSettingCustomBinding; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.ui.base.BaseFragment; -import com.fongmi.android.tv.utils.LanguageUtil; import com.fongmi.android.tv.utils.ResUtil; +import com.fongmi.android.tv.utils.Util; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import java.util.Locale; @@ -122,7 +122,7 @@ public class SettingCustomFragment extends BaseFragment { mBinding.languageText.setText(lang[which]); Setting.putLanguage(which); dialog.dismiss(); - LanguageUtil.restartApp(getActivity()); + Util.restartApp(getActivity()); }).show(); } From d6208d7df23d1cafe5e7ae17dfff8371461c5779 Mon Sep 17 00:00:00 2001 From: okjack Date: Thu, 2 May 2024 20:34:30 +0800 Subject: [PATCH 14/14] update --- app/build.gradle | 19 +++++++++++-------- .../com/fongmi/android/tv/player/ExoUtil.java | 6 +++++- build.gradle | 1 - catvod/build.gradle | 2 +- ijkplayer/build.gradle | 2 +- .../com/fongmi/quickjs/utils/Connect.java | 4 +--- settings.gradle | 3 +++ .../xunlei/downloadlib/android/XLUtil.java | 3 +-- 8 files changed, 23 insertions(+), 17 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3784563fa..95691ade9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -101,14 +101,17 @@ dependencies { implementation project(':jianpian') implementation project(':forcetech') implementation project(':ijkplayer') - implementation 'androidx.media3:media3-datasource-okhttp:' + media3Version - implementation 'androidx.media3:media3-datasource-rtmp:' + media3Version - implementation 'androidx.media3:media3-exoplayer:' + media3Version - implementation 'androidx.media3:media3-exoplayer-dash:' + media3Version - implementation 'androidx.media3:media3-exoplayer-hls:' + media3Version - implementation 'androidx.media3:media3-exoplayer-rtsp:' + media3Version - implementation 'androidx.media3:media3-exoplayer-smoothstreaming:' + media3Version - implementation 'androidx.media3:media3-ui:' + media3Version + pythonImplementation project(':pyramid') + implementation project(':media-lib-datasource-okhttp') + implementation project(':media-lib-datasource-rtmp') + implementation project(':media-lib-decoder-av1') + implementation project(':media-lib-decoder-ffmpeg') + implementation project(':media-lib-exoplayer') + implementation project(':media-lib-exoplayer-dash') + implementation project(':media-lib-exoplayer-hls') + implementation project(':media-lib-exoplayer-rtsp') + implementation project(':media-lib-exoplayer-smoothstreaming') + implementation project(':media-lib-ui') implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.biometric:biometric:1.1.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.7.0' diff --git a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java index 496a1ca15..00f7008fe 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java @@ -43,6 +43,7 @@ import com.fongmi.android.tv.bean.Channel; import com.fongmi.android.tv.bean.Drm; import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.bean.Sub; +import com.fongmi.android.tv.utils.Sniffer; import com.fongmi.android.tv.utils.UrlUtil; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Path; @@ -66,7 +67,7 @@ public class ExoUtil { private static Cache cache; public static LoadControl buildLoadControl() { - return new DefaultLoadControl(); + return new DefaultLoadControl(Setting.getBuffer()); } public static TrackSelector buildTrackSelector() { @@ -115,6 +116,7 @@ public class ExoUtil { private static String getMimeType(String format, int errorCode) { if (format != null) return format; + if (errorCode == PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED || errorCode == PlaybackException.ERROR_CODE_PARSING_MANIFEST_MALFORMED) return MimeTypes.APPLICATION_OCTET; if (errorCode == PlaybackException.ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED || errorCode == PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED) return MimeTypes.APPLICATION_M3U8; return null; } @@ -143,7 +145,9 @@ public class ExoUtil { MediaItem.Builder builder = new MediaItem.Builder().setUri(uri); if (subs.size() > 0) builder.setSubtitleConfigurations(getSubtitles(subs)); if (drm != null) builder.setDrmConfiguration(drm.get()); + builder.setAllowChunklessPreparation(Players.isHard(Players.EXO)); if (mimeType != null) builder.setMimeType(mimeType); + builder.setAds(Sniffer.getRegex(uri)); return builder.build(); } diff --git a/build.gradle b/build.gradle index f352f4d01..a70c26ddb 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,6 @@ tasks.register('clean', Delete) { project.ext { gsonVersion = '2.10.1' jsoupVersion = '1.15.3' - media3Version = '1.2.1' okhttpVersion = '4.12.0' annotationVersion = '1.3.0' } diff --git a/catvod/build.gradle b/catvod/build.gradle index e1b9731ef..e60588173 100644 --- a/catvod/build.gradle +++ b/catvod/build.gradle @@ -12,7 +12,7 @@ android { } dependencies { - api 'androidx.media3:media3-common:' + media3Version + api project(':media-lib-common') api 'androidx.annotation:annotation:' + annotationVersion api 'androidx.preference:preference:1.2.1' api 'com.google.code.gson:gson:' + gsonVersion diff --git a/ijkplayer/build.gradle b/ijkplayer/build.gradle index 802edde4c..2d5929478 100644 --- a/ijkplayer/build.gradle +++ b/ijkplayer/build.gradle @@ -17,5 +17,5 @@ android { dependencies { implementation project(':catvod') - implementation 'androidx.media3:media3-ui:1.1.1' + implementation project(':media-lib-ui') } \ No newline at end of file diff --git a/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java b/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java index 018243755..05e8172d6 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java @@ -1,14 +1,12 @@ package com.fongmi.quickjs.utils; import com.fongmi.quickjs.bean.Req; -import com.github.catvod.net.OkCookieJar; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Json; import com.github.catvod.utils.Util; import com.google.common.net.HttpHeaders; import com.whl.quickjs.wrapper.JSObject; import com.whl.quickjs.wrapper.QuickJSContext; -import java.security.SecureRandom; import java.util.List; import java.util.Map; @@ -91,7 +89,7 @@ public class Connect { } private static RequestBody getFormDataBody(Req req) { - String boundary = "--dio-boundary-" + new SecureRandom().nextInt(42949) + "" + new SecureRandom().nextInt(67296); + String boundary = "--dio-boundary-" + new Random().nextInt(42949) + "" + new Random().nextInt(67296); MultipartBody.Builder builder = new MultipartBody.Builder(boundary).setType(MultipartBody.FORM); Map params = Json.toMap(req.getData()); for (String key : params.keySet()) builder.addFormDataPart(key, params.get(key)); diff --git a/settings.gradle b/settings.gradle index eddc91d9b..408331af5 100644 --- a/settings.gradle +++ b/settings.gradle @@ -28,9 +28,12 @@ include ':app' include ':hook' include ':tvbus' include ':catvod' +include ':pyramid' include ':quickjs' include ':thunder' include ':jianpian' include ':forcetech' include ':ijkplayer' rootProject.name = "TV" +gradle.ext.androidxMediaModulePrefix = 'media-' +apply from: file("/media/core_settings.gradle") diff --git a/thunder/src/main/java/com/xunlei/downloadlib/android/XLUtil.java b/thunder/src/main/java/com/xunlei/downloadlib/android/XLUtil.java index 05dc6226d..848663c96 100644 --- a/thunder/src/main/java/com/xunlei/downloadlib/android/XLUtil.java +++ b/thunder/src/main/java/com/xunlei/downloadlib/android/XLUtil.java @@ -1,7 +1,6 @@ package com.xunlei.downloadlib.android; import android.util.Base64; -import java.security.SecureRandom; import java.util.Random; import java.util.UUID; @@ -23,7 +22,7 @@ public class XLUtil { } private static String random(String base, int length) { - Random random = new SecureRandom(); + Random random = new Random(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < length; i++) sb.append(base.charAt(random.nextInt(base.length()))); return sb.toString();