diff --git a/app/src/main/java/com/fongmi/bear/ApiConfig.java b/app/src/main/java/com/fongmi/bear/ApiConfig.java index b7e3b4561..1bdfdba72 100644 --- a/app/src/main/java/com/fongmi/bear/ApiConfig.java +++ b/app/src/main/java/com/fongmi/bear/ApiConfig.java @@ -2,6 +2,7 @@ package com.fongmi.bear; import android.os.Handler; import android.os.Looper; +import android.util.Patterns; import androidx.annotation.NonNull; @@ -68,8 +69,8 @@ public class ApiConfig { } public void loadConfig(Callback callback) { - if (Prefers.getUrl().isEmpty()) { - handler.post(() -> callback.error("")); + if (Prefers.getUrl().isEmpty() || !Patterns.WEB_URL.matcher(Prefers.getUrl()).matches()) { + handler.post(() -> callback.error(0)); return; } OKHttp.get().client().newCall(new Request.Builder().url(Prefers.getUrl()).build()).enqueue(new Callback() { @@ -83,13 +84,13 @@ public class ApiConfig { loadJar(spider); handler.post(callback::success); } catch (Exception e) { - handler.post(() -> callback.error("配置解析失敗")); + handler.post(() -> callback.error(R.string.error_config_parse)); } } @Override public void onFailure(@NonNull Call call, @NonNull IOException e) { - handler.post(() -> callback.error("配置取得失敗")); + handler.post(() -> callback.error(R.string.error_config_get)); } }); } @@ -115,7 +116,7 @@ public class ApiConfig { flags.addAll(Json.safeList(object, "flags")); } - private void loadJar(String spider) throws IOException { + private void loadJar(String spider) throws Exception { Request request = new Request.Builder().url(spider).build(); Response response = OKHttp.get().client().newCall(request).execute(); jarLoader.load(response.body().bytes()); diff --git a/app/src/main/java/com/fongmi/bear/net/Callback.java b/app/src/main/java/com/fongmi/bear/net/Callback.java index c7787563d..113a5fbf3 100644 --- a/app/src/main/java/com/fongmi/bear/net/Callback.java +++ b/app/src/main/java/com/fongmi/bear/net/Callback.java @@ -1,6 +1,7 @@ package com.fongmi.bear.net; import androidx.annotation.NonNull; +import androidx.annotation.StringRes; import java.io.IOException; @@ -12,7 +13,7 @@ public abstract class Callback implements okhttp3.Callback { public void success() { } - public void error(String msg) { + public void error(@StringRes int resId) { } @Override diff --git a/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java b/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java index 0659e3a93..99a9aa7bf 100644 --- a/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java +++ b/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java @@ -79,7 +79,7 @@ public class DetailActivity extends BaseActivity { mBinding.group.addOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() { @Override public void onChildViewHolderSelected(@NonNull RecyclerView parent, @Nullable RecyclerView.ViewHolder child, int position, int subposition) { - mBinding.episode.setSelectedPosition(position * 20); + if (mEpisodeAdapter.size() > 20) mBinding.episode.setSelectedPosition(position * 20); } }); mBinding.flag.addOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() { @@ -138,7 +138,7 @@ public class DetailActivity extends BaseActivity { List items = new ArrayList<>(); int itemSize = (int) Math.ceil(size / 20.0f); for (int i = 0; i < itemSize; i++) items.add(String.valueOf(i * 20 + 1)); - mGroupAdapter.addAll(0, items); mBinding.group.setVisibility(View.VISIBLE); + mGroupAdapter.addAll(0, items); } } diff --git a/app/src/main/java/com/fongmi/bear/ui/activity/SettingActivity.java b/app/src/main/java/com/fongmi/bear/ui/activity/SettingActivity.java index f848f4c5b..73b2686e8 100644 --- a/app/src/main/java/com/fongmi/bear/ui/activity/SettingActivity.java +++ b/app/src/main/java/com/fongmi/bear/ui/activity/SettingActivity.java @@ -74,9 +74,9 @@ public class SettingActivity extends BaseActivity { } @Override - public void error(String msg) { + public void error(int resId) { Notify.dismiss(); - Notify.show(msg); + Notify.show(resId); } }); } diff --git a/app/src/main/java/com/fongmi/bear/ui/activity/SplashActivity.java b/app/src/main/java/com/fongmi/bear/ui/activity/SplashActivity.java index 5590575fd..ec758296c 100644 --- a/app/src/main/java/com/fongmi/bear/ui/activity/SplashActivity.java +++ b/app/src/main/java/com/fongmi/bear/ui/activity/SplashActivity.java @@ -46,9 +46,9 @@ public class SplashActivity extends BaseActivity { } @Override - public void error(String msg) { + public void error(int resId) { HomeActivity.start(getActivity()); - Notify.show(msg); + Notify.show(resId); } }); } diff --git a/app/src/main/java/com/fongmi/bear/utils/Notify.java b/app/src/main/java/com/fongmi/bear/utils/Notify.java index 13790ae93..15db37b8b 100644 --- a/app/src/main/java/com/fongmi/bear/utils/Notify.java +++ b/app/src/main/java/com/fongmi/bear/utils/Notify.java @@ -30,7 +30,7 @@ public class Notify { } public static void show(int resId) { - show(Utils.getString(resId)); + if (resId != 0) show(ResUtil.getString(resId)); } public static void show(String text) { diff --git a/app/src/main/java/com/fongmi/bear/utils/Utils.java b/app/src/main/java/com/fongmi/bear/utils/Utils.java index 03ef3a51f..26cddad4b 100644 --- a/app/src/main/java/com/fongmi/bear/utils/Utils.java +++ b/app/src/main/java/com/fongmi/bear/utils/Utils.java @@ -10,18 +10,12 @@ import android.view.KeyEvent; import android.widget.ImageView; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.resource.bitmap.CenterCrop; -import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.fongmi.bear.App; import com.fongmi.bear.R; import com.google.android.exoplayer2.util.Util; public class Utils { - public static String getString(int resId) { - return App.get().getString(resId); - } - public static boolean hasEvent(KeyEvent event) { return isArrowKey(event) || isBackKey(event) || isMenuKey(event) || isDigitKey(event) || event.isLongPress(); } @@ -63,7 +57,7 @@ public class Utils { } public static void loadImage(String url, ImageView view) { - Glide.with(App.get()).load(url).placeholder(R.drawable.ic_img_loading).error(R.drawable.ic_img_error).transform(new CenterCrop(), new RoundedCorners(ResUtil.dp2px(8))).into(view); + Glide.with(App.get()).load(url).placeholder(R.drawable.ic_img_loading).error(R.drawable.ic_img_error).into(view); } public static boolean hasPIP() { 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 ab268bcc6..0cc5795fe 100644 --- a/app/src/main/java/com/github/catvod/crawler/JarLoader.java +++ b/app/src/main/java/com/github/catvod/crawler/JarLoader.java @@ -37,35 +37,19 @@ public class JarLoader { } } - public void load(byte[] jarData) { - try { - spiders.clear(); - proxyFun = null; - writeJar(jarData); - classLoader = new DexClassLoader(FileUtil.getJarPath(), FileUtil.getCachePath(), null, App.get().getClassLoader()); - int count = 0; - do { - try { - Class classInit = classLoader.loadClass("com.github.catvod.spider.Init"); - if (classInit != null) { - Method method = classInit.getMethod("init", Context.class); - method.invoke(classInit, App.get()); - try { - Class proxy = classLoader.loadClass("com.github.catvod.spider.Proxy"); - proxyFun = proxy.getMethod("proxy", Map.class); - } catch (Exception e) { - - } - break; - } - Thread.sleep(200); - } catch (Exception e) { - e.printStackTrace(); - } - count++; - } while (count < 5); - } catch (Exception e) { - e.printStackTrace(); + public void load(byte[] jarData) throws Exception { + spiders.clear(); + proxyFun = null; + writeJar(jarData); + classLoader = new DexClassLoader(FileUtil.getJarPath(), FileUtil.getCachePath(), null, App.get().getClassLoader()); + Class classInit = classLoader.loadClass("com.github.catvod.spider.Init"); + Class classProxy = classLoader.loadClass("com.github.catvod.spider.Proxy"); + if (classInit != null) { + Method method = classInit.getMethod("init", Context.class); + method.invoke(classInit, App.get()); + } + if (classProxy != null) { + proxyFun = classProxy.getMethod("proxy", Map.class); } } diff --git a/app/src/main/res/drawable/selector_vod.xml b/app/src/main/res/drawable/selector_vod.xml index 663ec3ba8..08e828484 100644 --- a/app/src/main/res/drawable/selector_vod.xml +++ b/app/src/main/res/drawable/selector_vod.xml @@ -1,6 +1,4 @@ - - \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_vod_focused.xml b/app/src/main/res/drawable/shape_vod_focused.xml index 26e725e95..59328d5ad 100644 --- a/app/src/main/res/drawable/shape_vod_focused.xml +++ b/app/src/main/res/drawable/shape_vod_focused.xml @@ -2,12 +2,8 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_vod_name.xml b/app/src/main/res/drawable/shape_vod_name.xml deleted file mode 100644 index 052ffc21e..000000000 --- a/app/src/main/res/drawable/shape_vod_name.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_vod_normal.xml b/app/src/main/res/drawable/shape_vod_normal.xml deleted file mode 100644 index f3c1d2184..000000000 --- a/app/src/main/res/drawable/shape_vod_normal.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_vod_remark.xml b/app/src/main/res/drawable/shape_vod_remark.xml deleted file mode 100644 index 904077a1c..000000000 --- a/app/src/main/res/drawable/shape_vod_remark.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_vod.xml b/app/src/main/res/layout/adapter_vod.xml index ce542298b..202cec813 100644 --- a/app/src/main/res/layout/adapter_vod.xml +++ b/app/src/main/res/layout/adapter_vod.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="150dp" android:layout_height="200dp" + android:background="@color/black_20" android:focusable="true" android:focusableInTouchMode="true"> @@ -18,7 +19,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/name" - android:background="@drawable/shape_vod_remark" + android:background="#CC177535" + android:padding="4dp" android:singleLine="true" android:textColor="@color/white" android:textSize="14sp" @@ -29,7 +31,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" - android:background="@drawable/shape_vod_name" + android:background="@color/black_50" android:ellipsize="marquee" android:gravity="center" android:marqueeRepeatLimit="marquee_forever" diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index b463ae383..d8e7c708d 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -35,6 +35,7 @@ 请输入配置接口 - 配置载入失败 + 配置取得失败 + 配置解析失败 \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 5e13f3b70..62e9b274d 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -35,6 +35,7 @@ 請輸入配置接口 - 配置載入失敗 + 配置取得失敗 + 配置解析失敗 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f57f2e438..8a23733fa 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -35,6 +35,7 @@ Please enter the configuration url - Configuration load failed + Configuration get failed + Configuration parse failed \ No newline at end of file