From 39fbe8ab6f4414f46bc7dc1932586d9651ab4606 Mon Sep 17 00:00:00 2001 From: FongMi Date: Thu, 1 Dec 2022 10:34:48 +0800 Subject: [PATCH] Optimize update --- .../android/tv/ui/activity/HomeActivity.java | 6 +-- .../tv/ui/activity/SettingActivity.java | 4 +- .../com/fongmi/android/tv/api/JarLoader.java | 2 +- .../android/tv/{utils => api}/Updater.java | 49 +++++++++++++------ .../com/fongmi/android/tv/utils/FileUtil.java | 2 +- .../com/fongmi/android/tv/utils/Prefers.java | 8 +++ .../com/fongmi/android/tv/utils/Utils.java | 2 +- app/src/main/res/raw/index.html | 3 +- app/src/main/res/raw/script.js | 5 +- app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 12 files changed, 57 insertions(+), 27 deletions(-) rename app/src/main/java/com/fongmi/android/tv/{utils => api}/Updater.java (64%) 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 8b9bd93ed..fd350369d 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 @@ -42,7 +42,7 @@ import com.fongmi.android.tv.utils.Clock; import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.Prefers; import com.fongmi.android.tv.utils.ResUtil; -import com.fongmi.android.tv.utils.Updater; +import com.fongmi.android.tv.api.Updater; import com.fongmi.android.tv.utils.Utils; import com.google.common.collect.Lists; @@ -71,7 +71,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen LiveConfig.get().init(); ApiConfig.get().init().load(getCallback()); mBinding.progressLayout.showProgress(); - Updater.create(this).start(); + Updater.get().start(this); Server.get().start(); setRecyclerView(); setViewModel(); @@ -289,7 +289,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen CollectActivity.start(this, event.getText(), true); break; case UPDATE: - Updater.create(this).force().branch(event.getText()).start(); + Updater.get().force().branch(event.getText()).start(this); break; case PUSH: if (ApiConfig.get().getSite("push_agent") == null) return; diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java index 669de4886..dc432d498 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java @@ -36,7 +36,7 @@ import com.fongmi.android.tv.ui.custom.dialog.SiteDialog; import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.Prefers; import com.fongmi.android.tv.utils.ResUtil; -import com.fongmi.android.tv.utils.Updater; +import com.fongmi.android.tv.api.Updater; public class SettingActivity extends BaseActivity implements ConfigCallback, SiteCallback, LiveCallback { @@ -78,7 +78,7 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit mBinding.wall.setOnClickListener(view -> ConfigDialog.create(this).type(2).show()); mBinding.vodHistory.setOnClickListener(view -> HistoryDialog.create(this).type(0).show()); mBinding.liveHistory.setOnClickListener(view -> HistoryDialog.create(this).type(1).show()); - mBinding.version.setOnClickListener(view -> Updater.create(this).reset().start()); + mBinding.version.setOnClickListener(view -> Updater.get().reset().start(this)); mBinding.wallDefault.setOnClickListener(view -> setWallDefault()); mBinding.wallRefresh.setOnClickListener(view -> setWallRefresh()); mBinding.quality.setOnClickListener(view -> setQuality()); diff --git a/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java b/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java index 9b49802b3..07fd8f523 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java +++ b/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java @@ -86,7 +86,7 @@ public class JarLoader { public Spider getSpider(String key, String api, String ext, String jar) { try { - String spKey = (current = Utils.getMD5(jar)) + key; + String spKey = (current = Utils.getMd5(jar)) + key; if (spiders.containsKey(spKey)) return spiders.get(spKey); if (!loaders.containsKey(current)) parseJar(current, jar); Spider spider = (Spider) loaders.get(current).loadClass("com.github.catvod.spider." + api.split("csp_")[1]).newInstance(); diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Updater.java b/app/src/main/java/com/fongmi/android/tv/api/Updater.java similarity index 64% rename from app/src/main/java/com/fongmi/android/tv/utils/Updater.java rename to app/src/main/java/com/fongmi/android/tv/api/Updater.java index a576f8578..3c48897ff 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Updater.java +++ b/app/src/main/java/com/fongmi/android/tv/api/Updater.java @@ -1,6 +1,7 @@ -package com.fongmi.android.tv.utils; +package com.fongmi.android.tv.api; import android.app.Activity; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -11,27 +12,36 @@ import com.fongmi.android.tv.BuildConfig; import com.fongmi.android.tv.R; import com.fongmi.android.tv.databinding.DialogUpdateBinding; import com.fongmi.android.tv.net.OKHttp; +import com.fongmi.android.tv.utils.FileUtil; +import com.fongmi.android.tv.utils.Notify; +import com.fongmi.android.tv.utils.Prefers; +import com.fongmi.android.tv.utils.ResUtil; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.json.JSONObject; import java.io.File; +import java.lang.ref.WeakReference; public class Updater implements View.OnClickListener { private static final String PROXY = "https://ghproxy.com/"; - private final Activity activity; + private WeakReference activity; private AlertDialog dialog; private String branch; private boolean force; + private String md5; - public static Updater create(Activity activity) { - return new Updater(activity); + private static class Loader { + static volatile Updater INSTANCE = new Updater(); } - private Updater(Activity activity) { - this.activity = activity; + public static Updater get() { + return Loader.INSTANCE; + } + + private Updater() { this.branch = "release"; } @@ -41,6 +51,7 @@ public class Updater implements View.OnClickListener { } public Updater force() { + Notify.show(R.string.update_check); this.force = true; return this; } @@ -50,16 +61,18 @@ public class Updater implements View.OnClickListener { return this; } - public void start() { + public void start(Activity activity) { + this.activity = new WeakReference<>(activity); App.execute(this::doInBackground); } private void doInBackground() { + FileUtil.clearDir(getFile()); connect(getJson()); } private File getFile() { - return FileUtil.getCacheFile("update.apk"); + return FileUtil.getCacheFile(branch + ".apk"); } private String getPath() { @@ -80,22 +93,23 @@ public class Updater implements View.OnClickListener { String name = object.optString("name"); String desc = object.optString("desc"); int code = object.optInt("code"); - if (code <= BuildConfig.VERSION_CODE) FileUtil.clearDir(getFile()); if (code > BuildConfig.VERSION_CODE || force) FileUtil.write(getFile(), OKHttp.newCall(getApk()).execute().body().bytes()); - if (getFile().exists() && (Prefers.getUpdate() || force)) App.post(() -> checkActivity(name, desc)); + boolean show = Prefers.getUpdate() || !Prefers.getApkMd5().equals(md5 = FileUtil.getMd5(getFile())); + if (getFile().exists() && show) App.post(() -> checkActivity(name, desc)); } catch (Exception e) { e.printStackTrace(); } } private void checkActivity(String version, String desc) { - if (activity.isFinishing()) FileUtil.openFile(getFile()); + if (activity.get().isFinishing()) install(); else showDialog(version, desc); } private void showDialog(String version, String desc) { - DialogUpdateBinding binding = DialogUpdateBinding.inflate(LayoutInflater.from(activity)); - dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create(); + if (dialog != null) dialog.dismiss(); + DialogUpdateBinding binding = DialogUpdateBinding.inflate(LayoutInflater.from(activity.get())); + dialog = new MaterialAlertDialogBuilder(activity.get()).setView(binding.getRoot()).create(); binding.version.setText(ResUtil.getString(R.string.update_version, version)); binding.confirm.setOnClickListener(this); binding.cancel.setOnClickListener(this); @@ -103,10 +117,15 @@ public class Updater implements View.OnClickListener { dialog.show(); } + private void install() { + FileUtil.openFile(getFile()); + if (!TextUtils.isEmpty(md5)) Prefers.putApkMD5(md5); + } + @Override public void onClick(View view) { - if (view.getId() == R.id.confirm) FileUtil.openFile(getFile()); - else if (view.getId() == R.id.cancel) Prefers.putUpdate(false); + if (view.getId() == R.id.cancel) Prefers.putUpdate(false); + if (view.getId() == R.id.confirm) install(); dialog.dismiss(); } } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java index 0c08058ff..218411519 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java @@ -52,7 +52,7 @@ public class FileUtil { } public static File getJar(String fileName) { - return getCacheFile(Utils.getMD5(fileName).concat(".jar")); + return getCacheFile(Utils.getMd5(fileName).concat(".jar")); } public static File getWall(int index) { diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java b/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java index 7e90414c3..8af95455e 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java @@ -155,6 +155,14 @@ public class Prefers { put("update", update); } + public static String getApkMd5() { + return getString("apk_md5"); + } + + public static void putApkMD5(String apkMd5) { + put("apk_md5", apkMd5); + } + public static float getThumbnail() { return 0.3f * getQuality() + 0.4f; } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Utils.java b/app/src/main/java/com/fongmi/android/tv/utils/Utils.java index e1c3f42b7..73819895a 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Utils.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Utils.java @@ -102,7 +102,7 @@ public class Utils { return baseUrl.substring(0, index) + text; } - public static String getMD5(String src) { + public static String getMd5(String src) { try { if (TextUtils.isEmpty(src)) return ""; MessageDigest digest = MessageDigest.getInstance("MD5"); diff --git a/app/src/main/res/raw/index.html b/app/src/main/res/raw/index.html index 8a9a2b59a..5fa9a537e 100644 --- a/app/src/main/res/raw/index.html +++ b/app/src/main/res/raw/index.html @@ -52,8 +52,7 @@
- - +
diff --git a/app/src/main/res/raw/script.js b/app/src/main/res/raw/script.js index 1f4b628a8..59799e60e 100644 --- a/app/src/main/res/raw/script.js +++ b/app/src/main/res/raw/script.js @@ -2,8 +2,9 @@ function search() { doAction('search', { text: $('#keyword').val() }); } -function update(branch) { - doAction('update', { text: branch }); +function update() { + doAction('update', { text: "dev" }); + $('#dev').attr("disabled", true); } function push() { diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index d34039472..a3e3d7186 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -89,6 +89,7 @@ 发现新版本 %s + 正在检测更新… 更新 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index f7474ee5f..8f06a477f 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -89,6 +89,7 @@ 發現新版本 %s + 正在檢查更新… 更新 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 33673c7a1..3f2ab5942 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -89,6 +89,7 @@ New version %s + Checking for updates… Update