diff --git a/app/build.gradle b/app/build.gradle index f20954ecc..bd7bc1415 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.fongmi.android.tv" minSdk 21 targetSdk 32 - versionCode 1 - versionName "1.0.0" + versionCode 2 + versionName "1.0.2" } productFlavors { 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 39b085614..8472ad343 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 @@ -37,6 +37,7 @@ import com.fongmi.android.tv.ui.presenter.ProgressPresenter; import com.fongmi.android.tv.ui.presenter.TitlePresenter; import com.fongmi.android.tv.ui.presenter.VodPresenter; import com.fongmi.android.tv.utils.Clock; +import com.fongmi.android.tv.utils.FileUtil; import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.ResUtil; import com.google.common.collect.Lists; @@ -70,6 +71,7 @@ public class HomeActivity extends BaseActivity implements VodPresenter.OnClickLi @Override protected void initView() { + new Thread(FileUtil::checkUpdate).start(); Clock.start(mBinding.time); Server.get().start(); Players.get().init(); 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 9c2dd9ae7..27f715b49 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 @@ -1,17 +1,31 @@ package com.fongmi.android.tv.utils; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; import android.os.Environment; +import android.text.TextUtils; +import android.util.Log; + +import androidx.core.content.FileProvider; import com.fongmi.android.tv.App; +import com.fongmi.android.tv.BuildConfig; +import com.fongmi.android.tv.net.OKHttp; + +import org.json.JSONObject; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; +import java.net.URLConnection; public class FileUtil { + private static final String TAG = FileUtil.class.getSimpleName(); + public static String getRootPath() { return Environment.getExternalStorageDirectory().getAbsolutePath(); } @@ -32,15 +46,29 @@ public class FileUtil { return getCacheFile("spider.jar"); } + public static File getApk() { + return getCacheFile("update.apk"); + } + public static File getLocal(String path) { return new File(path.replace("file:/", getRootPath())); } - public static void write(File file, byte[] data) throws Exception { + private static Uri getShareUri(File file) { + return Build.VERSION.SDK_INT < Build.VERSION_CODES.N ? Uri.fromFile(file) : FileProvider.getUriForFile(App.get(), App.get().getPackageName() + ".provider", file); + } + + private static String getMimeType(String fileName) { + String mimeType = URLConnection.guessContentTypeFromName(fileName); + return TextUtils.isEmpty(mimeType) ? "*/*" : mimeType; + } + + public static File write(File file, byte[] data) throws Exception { FileOutputStream fos = new FileOutputStream(file); fos.write(data); fos.flush(); fos.close(); + return file; } public static String read(String path) { @@ -55,4 +83,29 @@ public class FileUtil { return ""; } } + + public static void clearDir(File dir) { + if (dir == null) return; + if (dir.isDirectory()) for (File file : dir.listFiles()) clearDir(file); + if (dir.delete()) Log.d(TAG, "Deleted:" + dir.getPath()); + } + + public static void checkUpdate() { + try { + String json = OKHttp.newCall("https://github.com/FongMi/TV/raw/main/release/leanback.json").execute().body().string(); + JSONObject object = new JSONObject(json); + if (object.optInt("version") <= BuildConfig.VERSION_CODE) clearDir(getCacheDir()); + else open(write(getApk(), OKHttp.newCall(object.optString("url")).execute().body().bytes())); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static void open(File file) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.setDataAndType(getShareUri(file), FileUtil.getMimeType(file.getName())); + App.get().startActivity(intent); + } } diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml index f75952925..136e6e260 100644 --- a/app/src/main/res/xml/file_paths.xml +++ b/app/src/main/res/xml/file_paths.xml @@ -1,6 +1,7 @@ + \ No newline at end of file