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 7f150f942..6d1de3be6 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 @@ -3,7 +3,6 @@ package com.fongmi.android.tv.ui.activity; import android.Manifest; import android.app.Activity; import android.content.Intent; -import android.util.Base64; import android.view.View; import androidx.viewbinding.ViewBinding; 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 4ee5cf4c0..5f906e0c5 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 @@ -1,5 +1,6 @@ package com.fongmi.android.tv.ui.activity; +import android.Manifest; import android.app.Activity; import android.content.Intent; import android.view.View; @@ -11,8 +12,10 @@ import com.fongmi.android.tv.R; import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.databinding.ActivitySettingCustomBinding; import com.fongmi.android.tv.event.RefreshEvent; +import com.fongmi.android.tv.impl.CacheDirCallback; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.dialog.ButtonsDialog; +import com.fongmi.android.tv.ui.dialog.CacheDirDialog; import com.fongmi.android.tv.ui.dialog.DisplayDialog; import com.fongmi.android.tv.ui.dialog.LanguageDialog; import com.fongmi.android.tv.ui.dialog.MenuKeyDialog; @@ -20,10 +23,11 @@ import com.fongmi.android.tv.ui.dialog.X5WebViewDialog; import com.fongmi.android.tv.utils.ResUtil; import com.github.catvod.utils.Shell; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import com.permissionx.guolindev.PermissionX; import com.tencent.smtt.sdk.QbSdk; import java.util.Locale; -public class SettingCustomActivity extends BaseActivity { +public class SettingCustomActivity extends BaseActivity implements CacheDirCallback { private ActivitySettingCustomBinding mBinding; private String[] quality; @@ -63,6 +67,7 @@ public class SettingCustomActivity extends BaseActivity { mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch())); mBinding.homeUIText.setText((homeUI = ResUtil.getStringArray(R.array.select_home_ui))[Setting.getHomeUI()]); mBinding.homeHistoryText.setText(getSwitch(Setting.isHomeHistory())); + mBinding.cacheDirText.setText(Setting.getThunderCacheDir()); mBinding.removeAdText.setText(getSwitch(Setting.isRemoveAd())); mBinding.languageText.setText((ResUtil.getStringArray(R.array.select_language))[Setting.getLanguage()]); mBinding.parseWebviewText.setText((parseWebview = ResUtil.getStringArray(R.array.select_parse_webview))[Setting.getParseWebView()]); @@ -90,8 +95,8 @@ public class SettingCustomActivity extends BaseActivity { mBinding.setLanguage.setOnClickListener(this::setLanguage); mBinding.parseWebview.setOnClickListener(this::setParseWebview); mBinding.configCache.setOnClickListener(this::setConfigCache); + mBinding.cacheDir.setOnClickListener(this::setCacheDir); mBinding.reset.setOnClickListener(this::onReset); - } private void setQuality(View view) { @@ -191,6 +196,14 @@ public class SettingCustomActivity extends BaseActivity { mBinding.removeAdText.setText(getSwitch(Setting.isRemoveAd())); } + private void setCacheDir(View view) { + PermissionX.init(this).permissions(Manifest.permission.WRITE_EXTERNAL_STORAGE).request((allGranted, grantedList, deniedList) -> { + if (allGranted) { + CacheDirDialog.create(this).show(); + } + }); + } + private void setLanguage(View view) { LanguageDialog.create(this).show(); } @@ -223,4 +236,10 @@ public class SettingCustomActivity extends BaseActivity { }).start(); } + @Override + public void setCacheDir(String dir) { + Setting.putThunderCacheDir(dir); + mBinding.cacheDirText.setText(dir); + } + } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/CacheDirAdapter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/CacheDirAdapter.java new file mode 100644 index 000000000..c07f550c8 --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/CacheDirAdapter.java @@ -0,0 +1,60 @@ +package com.fongmi.android.tv.ui.adapter; + +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.fongmi.android.tv.Setting; +import com.fongmi.android.tv.databinding.AdapterCacheDirBinding; + +import java.util.List; + +public class CacheDirAdapter extends RecyclerView.Adapter { + + private final CacheDirAdapter.OnClickListener mListener; + private List mItems; + + public CacheDirAdapter(OnClickListener listener, List items) { + this.mListener = listener; + this.mItems = items; + } + + public interface OnClickListener { + + void onItemClick(String path); + + } + + @Override + public int getItemCount() { + return mItems.size(); + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new ViewHolder(AdapterCacheDirBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + String item = mItems.get(position); + boolean selected = Setting.getThunderCacheDir().equals(item); + holder.binding.text.setText(item); + holder.binding.text.setSelected(selected); + holder.binding.text.setActivated(selected); + holder.binding.text.setOnClickListener(v -> mListener.onItemClick(item)); + } + + public static class ViewHolder extends RecyclerView.ViewHolder { + + private final AdapterCacheDirBinding binding; + + public ViewHolder(@NonNull AdapterCacheDirBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } +} diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/CacheDirDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/CacheDirDialog.java new file mode 100644 index 000000000..8c945c066 --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/CacheDirDialog.java @@ -0,0 +1,89 @@ +package com.fongmi.android.tv.ui.dialog; + +import android.app.Activity; +import android.view.LayoutInflater; +import android.view.WindowManager; + +import androidx.appcompat.app.AlertDialog; +import androidx.recyclerview.widget.GridLayoutManager; + +import com.fongmi.android.tv.Setting; +import com.fongmi.android.tv.databinding.DialogCacheDirBinding; +import com.fongmi.android.tv.impl.CacheDirCallback; +import com.fongmi.android.tv.ui.adapter.CacheDirAdapter; +import com.fongmi.android.tv.ui.custom.SpaceItemDecoration; +import com.fongmi.android.tv.utils.ResUtil; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class CacheDirDialog implements CacheDirAdapter.OnClickListener { + private final DialogCacheDirBinding binding; + private final CacheDirAdapter adapter; + private final AlertDialog dialog; + private final CacheDirCallback callback; + private List mItems; + private int position; + public static CacheDirDialog create(Activity activity) { + return new CacheDirDialog(activity); + } + + public CacheDirDialog(Activity activity) { + mItems = new ArrayList<>(); + mItems.add(activity.getCacheDir().getAbsolutePath()); + for(File dir : activity.getExternalCacheDirs()) mItems.add(dir.getAbsolutePath()); + String cacheDir = Setting.getThunderCacheDir(); + position = 0; + for(int i=0; i binding.recycler.scrollToPosition(position)); + + } + + private void setDialog() { + WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); + params.width = (int) (ResUtil.getScreenWidth() * getWidth()); + dialog.getWindow().setAttributes(params); + dialog.getWindow().setDimAmount(0); + dialog.show(); + } + + @Override + public void onItemClick(String path) { + callback.setCacheDir(path); + dialog.dismiss(); + } + +} diff --git a/app/src/leanback/res/layout/activity_setting_custom.xml b/app/src/leanback/res/layout/activity_setting_custom.xml index 8953447d7..f99e03341 100644 --- a/app/src/leanback/res/layout/activity_setting_custom.xml +++ b/app/src/leanback/res/layout/activity_setting_custom.xml @@ -537,7 +537,7 @@ android:orientation="horizontal"> + android:singleLine="true" + tools:text="/dir" /> + + @@ -595,9 +605,10 @@ android:orientation="horizontal"> + + + + + + diff --git a/app/src/leanback/res/layout/adapter_cache_dir.xml b/app/src/leanback/res/layout/adapter_cache_dir.xml new file mode 100644 index 000000000..dc351b4ef --- /dev/null +++ b/app/src/leanback/res/layout/adapter_cache_dir.xml @@ -0,0 +1,22 @@ + + + + + + \ No newline at end of file diff --git a/app/src/leanback/res/layout/dialog_cache_dir.xml b/app/src/leanback/res/layout/dialog_cache_dir.xml new file mode 100644 index 000000000..ea4bf32b4 --- /dev/null +++ b/app/src/leanback/res/layout/dialog_cache_dir.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/android/tv/Setting.java b/app/src/main/java/com/fongmi/android/tv/Setting.java index 6f4a5a3fa..f9e4b564c 100644 --- a/app/src/main/java/com/fongmi/android/tv/Setting.java +++ b/app/src/main/java/com/fongmi/android/tv/Setting.java @@ -502,4 +502,12 @@ public class Setting { Prefers.put("remove_ad", remove); } + public static String getThunderCacheDir() { + return Prefers.getString("thunder_cache_dir", ""); + } + + public static void putThunderCacheDir(String dir) { + Prefers.put("thunder_cache_dir", dir); + } + } diff --git a/app/src/main/java/com/fongmi/android/tv/impl/CacheDirCallback.java b/app/src/main/java/com/fongmi/android/tv/impl/CacheDirCallback.java new file mode 100644 index 000000000..d73b9a18f --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/impl/CacheDirCallback.java @@ -0,0 +1,6 @@ +package com.fongmi.android.tv.impl; + +public interface CacheDirCallback { + + void setCacheDir(String dir); +} diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 3201e84a1..faaa04711 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -76,6 +76,7 @@ 弹幕设置 个性设置 接口缓存 + 迅雷缓存 重置App 图片品质 图片尺寸 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 30d9292db..af89bb2f5 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -76,6 +76,7 @@ 彈幕設定 個性設定 接口暫存 + 迅雷暫存 重置App 圖片品質 圖片尺寸 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8b4107b2f..c4ab9337e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -76,6 +76,7 @@ Danmu setting Custom setting Config cache + Thunder cache Reset app Image quality Image size diff --git a/catvod/src/main/java/com/github/catvod/utils/Path.java b/catvod/src/main/java/com/github/catvod/utils/Path.java index 82625aad5..414da613a 100644 --- a/catvod/src/main/java/com/github/catvod/utils/Path.java +++ b/catvod/src/main/java/com/github/catvod/utils/Path.java @@ -40,6 +40,15 @@ public class Path { return Init.context().getCacheDir(); } + public static File thunderCache() { + File internal = Init.context().getCacheDir(); + String dir = Prefers.getString("thunder_cache_dir", internal.getAbsolutePath()); + if (dir.equals(internal.getAbsolutePath())) return internal; + File cache = new File(dir); + if (!cache.exists()) return internal; + return cache; + } + public static File files() { return Init.context().getFilesDir(); } @@ -85,7 +94,7 @@ public class Path { } public static File thunder() { - return mkdir(new File(cache() + File.separator + "thunder")); + return mkdir(new File(thunderCache() + File.separator + "thunder")); } public static File restore() {