mirror of https://github.com/FongMi/TV.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
4.0 KiB
139 lines
4.0 KiB
package com.fongmi.android.tv;
|
|
|
|
import android.app.Activity;
|
|
import android.content.DialogInterface;
|
|
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.utils.Download;
|
|
import com.fongmi.android.tv.utils.FileUtil;
|
|
import com.fongmi.android.tv.utils.Notify;
|
|
import com.fongmi.android.tv.utils.ResUtil;
|
|
import com.github.catvod.net.OkHttp;
|
|
import com.github.catvod.utils.Github;
|
|
import com.github.catvod.utils.Path;
|
|
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 final Download download;
|
|
private AlertDialog dialog;
|
|
private boolean dev;
|
|
|
|
private File getFile() {
|
|
return Path.cache("update.apk");
|
|
}
|
|
|
|
private String getJson() {
|
|
return Github.getJson(dev, BuildConfig.FLAVOR_mode);
|
|
}
|
|
|
|
private String getApk() {
|
|
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);
|
|
return this;
|
|
}
|
|
|
|
public Updater release() {
|
|
this.dev = false;
|
|
return this;
|
|
}
|
|
|
|
public Updater dev() {
|
|
this.dev = true;
|
|
return this;
|
|
}
|
|
|
|
private Updater check() {
|
|
dismiss();
|
|
return this;
|
|
}
|
|
|
|
public void start(Activity activity) {
|
|
App.execute(() -> doInBackground(activity));
|
|
}
|
|
|
|
private boolean need(int code, String name) {
|
|
return Setting.getUpdate() && (dev ? !name.equals(BuildConfig.VERSION_NAME) && code >= BuildConfig.VERSION_CODE : code > BuildConfig.VERSION_CODE);
|
|
}
|
|
|
|
private void doInBackground(Activity activity) {
|
|
try {
|
|
JSONObject object = new JSONObject(OkHttp.string(getJson()));
|
|
String name = object.optString("name");
|
|
String desc = object.optString("desc");
|
|
int code = object.optInt("code");
|
|
if (need(code, name)) App.post(() -> show(activity, name, desc));
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private void show(Activity activity, String version, String desc) {
|
|
binding = DialogUpdateBinding.inflate(LayoutInflater.from(activity));
|
|
check().create(activity, ResUtil.getString(R.string.update_version, version)).show();
|
|
dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(this::confirm);
|
|
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).setOnClickListener(this::cancel);
|
|
binding.desc.setText(desc);
|
|
}
|
|
|
|
private AlertDialog create(Activity activity, String title) {
|
|
return dialog = new MaterialAlertDialogBuilder(activity).setTitle(title).setView(binding.getRoot()).setPositiveButton(R.string.update_confirm, null).setNegativeButton(R.string.dialog_negative, null).setCancelable(false).create();
|
|
}
|
|
|
|
private void cancel(View view) {
|
|
Setting.putUpdate(false);
|
|
download.cancel();
|
|
dialog.dismiss();
|
|
}
|
|
|
|
private void confirm(View view) {
|
|
view.setEnabled(false);
|
|
download.start();
|
|
}
|
|
|
|
private void dismiss() {
|
|
try {
|
|
if (dialog != null) dialog.dismiss();
|
|
} catch (Exception ignored) {
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void progress(int progress) {
|
|
dialog.getButton(DialogInterface.BUTTON_POSITIVE).setText(String.format(Locale.getDefault(), "%1$d%%", progress));
|
|
}
|
|
|
|
@Override
|
|
public void error(String msg) {
|
|
Notify.show(msg);
|
|
dismiss();
|
|
}
|
|
|
|
@Override
|
|
public void success(File file) {
|
|
FileUtil.openFile(file);
|
|
dismiss();
|
|
}
|
|
}
|
|
|