Merge pull request #447 from okcaptain/dev

Dev
pull/448/head^2
okcaptain 2 years ago committed by GitHub
commit bfc8f3af11
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java
  2. 23
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java
  3. 60
      app/src/leanback/java/com/fongmi/android/tv/ui/adapter/CacheDirAdapter.java
  4. 89
      app/src/leanback/java/com/fongmi/android/tv/ui/dialog/CacheDirDialog.java
  5. 49
      app/src/leanback/res/layout/activity_setting_custom.xml
  6. 22
      app/src/leanback/res/layout/adapter_cache_dir.xml
  7. 18
      app/src/leanback/res/layout/dialog_cache_dir.xml
  8. 8
      app/src/main/java/com/fongmi/android/tv/Setting.java
  9. 6
      app/src/main/java/com/fongmi/android/tv/impl/CacheDirCallback.java
  10. 1
      app/src/main/res/values-zh-rCN/strings.xml
  11. 1
      app/src/main/res/values-zh-rTW/strings.xml
  12. 1
      app/src/main/res/values/strings.xml
  13. 11
      catvod/src/main/java/com/github/catvod/utils/Path.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;

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

@ -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 CacheDirAdapter.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.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;
}
}
}

@ -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<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.getThunderCacheDir();
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.callback = (CacheDirCallback) 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) {
callback.setCacheDir(path);
dialog.dismiss();
}
}

@ -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 getThunderCacheDir() {
return Prefers.getString("thunder_cache_dir", "");
}
public static void putThunderCacheDir(String dir) {
Prefers.put("thunder_cache_dir", dir);
}
}

@ -0,0 +1,6 @@
package com.fongmi.android.tv.impl;
public interface CacheDirCallback {
void setCacheDir(String 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">Thunder cache</string>
<string name="setting_reset">Reset app</string>
<string name="setting_quality">Image quality</string>
<string name="setting_size">Image size</string>

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

Loading…
Cancel
Save