Add update dialog

pull/137/head
FongMi 4 years ago
parent 7d9ed7a094
commit 3dde328dce
  1. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  2. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/ConfigDialog.java
  3. 5
      app/src/leanback/res/layout/dialog_config.xml
  4. 3
      app/src/leanback/res/values-zh-rCN/strings.xml
  5. 3
      app/src/leanback/res/values-zh-rTW/strings.xml
  6. 5
      app/src/leanback/res/values/strings.xml
  7. 3
      app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java
  8. 62
      app/src/main/java/com/fongmi/android/tv/utils/Updater.java
  9. 67
      app/src/main/res/layout/dialog_update.xml
  10. 4
      app/src/main/res/values-zh-rCN/strings.xml
  11. 4
      app/src/main/res/values-zh-rTW/strings.xml
  12. 4
      app/src/main/res/values/strings.xml

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

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

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp">
@ -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" />
<EditText
android:id="@+id/text"

@ -22,7 +22,4 @@
<!-- Push -->
<string name="push_info">手机或电脑连接同一个局域网,扫描 QR Code 或浏览器输入地址\n<xliff:g name="name">%s</xliff:g></string>
<!-- Dialog -->
<string name="dialog_config_info">手机或电脑连接同一个局域网\n扫描 QR Code 或浏览器输入地址\n<xliff:g name="name">%s</xliff:g></string>
</resources>

@ -22,7 +22,4 @@
<!-- Push -->
<string name="push_info">手機或電腦連接同一個區域網路,掃描 QR Code 或瀏覽器輸入網址\n<xliff:g name="name">%s</xliff:g></string>
<!-- Dialog -->
<string name="dialog_config_info">手機或電腦連接同一個區域網路\n掃描 QR Code 或瀏覽器輸入網址\n<xliff:g name="name">%s</xliff:g></string>
</resources>

@ -1,4 +1,4 @@
<resources xmlns:xliff="http://schemas.android.com/apk/res-auto">
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="http://schemas.android.com/apk/res-auto" tools:ignore="MissingTranslation">
<!-- Home -->
<string name="home_vod">Vod</string>
@ -22,7 +22,4 @@
<!-- Push -->
<string name="push_info">Connect phone or pc to LAN and scan QR Code or enter the URL in browser\n<xliff:g name="name">%s</xliff:g></string>
<!-- Dialog -->
<string name="dialog_config_info">Connect phone or pc to LAN and Scan QR Code or enter the URL in browser\n<xliff:g name="name">%s</xliff:g></string>
</resources>

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

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

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="24dp">
<TextView
android:id="@+id/version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:letterSpacing="0.02"
android:textColor="@color/grey_900"
android:textSize="18sp"
tools:text="@string/update_version" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:background="@color/grey_300" />
<TextView
android:id="@+id/desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:letterSpacing="0.02"
android:lineSpacingExtra="8dp"
android:textColor="@color/grey_900"
android:textSize="16sp"
tools:text="1. 新增 ffmpeg 音頻軟解\n2. 詳情頁新增分詞快搜\n3. 修復搜尋閃退問題\n4. 設定支援渲染切換" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/confirm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_weight="1"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:text="@string/update_confirm"
android:textColor="@color/white" />
<TextView
android:id="@+id/cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:text="@string/dialog_negative"
android:textColor="@color/white" />
</LinearLayout>
</LinearLayout>

@ -59,6 +59,10 @@
<string name="error_episode">暂无播放数据</string>
<string name="error_empty">找不到数据</string>
<!-- Update -->
<string name="update_version">发现新版本 <xliff:g name="name">%s</xliff:g></string>
<string name="update_confirm">更新</string>
<!-- Crash -->
<string name="crash_info">发生意外错误\n抱歉给您带来不便</string>
<string name="crash_restart">重新启动</string>

@ -59,6 +59,10 @@
<string name="error_episode">暫無播放資料</string>
<string name="error_empty">找不到資料</string>
<!-- Update -->
<string name="update_version">發現新版本 <xliff:g name="name">%s</xliff:g></string>
<string name="update_confirm">更新</string>
<!-- Crash -->
<string name="crash_info">發生意外錯誤\n抱歉給您帶來不便</string>
<string name="crash_restart">重新啟動</string>

@ -59,6 +59,10 @@
<string name="error_episode">No episode data</string>
<string name="error_empty">Not found</string>
<!-- Update -->
<string name="update_version">New version <xliff:g name="name">%s</xliff:g></string>
<string name="update_confirm">Update</string>
<!-- Crash -->
<string name="crash_info">An unexpected error occurred.\nSorry for the inconvenience.</string>
<string name="crash_restart">Restart app</string>

Loading…
Cancel
Save