pull/447/head
okjack 2 years ago
parent 1e1a320dd7
commit 45103c1394
  1. 18
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java
  2. 60
      app/src/leanback/java/com/fongmi/android/tv/ui/adapter/CacheDirAdapter.java
  3. 90
      app/src/leanback/java/com/fongmi/android/tv/ui/dialog/CacheDirDialog.java
  4. 49
      app/src/leanback/res/layout/activity_setting_custom.xml
  5. 22
      app/src/leanback/res/layout/adapter_cache_dir.xml
  6. 18
      app/src/leanback/res/layout/dialog_cache_dir.xml
  7. 8
      app/src/main/java/com/fongmi/android/tv/Setting.java
  8. 1
      app/src/main/res/values-zh-rCN/strings.xml
  9. 1
      app/src/main/res/values-zh-rTW/strings.xml
  10. 1
      app/src/main/res/values/strings.xml
  11. 7
      catvod/src/main/java/com/github/catvod/utils/Path.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;
@ -13,6 +14,7 @@ import com.fongmi.android.tv.databinding.ActivitySettingCustomBinding;
import com.fongmi.android.tv.event.RefreshEvent;
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,6 +22,7 @@ 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;
@ -63,6 +66,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.getCacheDir());
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 +94,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 +195,18 @@ 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();
}
});
}
public void setCacheDirText() {
mBinding.cacheDirText.setText(Setting.getCacheDir());
}
private void setLanguage(View view) {
LanguageDialog.create(this).show();
}

@ -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<CacheDirAdapter.ViewHolder> {
private final OnClickListener mListener;
private List<String> mItems;
public CacheDirAdapter(OnClickListener listener, List<String> 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.getCacheDir().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;
}
}
}

@ -0,0 +1,90 @@
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.ui.activity.SettingCustomActivity;
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 Activity activity;
private List<String> 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.getCacheDir();
position = 0;
for(int i=0; i<mItems.size(); i++) {
if (mItems.get(i).equals(cacheDir)) position = i;
}
this.adapter = new CacheDirAdapter(this, mItems);
this.activity = activity;
this.binding = DialogCacheDirBinding.inflate(LayoutInflater.from(activity));
this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create();
}
public void show() {
initView();
}
private int getCount() {
return 1;
}
private float getWidth() {
return 0.7f + (getCount() - 1) * 0.2f;
}
private void initView() {
setRecyclerView();
setDialog();
}
private void setRecyclerView() {
binding.recycler.setAdapter(adapter);
binding.recycler.setHasFixedSize(true);
binding.recycler.setItemAnimator(null);
binding.recycler.addItemDecoration(new SpaceItemDecoration(getCount(), 16));
binding.recycler.setLayoutManager(new GridLayoutManager(dialog.getContext(), getCount()));
binding.recycler.post(() -> 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) {
if (dialog != null) dialog.dismiss();
Setting.putCacheDir(path);
((SettingCustomActivity) activity).setCacheDirText();
}
}

@ -537,7 +537,7 @@
android:orientation="horizontal">
<LinearLayout
android:id="@+id/configCache"
android:id="@+id/cacheDir"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
@ -551,23 +551,24 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_config_cache"
android:text="@string/setting_cache_dir"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/configCacheText"
android:id="@+id/cacheDirText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="关闭" />
android:singleLine="true"
tools:text="/dir" />
</LinearLayout>
<LinearLayout
android:id="@+id/reset"
android:id="@+id/removeAd"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
@ -580,10 +581,19 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_reset"
android:text="@string/setting_remove_ad"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/removeAdText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="关闭" />
</LinearLayout>
</LinearLayout>
@ -595,9 +605,10 @@
android:orientation="horizontal">
<LinearLayout
android:id="@+id/removeAd"
android:id="@+id/configCache"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_weight="1"
android:background="@drawable/selector_item"
android:focusable="true"
@ -608,12 +619,12 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_remove_ad"
android:text="@string/setting_config_cache"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/removeAdText"
android:id="@+id/configCacheText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
@ -623,6 +634,26 @@
</LinearLayout>
<LinearLayout
android:id="@+id/reset"
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_reset"
android:textColor="@color/white"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="horizontal">
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@drawable/selector_text"
android:ellipsize="middle"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="泥巴" />
</LinearLayout>

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<com.fongmi.android.tv.ui.custom.CustomRecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:maxHeight="360dp"
tools:itemCount="5"
tools:listitem="@layout/adapter_cache_dir" />
</LinearLayout>

@ -502,4 +502,12 @@ public class Setting {
Prefers.put("remove_ad", remove);
}
public static String getCacheDir() {
return Prefers.getString("cache_dir", "");
}
public static void putCacheDir(String dir) {
Prefers.put("cache_dir", dir);
}
}

@ -76,6 +76,7 @@
<string name="setting_danmu">弹幕设置</string>
<string name="setting_custom">个性设置</string>
<string name="setting_config_cache">接口缓存</string>
<string name="setting_cache_dir">缓存目录</string>
<string name="setting_reset">重置App</string>
<string name="setting_quality">图片品质</string>
<string name="setting_size">图片尺寸</string>

@ -76,6 +76,7 @@
<string name="setting_danmu">彈幕設定</string>
<string name="setting_custom">個性設定</string>
<string name="setting_config_cache">接口暫存</string>
<string name="setting_cache_dir">暫存目錄</string>
<string name="setting_reset">重置App</string>
<string name="setting_quality">圖片品質</string>
<string name="setting_size">圖片尺寸</string>

@ -76,6 +76,7 @@
<string name="setting_danmu">Danmu setting</string>
<string name="setting_custom">Custom setting</string>
<string name="setting_config_cache">Config cache</string>
<string name="setting_cache_dir">Cache dir</string>
<string name="setting_reset">Reset app</string>
<string name="setting_quality">Image quality</string>
<string name="setting_size">Image size</string>

@ -37,7 +37,12 @@ public class Path {
}
public static File cache() {
return Init.context().getCacheDir();
File internal = Init.context().getCacheDir();
String dir = Prefers.getString("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() {

Loading…
Cancel
Save