From 3dde328dce88928a3c818c3410321ddc3f2452a3 Mon Sep 17 00:00:00 2001 From: FongMi Date: Wed, 7 Sep 2022 13:47:30 +0800 Subject: [PATCH] Add update dialog --- .../android/tv/ui/activity/HomeActivity.java | 2 +- .../tv/ui/custom/dialog/ConfigDialog.java | 2 +- app/src/leanback/res/layout/dialog_config.xml | 5 +- .../leanback/res/values-zh-rCN/strings.xml | 3 - .../leanback/res/values-zh-rTW/strings.xml | 3 - app/src/leanback/res/values/strings.xml | 5 +- .../com/fongmi/android/tv/utils/FileUtil.java | 3 +- .../com/fongmi/android/tv/utils/Updater.java | 62 +++++++++++++++-- app/src/main/res/layout/dialog_update.xml | 67 +++++++++++++++++++ app/src/main/res/values-zh-rCN/strings.xml | 4 ++ app/src/main/res/values-zh-rTW/strings.xml | 4 ++ app/src/main/res/values/strings.xml | 4 ++ 12 files changed, 141 insertions(+), 23 deletions(-) create mode 100644 app/src/main/res/layout/dialog_update.xml 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 4337641a8..4415c88af 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 @@ -75,9 +75,9 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen protected void initView() { mHandler = new Handler(Looper.getMainLooper()); Clock.start(mBinding.time); + Updater.check(this).run(); Server.get().start(); Players.get().init(); - Updater.check(this); setRecyclerView(); setViewModel(); setAdapter(); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/ConfigDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/ConfigDialog.java index be31ca026..f9367bba5 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/ConfigDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/ConfigDialog.java @@ -57,7 +57,7 @@ public class ConfigDialog implements DialogInterface.OnDismissListener { binding.text.setText(Prefers.getUrl()); binding.text.setSelection(binding.text.getText().length()); binding.code.setImageBitmap(QRCode.getBitmap(address, 200, 0)); - binding.info.setText(ResUtil.getString(R.string.dialog_config_info, address)); + binding.info.setText(ResUtil.getString(R.string.push_info, address).replace(",", "\n")); } private void initEvent() { diff --git a/app/src/leanback/res/layout/dialog_config.xml b/app/src/leanback/res/layout/dialog_config.xml index fcd2d7f7e..04af8fb04 100644 --- a/app/src/leanback/res/layout/dialog_config.xml +++ b/app/src/leanback/res/layout/dialog_config.xml @@ -1,5 +1,6 @@ @@ -19,9 +20,9 @@ android:lineSpacingExtra="4dp" android:paddingStart="4dp" android:paddingEnd="4dp" - android:text="@string/dialog_config_info" android:textColor="@color/grey_700" - android:textSize="18sp" /> + android:textSize="18sp" + tools:text="@string/push_info" /> 手机或电脑连接同一个局域网,扫描 QR Code 或浏览器输入地址\n%s - - 手机或电脑连接同一个局域网\n扫描 QR Code 或浏览器输入地址\n%s - \ No newline at end of file diff --git a/app/src/leanback/res/values-zh-rTW/strings.xml b/app/src/leanback/res/values-zh-rTW/strings.xml index 23132b0b8..2bd812c2c 100644 --- a/app/src/leanback/res/values-zh-rTW/strings.xml +++ b/app/src/leanback/res/values-zh-rTW/strings.xml @@ -22,7 +22,4 @@ 手機或電腦連接同一個區域網路,掃描 QR Code 或瀏覽器輸入網址\n%s - - 手機或電腦連接同一個區域網路\n掃描 QR Code 或瀏覽器輸入網址\n%s - \ No newline at end of file diff --git a/app/src/leanback/res/values/strings.xml b/app/src/leanback/res/values/strings.xml index 5d48265f0..bbf420161 100644 --- a/app/src/leanback/res/values/strings.xml +++ b/app/src/leanback/res/values/strings.xml @@ -1,4 +1,4 @@ - + Vod @@ -22,7 +22,4 @@ Connect phone or pc to LAN and scan QR Code or enter the URL in browser\n%s - - Connect phone or pc to LAN and Scan QR Code or enter the URL in browser\n%s - \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java index a1fc227ff..ce1335903 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java @@ -56,13 +56,12 @@ public class FileUtil { return TextUtils.isEmpty(mimeType) ? "*/*" : mimeType; } - public static File write(File file, byte[] data) throws Exception { + public static void write(File file, byte[] data) throws Exception { FileOutputStream fos = new FileOutputStream(file); fos.write(data); fos.flush(); fos.close(); chmod(file); - return file; } public static String read(String path) { diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Updater.java b/app/src/main/java/com/fongmi/android/tv/utils/Updater.java index 9650a11b5..e37f2be41 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Updater.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Updater.java @@ -1,39 +1,87 @@ package com.fongmi.android.tv.utils; import android.app.Activity; +import android.os.Handler; +import android.os.Looper; +import android.view.LayoutInflater; +import android.view.View; + +import androidx.appcompat.app.AlertDialog; 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.google.android.material.dialog.MaterialAlertDialogBuilder; import org.json.JSONObject; import java.io.File; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; -public class Updater { +public class Updater implements View.OnClickListener { private static final String URL = "https://github.com/FongMi/TV/raw/main/release/leanback.json"; private static final String PROXY = "https://ghproxy.com/"; - public static void check(Activity activity) { - new Thread(() -> new Updater().connect(URL, 0)).start(); + private final ExecutorService executor; + private final Activity activity; + private final Handler handler; + private AlertDialog dialog; + + public static Updater check(Activity activity) { + return new Updater(activity); + } + + public Updater(Activity activity) { + this.executor = Executors.newSingleThreadExecutor(); + this.handler = new Handler(Looper.getMainLooper()); + this.activity = activity; } private File getApk() { return FileUtil.getCacheFile("update.apk"); } + public void run() { + executor.submit(this::doInBackground); + } + + private void doInBackground() { + connect(URL, 0); + } + private void connect(String target, int retry) { try { JSONObject object = new JSONObject(OKHttp.newCall(target).execute().body().string()); - int version = object.optInt("version"); - String url = object.optString("url"); + String name = object.optString("name"); String desc = object.optString("desc"); + String url = object.optString("url"); + int code = object.optInt("code"); if (retry > 0) url = PROXY + url; - if (version <= BuildConfig.VERSION_CODE) FileUtil.clearDir(getApk()); - else FileUtil.openFile(FileUtil.write(getApk(), OKHttp.newCall(url).execute().body().bytes())); + if (code <= BuildConfig.VERSION_CODE) FileUtil.clearDir(getApk()); + else FileUtil.write(getApk(), OKHttp.newCall(url).execute().body().bytes()); + if (getApk().exists()) handler.post(() -> showDialog(name, desc)); } catch (Exception e) { if (retry == 0) connect(PROXY + target, 1); e.printStackTrace(); } } + + private void showDialog(String version, String desc) { + DialogUpdateBinding binding = DialogUpdateBinding.inflate(LayoutInflater.from(activity)); + dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create(); + binding.version.setText(ResUtil.getString(R.string.update_version, version)); + binding.confirm.setOnClickListener(this); + binding.cancel.setOnClickListener(this); + binding.desc.setText(desc); + dialog.show(); + } + + @Override + public void onClick(View view) { + if (view.getId() == R.id.confirm) FileUtil.openFile(getApk()); + dialog.dismiss(); + } } diff --git a/app/src/main/res/layout/dialog_update.xml b/app/src/main/res/layout/dialog_update.xml new file mode 100644 index 000000000..ba493f061 --- /dev/null +++ b/app/src/main/res/layout/dialog_update.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index bdd0a31bf..6476ffdf8 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -59,6 +59,10 @@ 暂无播放数据 找不到数据 + + 发现新版本 %s + 更新 + 发生意外错误\n抱歉给您带来不便 重新启动 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 3705590f6..998635ace 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -59,6 +59,10 @@ 暫無播放資料 找不到資料 + + 發現新版本 %s + 更新 + 發生意外錯誤\n抱歉給您帶來不便 重新啟動 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2ed8aa68c..c73fe5f89 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -59,6 +59,10 @@ No episode data Not found + + New version %s + Update + An unexpected error occurred.\nSorry for the inconvenience. Restart app