diff --git a/app/build.gradle b/app/build.gradle index 7e352da7b..dab9c687b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { leanback { dimension "mode" versionCode 71 - versionName "1.7.1" + versionName "20230329#1" } mobile { dimension "mode" diff --git a/app/src/leanback/java/com/fongmi/android/tv/Updater.java b/app/src/leanback/java/com/fongmi/android/tv/Updater.java new file mode 100644 index 000000000..a8acb314c --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/Updater.java @@ -0,0 +1,135 @@ +package com.fongmi.android.tv; + +import android.app.Activity; +import android.view.LayoutInflater; +import android.view.View; + +import androidx.appcompat.app.AlertDialog; + +import com.fongmi.android.tv.databinding.DialogUpdateBinding; +import com.fongmi.android.tv.net.Download; +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.util.Locale; + +public class Updater implements Download.Callback { + + private DialogUpdateBinding binding; + private AlertDialog dialog; + private String branch; + + private static class Loader { + static volatile Updater INSTANCE = new Updater(); + } + + public static Updater get() { + return Loader.INSTANCE; + } + + private File getFile() { + return FileUtil.getCacheFile(branch + ".apk"); + } + + private String getJson() { + return Github.get().getBranchPath(branch, "/release/" + BuildConfig.FLAVOR_mode + "-" + branch + ".json"); + } + + private String getApk() { + return Github.get().getBranchPath(branch, "/release/" + BuildConfig.FLAVOR_mode + "-" + BuildConfig.FLAVOR_api + ".apk"); + } + + private Updater() { + this.branch = Github.RELEASE; + } + + public Updater force() { + Notify.show(R.string.update_check); + Prefers.putUpdate(true); + return this; + } + + public Updater dev() { + this.branch = Github.DEV; + return this; + } + + private Updater check() { + dismiss(); + return this; + } + + public void start() { + App.execute(this::doInBackground); + } + + private boolean need(int code, String name) { + return (branch.equals(Github.DEV) ? !name.equals(BuildConfig.VERSION_NAME) : code > BuildConfig.VERSION_CODE) && Prefers.getUpdate(); + } + + private void doInBackground() { + try { + JSONObject object = new JSONObject(OkHttp.newCall(getJson()).execute().body().string()); + String name = object.optString("name"); + String desc = object.optString("desc"); + int code = object.optInt("code"); + if (need(code, name)) App.post(() -> show(App.activity(), name, desc)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void show(Activity activity, String version, String desc) { + binding = DialogUpdateBinding.inflate(LayoutInflater.from(activity)); + binding.version.setText(ResUtil.getString(R.string.update_version, version)); + binding.confirm.setOnClickListener(this::confirm); + binding.cancel.setOnClickListener(this::cancel); + check().create(activity).show(); + binding.desc.setText(desc); + } + + private AlertDialog create(Activity activity) { + return dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).setCancelable(false).create(); + } + + private void cancel(View view) { + Prefers.putUpdate(false); + dismiss(); + } + + private void confirm(View view) { + binding.confirm.setEnabled(false); + Download.create(getApk(), getFile(), this).start(); + } + + private void dismiss() { + try { + if (dialog != null) dialog.dismiss(); + } catch (Exception ignored) { + } + } + + @Override + public void progress(int progress) { + binding.confirm.setText(String.format(Locale.getDefault(), "%1$d%%", progress)); + } + + @Override + public void error(String message) { + Notify.show(message); + dismiss(); + } + + @Override + public void success(File file) { + FileUtil.openFile(getFile()); + dismiss(); + } +} 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 54d5a5444..d8d648dee 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 @@ -16,9 +16,9 @@ import androidx.viewbinding.ViewBinding; import com.fongmi.android.tv.App; import com.fongmi.android.tv.Product; import com.fongmi.android.tv.R; +import com.fongmi.android.tv.Updater; import com.fongmi.android.tv.api.ApiConfig; import com.fongmi.android.tv.api.LiveConfig; -import com.fongmi.android.tv.api.Updater; import com.fongmi.android.tv.api.WallConfig; import com.fongmi.android.tv.bean.Func; import com.fongmi.android.tv.bean.History; 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 60624b3e1..7ed60b126 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 @@ -8,9 +8,9 @@ import androidx.viewbinding.ViewBinding; import com.fongmi.android.tv.BuildConfig; import com.fongmi.android.tv.R; +import com.fongmi.android.tv.Updater; import com.fongmi.android.tv.api.ApiConfig; import com.fongmi.android.tv.api.LiveConfig; -import com.fongmi.android.tv.api.Updater; import com.fongmi.android.tv.api.WallConfig; import com.fongmi.android.tv.bean.Config; import com.fongmi.android.tv.bean.Live; diff --git a/app/src/leanback/res/values/styles.xml b/app/src/leanback/res/values/styles.xml index 52adfc4d4..30474c11e 100644 --- a/app/src/leanback/res/values/styles.xml +++ b/app/src/leanback/res/values/styles.xml @@ -6,9 +6,9 @@ @color/primary @color/primaryDark @color/accent - @null - @null true + @null + @null true true @style/ThemeOverlay.App.BottomSheetDialog diff --git a/app/src/main/java/com/fongmi/android/tv/api/Updater.java b/app/src/mobile/java/com/fongmi/android/tv/Updater.java similarity index 100% rename from app/src/main/java/com/fongmi/android/tv/api/Updater.java rename to app/src/mobile/java/com/fongmi/android/tv/Updater.java