diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..6560a989 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,36 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index fbe5affc..e0ba2cbf 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,16 +1,21 @@ + + + + - + diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 00000000..797acea5 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/crawler/JarLoader.java b/app/src/main/java/com/github/catvod/crawler/JarLoader.java index 00bcb35d..0fdc726e 100644 --- a/app/src/main/java/com/github/catvod/crawler/JarLoader.java +++ b/app/src/main/java/com/github/catvod/crawler/JarLoader.java @@ -23,11 +23,9 @@ import okhttp3.Response; public class JarLoader { private ConcurrentHashMap classLoaders = new ConcurrentHashMap<>(); + private ConcurrentHashMap proxyMethods = new ConcurrentHashMap<>(); private ConcurrentHashMap spiders = new ConcurrentHashMap<>(); - /** - * always from main jar. - */ - private Method proxyFun = null; + private volatile String recentJarKey = ""; /** * 不要在主线程调用我 @@ -36,7 +34,8 @@ public class JarLoader { */ public boolean load(String cache) { spiders.clear(); - proxyFun = null; + recentJarKey = "main"; + proxyMethods.clear(); classLoaders.clear(); return loadClassLoader(cache, "main"); } @@ -61,7 +60,7 @@ public class JarLoader { try { Class proxy = classLoader.loadClass("com.github.catvod.spider.Proxy"); Method mth = proxy.getMethod("proxy", Map.class); - proxyFun = mth; + proxyMethods.put(key, mth); } catch (Throwable th) { } @@ -83,22 +82,18 @@ public class JarLoader { return success; } - private DexClassLoader loadJarInternal(String jar) { - String[] urls = jar.split(";md5;"); - String jarUrl = urls[0]; - String urlMd5 = MD5.string2MD5(jarUrl); - if (classLoaders.contains(urlMd5)) - return classLoaders.get(urlMd5); - String md5 = urls.length > 1 ? urls[1].trim() : ""; - File cache = new File(App.getInstance().getFilesDir().getAbsolutePath() + "/" + urlMd5 + ".jar"); + private DexClassLoader loadJarInternal(String jar, String md5, String key) { + if (classLoaders.contains(key)) + return classLoaders.get(key); + File cache = new File(App.getInstance().getFilesDir().getAbsolutePath() + "/" + key + ".jar"); if (!md5.isEmpty()) { if (cache.exists() && MD5.getFileMd5(cache).equalsIgnoreCase(md5)) { - loadClassLoader(cache.getAbsolutePath(), urlMd5); - return classLoaders.get(urlMd5); + loadClassLoader(cache.getAbsolutePath(), key); + return classLoaders.get(key); } } try { - Response response = OkGo.get(jarUrl).execute(); + Response response = OkGo.get(jar).execute(); InputStream is = response.body().byteStream(); OutputStream os = new FileOutputStream(cache); try { @@ -115,8 +110,8 @@ public class JarLoader { e.printStackTrace(); } } - loadClassLoader(cache.getAbsolutePath(), urlMd5); - return classLoaders.get(urlMd5); + loadClassLoader(cache.getAbsolutePath(), key); + return classLoaders.get(key); } catch (Throwable e) { e.printStackTrace(); } @@ -125,19 +120,34 @@ public class JarLoader { public Spider getSpider(String key, String cls, String ext, String jar) { String clsKey = cls.replace("csp_", ""); + String jarUrl = ""; + String jarMd5 = ""; + String jarKey = ""; + if (jar.isEmpty()) { + jarKey = "main"; + } else { + String[] urls = jar.split(";md5;"); + jarUrl = urls[0]; + jarKey = MD5.string2MD5(jarUrl); + jarMd5 = urls.length > 1 ? urls[1].trim() : ""; + } + recentJarKey = jarKey; if (spiders.containsKey(key)) return spiders.get(key); DexClassLoader classLoader = null; - if (jar.isEmpty()) + if (jarKey.equals("main")) classLoader = classLoaders.get("main"); else { - classLoader = loadJarInternal(jar); + classLoader = loadJarInternal(jarUrl, jarMd5, jarKey); } if (classLoader == null) return new SpiderNull(); try { Spider sp = (Spider) classLoader.loadClass("com.github.catvod.spider." + clsKey).newInstance(); sp.init(App.getInstance(), ext); + if (!jar.isEmpty()) { + sp.homeContent(false); // 增加此行 应该可以解决部分写的有问题源的历史记录问题 但会增加这个源的首次加载时间 不需要可以已删掉 + } spiders.put(key, sp); return sp; } catch (Throwable th) { @@ -176,6 +186,7 @@ public class JarLoader { public Object[] proxyInvoke(Map params) { try { + Method proxyFun = proxyMethods.get(recentJarKey); if (proxyFun != null) { return (Object[]) proxyFun.invoke(null, params); } diff --git a/app/src/main/java/com/github/tvbox/osc/base/BaseActivity.java b/app/src/main/java/com/github/tvbox/osc/base/BaseActivity.java index 4b48f2e5..47ba0aff 100644 --- a/app/src/main/java/com/github/tvbox/osc/base/BaseActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/base/BaseActivity.java @@ -205,6 +205,8 @@ public abstract class BaseActivity extends AppCompatActivity implements CustomAd // 采样率 opts.inSampleSize = scale; globalWp = new BitmapDrawable(BitmapFactory.decodeFile(wp.getAbsolutePath(), opts)); + } else { + globalWp = null; } } catch (Throwable throwable) { throwable.printStackTrace(); @@ -215,4 +217,4 @@ public abstract class BaseActivity extends AppCompatActivity implements CustomAd else getWindow().setBackgroundDrawableResource(R.drawable.app_bg); } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java b/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java index 74a82068..b81f8775 100644 --- a/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java +++ b/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java @@ -37,6 +37,7 @@ import xyz.doikki.videoplayer.util.PlayerUtils; import static xyz.doikki.videoplayer.util.PlayerUtils.stringForTime; +//视频播放页面控件 public class VodController extends BaseController { public VodController(@NonNull @NotNull Context context) { super(context); @@ -54,7 +55,6 @@ public class VodController extends BaseController { } case 1002: { // 显示底部菜单 mBottomRoot.setVisibility(VISIBLE); - mBottomRoot.requestFocus(); break; } case 1003: { // 隐藏底部菜单 @@ -284,6 +284,7 @@ public class VodController extends BaseController { } } }); +// 增加播放页面片头片尾时间重置 findViewById(R.id.play_time_reset).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -304,6 +305,7 @@ public class VodController extends BaseController { int step = Hawk.get(HawkConfig.PLAY_TIME_STEP, 5); int st = mPlayerConfig.getInt("st"); st += step; + //片头最大跳过时间10分钟 if (st > 60 * 10) st = 0; mPlayerConfig.put("st", st); @@ -321,6 +323,7 @@ public class VodController extends BaseController { int step = Hawk.get(HawkConfig.PLAY_TIME_STEP, 5); int et = mPlayerConfig.getInt("et"); et += step; + //片尾最大跳过时间10分钟 if (et > 60 * 10) et = 0; mPlayerConfig.put("et", et); @@ -562,7 +565,6 @@ public class VodController extends BaseController { } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { if (!isBottomVisible()) { showBottom(); - return true; } } } else if (action == KeyEvent.ACTION_UP) { diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java index b49c7274..e1824ddf 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java @@ -279,8 +279,7 @@ public class DetailActivity extends BaseActivity { seriesAdapter.getData().get(vodInfo.playIndex).selected = true; seriesAdapter.notifyItemChanged(vodInfo.playIndex); jumpToPlay(); - if (showPreview && !fullWindows) - toggleFullPreview(); +// if (showPreview && !fullWindows) toggleFullPreview(); } } }); diff --git a/app/src/main/java/com/github/tvbox/osc/ui/dialog/ApiDialog.java b/app/src/main/java/com/github/tvbox/osc/ui/dialog/ApiDialog.java index 2a00358d..7dcd6d87 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/dialog/ApiDialog.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/dialog/ApiDialog.java @@ -55,6 +55,7 @@ public class ApiDialog extends BaseDialog { ivQRCode = findViewById(R.id.ivQRCode); tvAddress = findViewById(R.id.tvAddress); inputApi = findViewById(R.id.input); + //内置网络接口在此处添加 inputApi.setText(Hawk.get(HawkConfig.API_URL, "")); findViewById(R.id.inputSubmit).setOnClickListener(new View.OnClickListener() { @Override diff --git a/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java b/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java index 122801dc..d2306fad 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java @@ -44,7 +44,7 @@ import tv.danmaku.ijk.media.player.IjkMediaPlayer; /** * @author pj567 * @date :2020/12/23 - * @description: 设置页面 + * @description: */ public class ModelSettingFragment extends BaseLazyFragment { private TextView tvDebugOpen; @@ -162,6 +162,16 @@ public class ModelSettingFragment extends BaseLazyFragment { }); } }); + findViewById(R.id.llWpRecovery).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + FastClickCheckUtil.check(v); + File wp = new File(requireActivity().getFilesDir().getAbsolutePath() + "/wp"); + if (wp.exists()) + wp.delete(); + ((BaseActivity) requireActivity()).changeWallpaper(true); + } + }); findViewById(R.id.llHomeApi).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -513,4 +523,4 @@ public class ModelSettingFragment extends BaseLazyFragment { return "缩略图"; } } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java index 9194a6b8..80cc05b0 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java @@ -350,10 +350,10 @@ public class PlayFragment extends BaseLazyFragment { mVodPlayerCfg.put("sp", 1.0f); } if (!mVodPlayerCfg.has("st")) { - mVodPlayerCfg.put("st", 60); + mVodPlayerCfg.put("st", 0); } if (!mVodPlayerCfg.has("et")) { - mVodPlayerCfg.put("et", 60); + mVodPlayerCfg.put("et", 0); } } catch (Throwable th) { diff --git a/app/src/main/res/layout/fragment_model.xml b/app/src/main/res/layout/fragment_model.xml index b721aab9..f9aff1ad 100644 --- a/app/src/main/res/layout/fragment_model.xml +++ b/app/src/main/res/layout/fragment_model.xml @@ -574,40 +574,87 @@ android:textSize="@dimen/ts_30" /> + - - - - - - + android:focusable="false" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + @@ -647,4 +694,4 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/player_vod_control_view.xml b/app/src/main/res/layout/player_vod_control_view.xml index 44da7f13..fa42cec8 100644 --- a/app/src/main/res/layout/player_vod_control_view.xml +++ b/app/src/main/res/layout/player_vod_control_view.xml @@ -175,7 +175,19 @@ android:text="1S" android:textColor="@android:color/white" android:textSize="@dimen/ts_24" /> - + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ec34bb7a..02ea1298 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,4 @@ + TVBox \ No newline at end of file