Optimize update

pull/123/head
FongMi 3 years ago
parent 4662475768
commit 39fbe8ab6f
  1. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  2. 4
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java
  3. 2
      app/src/main/java/com/fongmi/android/tv/api/JarLoader.java
  4. 49
      app/src/main/java/com/fongmi/android/tv/api/Updater.java
  5. 2
      app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java
  6. 8
      app/src/main/java/com/fongmi/android/tv/utils/Prefers.java
  7. 2
      app/src/main/java/com/fongmi/android/tv/utils/Utils.java
  8. 3
      app/src/main/res/raw/index.html
  9. 5
      app/src/main/res/raw/script.js
  10. 1
      app/src/main/res/values-zh-rCN/strings.xml
  11. 1
      app/src/main/res/values-zh-rTW/strings.xml
  12. 1
      app/src/main/res/values/strings.xml

@ -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;

@ -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());

@ -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();

@ -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> 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();
}
}

@ -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) {

@ -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;
}

@ -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");

@ -52,8 +52,7 @@
</div>
<div class="weui-cell weui-cell_active weui-cell_vcode weui-cell_wrap">
<div class="weui-cell__bd weui-flex" style="display: flex;justify-content:center;">
<button onclick="update('dev'); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn" style="margin-right:16px;">測試版</button>
<button onclick="update('release'); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">正式版</button>
<button id="dev" onclick="update(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn" style="margin-right:16px;">推送內測版</button>
</div>
</div>
</div>

@ -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() {

@ -89,6 +89,7 @@
<!-- Update -->
<string name="update_version">发现新版本 <xliff:g name="name">%s</xliff:g></string>
<string name="update_check">正在检测更新…</string>
<string name="update_confirm">更新</string>
<!-- Crash -->

@ -89,6 +89,7 @@
<!-- Update -->
<string name="update_version">發現新版本 <xliff:g name="name">%s</xliff:g></string>
<string name="update_check">正在檢查更新…</string>
<string name="update_confirm">更新</string>
<!-- Crash -->

@ -89,6 +89,7 @@
<!-- Update -->
<string name="update_version">New version <xliff:g name="name">%s</xliff:g></string>
<string name="update_check">Checking for updates…</string>
<string name="update_confirm">Update</string>
<!-- Crash -->

Loading…
Cancel
Save