diff --git a/app/build.gradle b/app/build.gradle index b150df7e9..e6e909126 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { minSdk 21 targetSdk 28 versionCode 235 - versionName "2.3.5" + versionName "0601" javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] @@ -132,6 +132,8 @@ dependencies { implementation 'com.google.zxing:core:3.3.0' implementation 'com.guolindev.permissionx:permissionx:1.7.1' implementation 'com.hierynomus:smbj:0.13.0' + implementation 'com.tencent.tbs:tbssdk:44286' + implementation 'com.github.YarikSOffice:lingver:1.3.0' implementation 'org.chromium.net:cronet-embedded:76.3809.111' implementation 'org.eclipse.jetty:jetty-client:8.1.21.v20160908' implementation 'org.eclipse.jetty:jetty-server:8.1.21.v20160908' @@ -139,7 +141,6 @@ dependencies { implementation 'org.fourthline.cling:cling-core:2.1.1' implementation 'org.fourthline.cling:cling-support:2.1.1' implementation 'org.greenrobot:eventbus:3.3.1' - implementation 'com.tencent.tbs:tbssdk:44286' implementation('org.simpleframework:simple-xml:2.7.1') { exclude group: 'stax', module: 'stax-api' exclude group: 'xpp3', module: 'xpp3' } implementation(ext: 'aar', name: 'dlna-core', group: 'fongmi', version: 'release') leanbackImplementation(ext: 'aar', name: 'dlna-dmr', group: 'fongmi', version: 'release') 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 8ef6318c9..179936335 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 @@ -329,7 +329,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen @Override public void error(String msg) { - if (getHomeFragment().init) getHomeFragment().mBinding.progressLayout.showContent(); + if (getHomeFragment().inited) getHomeFragment().mBinding.progressLayout.showContent(); else App.post(() -> getHomeFragment().mBinding.progressLayout.showContent(), 1000); mResult = Result.empty(); Notify.show(msg); @@ -471,11 +471,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen } private void setLogo() { - try { - Glide.with(this).load(UrlUtil.convert(VodConfig.get().getConfig().getLogo())).circleCrop().override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).listener(getListener()).into(mBinding.logo); - } catch (Exception e) { - e.printStackTrace(); - } + Glide.with(this).load(UrlUtil.convert(VodConfig.get().getConfig().getLogo())).circleCrop().override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).listener(getListener()).into(mBinding.logo); } private RequestListener getListener() { @@ -545,9 +541,9 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen protected void onBackPress() { if (isVisible(mBinding.recycler) && mBinding.recycler.getSelectedPosition() != 0) { mBinding.recycler.scrollToPosition(0); - } else if (mPageAdapter != null && getHomeFragment().init && getHomeFragment().mBinding.progressLayout.isProgress()) { + } else if (mPageAdapter != null && getHomeFragment().inited && getHomeFragment().mBinding.progressLayout.isProgress()) { getHomeFragment().mBinding.progressLayout.showContent(); - } else if (mPageAdapter != null && getHomeFragment().init && getHomeFragment().mPresenter != null && getHomeFragment().mPresenter.isDelete()) { + } else if (mPageAdapter != null && getHomeFragment().inited && getHomeFragment().mPresenter != null && getHomeFragment().mPresenter.isDelete()) { getHomeFragment().setHistoryDelete(false); } else if (getHomeFragment().canBack()) { getHomeFragment().goBack(); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java index 0ed4f4337..119542300 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java @@ -23,6 +23,7 @@ import com.fongmi.android.tv.ui.dialog.DisplayDialog; import com.fongmi.android.tv.ui.dialog.LanguageDialog; import com.fongmi.android.tv.ui.dialog.MenuKeyDialog; import com.fongmi.android.tv.ui.dialog.X5WebViewDialog; +import com.fongmi.android.tv.utils.LanguageUtil; import com.fongmi.android.tv.utils.ResUtil; import com.fongmi.android.tv.utils.Util; import com.github.catvod.utils.Shell; @@ -240,6 +241,7 @@ public class SettingCustomActivity extends BaseActivity implements MenuKeyCallba @Override public void setLanguage(int lang) { Setting.putLanguage(lang); + LanguageUtil.setLocale(LanguageUtil.getLocale(Setting.getLanguage())); mBinding.languageText.setText((ResUtil.getStringArray(R.array.select_language))[Setting.getLanguage()]); Util.restartApp(this); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/base/BaseActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/base/BaseActivity.java index 3847eddcd..4dda114d0 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/base/BaseActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/base/BaseActivity.java @@ -16,16 +16,14 @@ import androidx.recyclerview.widget.RecyclerView; import androidx.viewbinding.ViewBinding; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.target.CustomTarget; import com.bumptech.glide.request.transition.Transition; +import com.bumptech.glide.signature.ObjectKey; import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.utils.FileUtil; -import com.fongmi.android.tv.utils.LanguageUtil; import com.fongmi.android.tv.utils.ResUtil; import com.fongmi.android.tv.utils.Util; @@ -116,7 +114,7 @@ public abstract class BaseActivity extends AppCompatActivity { } private void loadWall(File file) { - Glide.with(App.get()).load(file).centerCrop().skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE).apply(new RequestOptions().override(ResUtil.getScreenWidth(), ResUtil.getScreenHeight())).into(new CustomTarget() { + Glide.with(App.get()).load(file).centerCrop().override(ResUtil.getScreenWidth(), ResUtil.getScreenHeight()).signature(new ObjectKey(com.github.catvod.utils.Util.md5(file))).into(new CustomTarget() { @Override public void onResourceReady(@NonNull Drawable drawable, @Nullable Transition transition) { getWindow().setBackgroundDrawable(drawable); @@ -135,7 +133,6 @@ public abstract class BaseActivity extends AppCompatActivity { private Resources hackResources(Resources resources) { try { - LanguageUtil.setLanguage(resources, Setting.getLanguage()); AutoSizeCompat.autoConvertDensityOfGlobal(resources); return resources; } catch (Exception ignored) { diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/HomeFragment.java b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/HomeFragment.java index 20c78db37..60154c80e 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/HomeFragment.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/HomeFragment.java @@ -58,7 +58,7 @@ public class HomeFragment extends BaseFragment implements VodPresenter.OnClickLi private ArrayObjectAdapter mHistoryAdapter; public HistoryPresenter mPresenter; private ArrayObjectAdapter mAdapter; - public boolean init; + public boolean inited; private int homeUI; private String button; @@ -77,7 +77,7 @@ public class HomeFragment extends BaseFragment implements VodPresenter.OnClickLi setRecyclerView(); setAdapter(); initEvent(); - init = true; + inited = true; } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/App.java b/app/src/main/java/com/fongmi/android/tv/App.java index 78164c771..51e7bdba6 100644 --- a/app/src/main/java/com/fongmi/android/tv/App.java +++ b/app/src/main/java/com/fongmi/android/tv/App.java @@ -4,7 +4,6 @@ import android.app.Activity; import android.app.Application; import android.content.Context; import android.content.pm.PackageManager; -import android.content.res.Resources; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -107,6 +106,7 @@ public class App extends Application { public void onCreate() { super.onCreate(); Notify.createChannel(); + LanguageUtil.init(this); Logger.addLogAdapter(getLogAdapter()); OkHttp.get().setProxy(Setting.getProxy()); OkHttp.get().setDoh(Doh.objectFrom(Setting.getDoh())); @@ -149,13 +149,6 @@ public class App extends Application { } - @Override - public Resources getResources() { - Resources resources = super.getResources(); - LanguageUtil.setLanguage(resources, Setting.getLanguage()); - return resources; - } - @Override public PackageManager getPackageManager() { if (!hook) return getBaseContext().getPackageManager(); diff --git a/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java b/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java index 66c2cb093..40e334c80 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java @@ -1,5 +1,7 @@ package com.fongmi.android.tv.player; +import android.text.TextUtils; + import com.fongmi.android.tv.App; import com.fongmi.android.tv.Constant; import com.fongmi.android.tv.api.config.VodConfig; @@ -61,8 +63,9 @@ public class ParseJob implements ParseCallback { } private String getClick(Result result) { - if (result.getClick().length() > 0) return result.getClick(); - return VodConfig.get().getSite(result.getKey()).getClick(); + String click = VodConfig.get().getSite(result.getKey()).getClick(); + if (!TextUtils.isEmpty(click)) return click; + return result.getClick(); } private void execute(Result result) { diff --git a/app/src/main/java/com/fongmi/android/tv/utils/LanguageUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/LanguageUtil.java index bcbe9e0ef..85db43d22 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/LanguageUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/LanguageUtil.java @@ -1,22 +1,29 @@ package com.fongmi.android.tv.utils; -import android.content.res.Resources; +import android.app.Application; +import com.fongmi.android.tv.App; +import com.fongmi.android.tv.Setting; +import com.yariksoffice.lingver.Lingver; import java.util.Locale; public class LanguageUtil { - public static void setLanguage(Resources resources, int lang) { - resources.getConfiguration().locale = getLocale(lang); - resources.updateConfiguration(resources.getConfiguration(), resources.getDisplayMetrics()); + + public static void init(Application application) { + Lingver.init(application, getLocale(Setting.getLanguage())); + } + + public static void setLocale(Locale locale) { + Lingver.getInstance().setLocale(App.get(), locale); } public static int locale() { if (!Locale.getDefault().getLanguage().equals("zh")) return 0; - if (Locale.getDefault().getCountry().equals("TW")) return 2; - return 1; + if (Locale.getDefault().getCountry().equals("CN")) return 1; + return 2; } - private static Locale getLocale(int lang) { + public static Locale getLocale(int lang) { if (lang == 1) return Locale.SIMPLIFIED_CHINESE; else if (lang == 2) return Locale.TRADITIONAL_CHINESE; else return Locale.ENGLISH; diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java index bc6f3bee3..cae4612a7 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java @@ -2,7 +2,6 @@ package com.fongmi.android.tv.ui.base; import android.app.Activity; import android.content.res.Configuration; -import android.content.res.Resources; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Build; @@ -19,17 +18,15 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.viewbinding.ViewBinding; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.target.CustomTarget; import com.bumptech.glide.request.transition.Transition; +import com.bumptech.glide.signature.ObjectKey; import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; import com.fongmi.android.tv.Setting; -import com.fongmi.android.tv.api.config.WallConfig; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.utils.FileUtil; -import com.fongmi.android.tv.utils.LanguageUtil; import com.fongmi.android.tv.utils.ResUtil; import org.greenrobot.eventbus.EventBus; @@ -139,22 +136,8 @@ public abstract class BaseActivity extends AppCompatActivity { } } - private Resources hackResources(Resources resources) { - try { - LanguageUtil.setLanguage(resources, Setting.getLanguage()); - return resources; - } catch (Exception ignored) { - return resources; - } - } - - @Override - public Resources getResources() { - return hackResources(super.getResources()); - } - private void loadWall(File file) { - Glide.with(App.get()).load(file).centerCrop().skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE).apply(new RequestOptions().override(ResUtil.getScreenWidth(), ResUtil.getScreenHeight())).into(new CustomTarget() { + Glide.with(App.get()).load(file).centerCrop().signature(new ObjectKey(file.lastModified())).apply(new RequestOptions().override(ResUtil.getScreenWidth(), ResUtil.getScreenHeight())).into(new CustomTarget() { @Override public void onResourceReady(@NonNull Drawable drawable, @Nullable Transition transition) { getWindow().setBackgroundDrawable(drawable); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java index 6beebcd39..9e103adc3 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java @@ -14,6 +14,7 @@ import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.databinding.FragmentSettingCustomBinding; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.ui.base.BaseFragment; +import com.fongmi.android.tv.utils.LanguageUtil; import com.fongmi.android.tv.utils.ResUtil; import com.fongmi.android.tv.utils.Util; import com.github.catvod.utils.Shell; @@ -133,6 +134,7 @@ public class SettingCustomFragment extends BaseFragment { new MaterialAlertDialogBuilder(getActivity()).setTitle(R.string.setting_language).setNegativeButton(R.string.dialog_negative, null).setSingleChoiceItems(lang, Setting.getLanguage(), (dialog, which) -> { mBinding.languageText.setText(lang[which]); Setting.putLanguage(which); + LanguageUtil.setLocale(LanguageUtil.getLocale(Setting.getLanguage())); dialog.dismiss(); Util.restartApp(getActivity()); }).show(); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index b7318ec9e..4be5d22f3 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -294,11 +294,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal } private void setLogo() { - try { - Glide.with(this).load(UrlUtil.convert(VodConfig.get().getConfig().getLogo())).circleCrop().override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).error(R.drawable.ic_logo).listener(getListener()).into(mBinding.logo); - } catch (Exception e) { - e.printStackTrace(); - } + Glide.with(this).load(UrlUtil.convert(VodConfig.get().getConfig().getLogo())).circleCrop().override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).error(R.drawable.ic_logo).listener(getListener()).into(mBinding.logo); } private RequestListener getListener() { diff --git a/catvod/src/main/java/com/github/catvod/utils/Util.java b/catvod/src/main/java/com/github/catvod/utils/Util.java index 56425987a..53978bf6e 100644 --- a/catvod/src/main/java/com/github/catvod/utils/Util.java +++ b/catvod/src/main/java/com/github/catvod/utils/Util.java @@ -75,12 +75,11 @@ public class Util { public static String md5(File file) { try { - if (!file.exists()) return ""; MessageDigest digest = MessageDigest.getInstance("MD5"); FileInputStream fis = new FileInputStream(file); - byte[] byteArray = new byte[1024]; + byte[] bytes = new byte[4096]; int count; - while ((count = fis.read(byteArray)) != -1) digest.update(byteArray, 0, count); + while ((count = fis.read(bytes)) != -1) digest.update(bytes, 0, count); fis.close(); StringBuilder sb = new StringBuilder(); for (byte b : digest.digest()) sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));