diff --git a/app/build.gradle b/app/build.gradle
index 4d7be74be..41cccdc65 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,7 +11,7 @@ android {
minSdk 21
targetSdk 28
versionCode 233
- versionName "0507"
+ versionName "0510"
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
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 bd6870aa9..00e6753f4 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
@@ -392,7 +392,8 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
FileUtil.clearCache(new Callback() {
@Override
public void success() {
- setConfig(VodConfig.get().getConfig().json("").save(), ResUtil.getString(R.string.config_refreshed));
+ Config config = VodConfig.get().getConfig().json("").save();
+ if (!config.isEmpty()) setConfig(config, ResUtil.getString(R.string.config_refreshed));
}
});
}
diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java
index 2900fcd03..72903ea5c 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java
@@ -83,6 +83,7 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit
mBinding.dohText.setText(getDohList()[getDohIndex()]);
mBinding.versionText.setText(BuildConfig.VERSION_NAME);
mBinding.proxyText.setText(UrlUtil.scheme(Setting.getProxy()));
+ mBinding.aboutText.setText(BuildConfig.FLAVOR_mode + "-" + BuildConfig.FLAVOR_api + "-" + BuildConfig.FLAVOR_abi);
mBinding.configCacheText.setText((configCache = ResUtil.getStringArray(R.array.select_config_cache))[Setting.getConfigCache()]);
setCacheText();
}
diff --git a/app/src/leanback/res/layout/activity_setting.xml b/app/src/leanback/res/layout/activity_setting.xml
index a684e2c82..297e495c7 100644
--- a/app/src/leanback/res/layout/activity_setting.xml
+++ b/app/src/leanback/res/layout/activity_setting.xml
@@ -508,5 +508,41 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
index 00f7008fe..7de843246 100644
--- a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
+++ b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
@@ -27,6 +27,7 @@ import androidx.media3.exoplayer.DefaultRenderersFactory;
import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.LoadControl;
import androidx.media3.exoplayer.RenderersFactory;
+import androidx.media3.exoplayer.source.ConcatenatingMediaSource2;
import androidx.media3.exoplayer.source.DefaultMediaSourceFactory;
import androidx.media3.exoplayer.source.MediaSource;
import androidx.media3.exoplayer.trackselection.DefaultTrackSelector;
@@ -121,7 +122,25 @@ public class ExoUtil {
return null;
}
+ private static MediaSource getConcatSource(Result result, Sub sub, int errorCode) {
+ String url = result.getRealUrl();
+ String[] urls = url.split("\\*\\*\\*");
+ ConcatenatingMediaSource2.Builder concatenatingMediaSource = new ConcatenatingMediaSource2.Builder();
+ for(String one : urls) {
+ if (TextUtils.isEmpty(one)) continue;
+ String[] oneInfo = one.split("\\|\\|\\|");
+ if (oneInfo.length < 2) continue;
+ String oneUrl = oneInfo[0];
+ String oneDuration = oneInfo[1];
+ long duration = Long.parseLong(oneDuration);
+ concatenatingMediaSource.add(getSource(result.getHeaders(), oneUrl, result.getFormat(), result.getSubs(), sub, null, errorCode), duration);
+ }
+ return concatenatingMediaSource.build();
+ }
+
public static MediaSource getSource(Result result, Sub sub, int errorCode) {
+ String url = result.getRealUrl();
+ if (url.contains("***") && url.contains("|||")) return getConcatSource(result, sub, errorCode);
return getSource(result.getHeaders(), result.getRealUrl(), result.getFormat(), result.getSubs(), sub, null, errorCode);
}
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index ad0c89ac0..1b7f7cb31 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -87,7 +87,7 @@
首页源锁定
无痕模式
小窗返回键
- 首页显示站源名
+ 首页显示站源
首页UI
首页按钮
DoH
@@ -96,6 +96,7 @@
备份
自动
版本
+ 关于
权限
关闭
开启
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 42b64179e..4897a7e3f 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -87,7 +87,7 @@
首頁源鎖定
無痕模式
小窗返回鍵
- 首頁显示站源名
+ 首頁显示站源
首頁UI
首頁按鈕
DoH
@@ -96,6 +96,7 @@
備份
自動
版本
+ 關於
權限
關閉
開啟
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 87dc0f09a..5f71105a9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -96,6 +96,7 @@
Backup
Auto
Version
+ About
Permission
Off
On
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 600e42cf0..2a6ec3a66 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
@@ -8,6 +8,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewbinding.ViewBinding;
+import com.fongmi.android.tv.App;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.Setting;
import com.fongmi.android.tv.databinding.FragmentSettingCustomBinding;
@@ -15,6 +16,7 @@ import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.ui.base.BaseFragment;
import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.Util;
+import com.github.catvod.utils.Shell;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.Locale;
@@ -23,8 +25,8 @@ public class SettingCustomFragment extends BaseFragment {
private FragmentSettingCustomBinding mBinding;
private String[] size;
-
private String[] lang;
+ private String[] configCache;
public static SettingCustomFragment newInstance() {
return new SettingCustomFragment();
@@ -48,6 +50,7 @@ public class SettingCustomFragment extends BaseFragment {
mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch()));
mBinding.homeDisplayNameText.setText(getSwitch(Setting.isHomeDisplayName()));
mBinding.languageText.setText((lang = ResUtil.getStringArray(R.array.select_language))[Setting.getLanguage()]);
+ mBinding.configCacheText.setText((configCache = ResUtil.getStringArray(R.array.select_config_cache))[Setting.getConfigCache()]);
}
@Override
@@ -61,6 +64,8 @@ public class SettingCustomFragment extends BaseFragment {
mBinding.aggregatedSearch.setOnClickListener(this::setAggregatedSearch);
mBinding.homeDisplayName.setOnClickListener(this::setHomeDisplayName);
mBinding.language.setOnClickListener(this::setLanguage);
+ mBinding.configCache.setOnClickListener(this::setConfigCache);
+ mBinding.reset.setOnClickListener(this::onReset);
}
@@ -126,4 +131,20 @@ public class SettingCustomFragment extends BaseFragment {
}).show();
}
+ private void setConfigCache(View view) {
+ int index = Setting.getConfigCache();
+ Setting.putConfigCache(index = index == configCache.length - 1 ? 0 : ++index);
+ mBinding.configCacheText.setText(configCache[index]);
+ }
+
+ private void onReset(View view) {
+ new MaterialAlertDialogBuilder(getActivity()).setTitle(R.string.dialog_reset_app).setMessage(R.string.dialog_reset_app_data).setNegativeButton(R.string.dialog_negative, null).setPositiveButton(R.string.dialog_positive, (dialog, which) -> reset()).show();
+ }
+
+ private void reset() {
+ new Thread(() -> {
+ Shell.exec("pm clear " + App.get().getPackageName());
+ }).start();
+ }
+
}
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java
index ec2e86708..99dcb8ae9 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java
@@ -11,7 +11,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewbinding.ViewBinding;
-import com.fongmi.android.tv.App;
import com.fongmi.android.tv.BuildConfig;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.Setting;
@@ -41,12 +40,10 @@ import com.fongmi.android.tv.ui.dialog.SiteDialog;
import com.fongmi.android.tv.utils.FileChooser;
import com.fongmi.android.tv.utils.FileUtil;
import com.fongmi.android.tv.utils.Notify;
-import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.UrlUtil;
import com.github.catvod.bean.Doh;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Path;
-import com.github.catvod.utils.Shell;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.permissionx.guolindev.PermissionX;
@@ -57,7 +54,6 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
private FragmentSettingBinding mBinding;
private int type;
- private String[] configCache;
public static SettingFragment newInstance() {
return new SettingFragment();
@@ -90,8 +86,8 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
mBinding.backupText.setText(AppDatabase.getDate());
mBinding.dohText.setText(getDohList()[getDohIndex()]);
mBinding.versionText.setText(BuildConfig.VERSION_NAME);
+ mBinding.aboutText.setText(BuildConfig.FLAVOR_mode + "-" + BuildConfig.FLAVOR_api + "-" + BuildConfig.FLAVOR_abi);
mBinding.proxyText.setText(UrlUtil.scheme(Setting.getProxy()));
- mBinding.configCacheText.setText((configCache = ResUtil.getStringArray(R.array.select_config_cache))[Setting.getConfigCache()]);
setCacheText();
}
@@ -128,8 +124,7 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
mBinding.wallRefresh.setOnClickListener(this::setWallRefresh);
mBinding.doh.setOnClickListener(this::setDoh);
mBinding.custom.setOnClickListener(this::onCustom);
- mBinding.configCache.setOnClickListener(this::setConfigCache);
- mBinding.reset.setOnClickListener(this::onReset);
+ mBinding.about.setOnClickListener(this::onAbout);
}
@Override
@@ -267,20 +262,8 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
getRoot().change(3);
}
- private void setConfigCache(View view) {
- int index = Setting.getConfigCache();
- Setting.putConfigCache(index = index == configCache.length - 1 ? 0 : ++index);
- mBinding.configCacheText.setText(configCache[index]);
- }
-
- private void onReset(View view) {
- new MaterialAlertDialogBuilder(getActivity()).setTitle(R.string.dialog_reset_app).setMessage(R.string.dialog_reset_app_data).setNegativeButton(R.string.dialog_negative, null).setPositiveButton(R.string.dialog_positive, (dialog, which) -> reset()).show();
- }
-
- private void reset() {
- new Thread(() -> {
- Shell.exec("pm clear " + App.get().getPackageName());
- }).start();
+ private void onAbout(View view) {
+ mBinding.aboutText.setText(BuildConfig.FLAVOR_mode + "-" + BuildConfig.FLAVOR_api + "-" + BuildConfig.FLAVOR_abi);
}
private void onVersion(View view) {
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 358674750..36be17359 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
@@ -239,7 +239,8 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal
FileUtil.clearCache(new Callback() {
@Override
public void success() {
- setConfig(VodConfig.get().getConfig().json("").save(), ResUtil.getString(R.string.config_refreshed));
+ Config config = VodConfig.get().getConfig().json("").save();
+ if (!config.isEmpty()) setConfig(config, ResUtil.getString(R.string.config_refreshed));
}
});
return true;
diff --git a/app/src/mobile/res/layout/fragment_setting.xml b/app/src/mobile/res/layout/fragment_setting.xml
index 4c3098df4..d046b8dca 100644
--- a/app/src/mobile/res/layout/fragment_setting.xml
+++ b/app/src/mobile/res/layout/fragment_setting.xml
@@ -248,7 +248,7 @@
-
-
-
-
-
-
+ tools:text="Google" />
+ tools:text="http" />
+ tools:text="1.0 MB" />
+ tools:text="20231103" />
+ tools:text="1.2.1" />
+ tools:text="about" />
diff --git a/app/src/mobile/res/layout/fragment_setting_custom.xml b/app/src/mobile/res/layout/fragment_setting_custom.xml
index 957008371..5c3d90d21 100644
--- a/app/src/mobile/res/layout/fragment_setting_custom.xml
+++ b/app/src/mobile/res/layout/fragment_setting_custom.xml
@@ -231,6 +231,52 @@
tools:text="中文" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file