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