Merge pull request #419 from okcaptain/dev

Dev
okjack
okcaptain 2 years ago committed by GitHub
commit 1dac40e0e1
  1. 2
      app/build.gradle
  2. 3
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  3. 1
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java
  4. 36
      app/src/leanback/res/layout/activity_setting.xml
  5. 19
      app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
  6. 3
      app/src/main/res/values-zh-rCN/strings.xml
  7. 3
      app/src/main/res/values-zh-rTW/strings.xml
  8. 1
      app/src/main/res/values/strings.xml
  9. 23
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java
  10. 25
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java
  11. 3
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java
  12. 65
      app/src/mobile/res/layout/fragment_setting.xml
  13. 46
      app/src/mobile/res/layout/fragment_setting_custom.xml

@ -11,7 +11,7 @@ android {
minSdk 21
targetSdk 28
versionCode 233
versionName "0507"
versionName "0510"
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]

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

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

@ -508,5 +508,41 @@
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/about"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_about"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/aboutText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="about" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

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

@ -87,7 +87,7 @@
<string name="setting_home_site_lock">首页源锁定</string>
<string name="setting_incognito">无痕模式</string>
<string name="setting_small_window_back_key">小窗返回键</string>
<string name="setting_home_display_name">首页显示站源</string>
<string name="setting_home_display_name">首页显示站源</string>
<string name="setting_home_ui">首页UI</string>
<string name="setting_home_buttons">首页按钮</string>
<string name="setting_doh">DoH</string>
@ -96,6 +96,7 @@
<string name="setting_backup">备份</string>
<string name="setting_backup_auto">自动</string>
<string name="setting_version">版本</string>
<string name="setting_about">关于</string>
<string name="setting_storage">权限</string>
<string name="setting_off">关闭</string>
<string name="setting_on">开启</string>

@ -87,7 +87,7 @@
<string name="setting_home_site_lock">首頁源鎖定</string>
<string name="setting_incognito">無痕模式</string>
<string name="setting_small_window_back_key">小窗返回鍵</string>
<string name="setting_home_display_name">首頁显示站源</string>
<string name="setting_home_display_name">首頁显示站源</string>
<string name="setting_home_ui">首頁UI</string>
<string name="setting_home_buttons">首頁按鈕</string>
<string name="setting_doh">DoH</string>
@ -96,6 +96,7 @@
<string name="setting_backup">備份</string>
<string name="setting_backup_auto">自動</string>
<string name="setting_version">版本</string>
<string name="setting_about">關於</string>
<string name="setting_storage">權限</string>
<string name="setting_off">關閉</string>
<string name="setting_on">開啟</string>

@ -96,6 +96,7 @@
<string name="setting_backup">Backup</string>
<string name="setting_backup_auto">Auto</string>
<string name="setting_version">Version</string>
<string name="setting_about">About</string>
<string name="setting_storage">Permission</string>
<string name="setting_off">Off</string>
<string name="setting_on">On</string>

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

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

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

@ -248,7 +248,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/configCache"
android:id="@+id/doh"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -259,40 +259,23 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_config_cache"
android:text="@string/setting_doh"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/configCacheText"
android:id="@+id/dohText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="關閉" />
</LinearLayout>
<LinearLayout
android:id="@+id/reset"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/shape_item"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/setting_reset"
android:textColor="@color/white"
android:textSize="16sp" />
tools:text="Google" />
</LinearLayout>
<LinearLayout
android:id="@+id/doh"
android:id="@+id/proxy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -303,23 +286,23 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_doh"
android:text="@string/setting_proxy"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/dohText"
android:id="@+id/proxyText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="Google" />
tools:text="http" />
</LinearLayout>
<LinearLayout
android:id="@+id/proxy"
android:id="@+id/cache"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -330,23 +313,23 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_proxy"
android:text="@string/setting_cache"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/proxyText"
android:id="@+id/cacheText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="http" />
tools:text="1.0 MB" />
</LinearLayout>
<LinearLayout
android:id="@+id/cache"
android:id="@+id/backup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -357,23 +340,23 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_cache"
android:text="@string/setting_backup"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/cacheText"
android:id="@+id/backupText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="1.0 MB" />
tools:text="20231103" />
</LinearLayout>
<LinearLayout
android:id="@+id/backup"
android:id="@+id/version"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -384,23 +367,23 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_backup"
android:text="@string/setting_version"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/backupText"
android:id="@+id/versionText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="20231103" />
tools:text="1.2.1" />
</LinearLayout>
<LinearLayout
android:id="@+id/version"
android:id="@+id/about"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -411,18 +394,18 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_version"
android:text="@string/setting_about"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/versionText"
android:id="@+id/aboutText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="1.2.1" />
tools:text="about" />
</LinearLayout>
</LinearLayout>

@ -231,6 +231,52 @@
tools:text="中文" />
</LinearLayout>
<LinearLayout
android:id="@+id/configCache"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/shape_item"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_config_cache"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/configCacheText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="關閉" />
</LinearLayout>
<LinearLayout
android:id="@+id/reset"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/shape_item"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/setting_reset"
android:textColor="@color/white"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Loading…
Cancel
Save