From 95aa3fc69d43e69acd3cff17d6868c569f4ae135 Mon Sep 17 00:00:00 2001 From: FongMi Date: Thu, 27 Feb 2025 16:07:26 +0800 Subject: [PATCH] Optimize updater --- .../android/tv/api/config/LiveConfig.java | 4 ++-- .../android/tv/api/config/VodConfig.java | 2 +- .../com/fongmi/android/tv/utils/Download.java | 15 +++++++++----- .../java/com/fongmi/android/tv/Updater.java | 20 ++++++++++--------- .../android/tv/ui/activity/MainActivity.java | 2 +- .../tv/ui/fragment/SettingFragment.java | 4 ++-- 6 files changed, 27 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java index a4de2cef2..63f2fca39 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java @@ -148,7 +148,7 @@ public class LiveConfig { } private void checkJson(JsonObject object, Callback callback) { - if (object.has("msg") && callback != null) { + if (object.has("msg")) { App.post(() -> callback.error(object.get("msg").getAsString())); } else if (object.has("urls")) { parseDepot(object, callback); @@ -174,7 +174,7 @@ public class LiveConfig { } catch (Throwable e) { e.printStackTrace(); } finally { - if (callback != null) App.post(callback::success); + App.post(callback::success); } } 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 5a8b21f8b..f8f708221 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 @@ -126,7 +126,7 @@ public class VodConfig { } private void checkJson(JsonObject object, Callback callback) { - if (object.has("msg") && callback != null) { + if (object.has("msg")) { App.post(() -> callback.error(object.get("msg").getAsString())); } else if (object.has("urls")) { parseDepot(object, callback); diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Download.java b/app/src/main/java/com/fongmi/android/tv/utils/Download.java index 0febb995e..97681efcf 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Download.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Download.java @@ -16,7 +16,7 @@ public class Download { private final File file; private final String url; - private final Callback callback; + private Callback callback; public static Download create(String url, File file) { return create(url, file, null); @@ -38,14 +38,19 @@ public class Download { else App.execute(this::doInBackground); } + public void cancel() { + OkHttp.cancel(url); + callback = null; + } + private void doInBackground() { try { Path.create(file); - Response response = OkHttp.newCall(url).execute(); + Response response = OkHttp.newCall(url, url).execute(); download(response.body().byteStream(), Double.parseDouble(response.header(HttpHeaders.CONTENT_LENGTH, "1"))); - if (callback != null) App.post(() -> callback.success(file)); + App.post(() -> {if (callback != null) callback.success(file);}); } catch (Exception e) { - if (callback != null) App.post(() -> callback.error(e.getMessage())); + App.post(() -> {if (callback != null) callback.error(e.getMessage());}); } } @@ -59,7 +64,7 @@ public class Download { totalBytes += readBytes; os.write(buffer, 0, readBytes); int progress = (int) (totalBytes / length * 100.0); - if (callback != null) App.post(() -> callback.progress(progress)); + App.post(() -> {if (callback != null) callback.progress(progress);}); } } } diff --git a/app/src/mobile/java/com/fongmi/android/tv/Updater.java b/app/src/mobile/java/com/fongmi/android/tv/Updater.java index 4edde65b2..bdbc58b49 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/Updater.java +++ b/app/src/mobile/java/com/fongmi/android/tv/Updater.java @@ -25,17 +25,10 @@ import java.util.Locale; public class Updater implements Download.Callback { private DialogUpdateBinding binding; + private final Download download; private AlertDialog dialog; private boolean dev; - private static class Loader { - static volatile Updater INSTANCE = new Updater(); - } - - public static Updater get() { - return Loader.INSTANCE; - } - private File getFile() { return Path.cache("update.apk"); } @@ -48,6 +41,14 @@ public class Updater implements Download.Callback { return Github.getApk(dev, BuildConfig.FLAVOR_mode + "-" + BuildConfig.FLAVOR_api + "-" + BuildConfig.FLAVOR_abi); } + public static Updater create() { + return new Updater(); + } + + public Updater() { + this.download = Download.create(getApk(), getFile(), this); + } + public Updater force() { Notify.show(R.string.update_check); Setting.putUpdate(true); @@ -103,12 +104,13 @@ public class Updater implements Download.Callback { private void cancel(View view) { Setting.putUpdate(false); + download.cancel(); dialog.dismiss(); } private void confirm(View view) { - Download.create(getApk(), getFile(), this).start(); view.setEnabled(false); + download.start(); } private void dismiss() { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java index acc14f722..965f78813 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java @@ -61,7 +61,7 @@ public class MainActivity extends BaseActivity implements NavigationBarView.OnIt @Override protected void initView(Bundle savedInstanceState) { - Updater.get().release().start(this); + Updater.create().release().start(this); initFragment(savedInstanceState); Server.get().start(); initConfig(); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java index 9420d6f73..08b92f1bf 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java @@ -278,11 +278,11 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit } private void onVersion(View view) { - Updater.get().force().release().start(getActivity()); + Updater.create().force().release().start(getActivity()); } private boolean onVersionDev(View view) { - Updater.get().force().dev().start(getActivity()); + Updater.create().force().dev().start(getActivity()); return true; }