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 bdbee8a5b..b801f3e20 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 @@ -321,7 +321,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen if (ApiConfig.get().getConfig().equals(event.getConfig())) { DetailActivity.cast(this, event.getHistory().update(ApiConfig.getCid())); } else { - ApiConfig.get().clear().config(event.getConfig()).load(getCallback(event)); + ApiConfig.load(event.getConfig(), getCallback(event)); } } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/KeepActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/KeepActivity.java index fdfef6ba5..c20a4582c 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/KeepActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/KeepActivity.java @@ -54,7 +54,7 @@ public class KeepActivity extends BaseActivity implements KeepAdapter.OnClickLis } private void loadConfig(Config config, Keep item) { - ApiConfig.get().clear().config(config).load(true, new Callback() { + ApiConfig.load(config, new Callback() { @Override public void success() { DetailActivity.start(getActivity(), item.getSiteKey(), item.getVodId(), item.getVodName()); 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 ba167f822..3ff2840d2 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 @@ -7,6 +7,7 @@ import android.view.View; 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.Updater; @@ -20,10 +21,12 @@ import com.fongmi.android.tv.databinding.ActivitySettingBinding; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.impl.Callback; import com.fongmi.android.tv.impl.ConfigCallback; +import com.fongmi.android.tv.impl.DohCallback; import com.fongmi.android.tv.impl.LiveCallback; import com.fongmi.android.tv.impl.SiteCallback; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.custom.dialog.ConfigDialog; +import com.fongmi.android.tv.ui.custom.dialog.DohDialog; import com.fongmi.android.tv.ui.custom.dialog.HistoryDialog; import com.fongmi.android.tv.ui.custom.dialog.LiveDialog; import com.fongmi.android.tv.ui.custom.dialog.SiteDialog; @@ -32,9 +35,14 @@ import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.Prefers; import com.fongmi.android.tv.utils.ResUtil; import com.fongmi.android.tv.utils.Utils; +import com.github.catvod.bean.Doh; +import com.github.catvod.net.OkHttp; import com.permissionx.guolindev.PermissionX; -public class SettingActivity extends BaseActivity implements ConfigCallback, SiteCallback, LiveCallback { +import java.util.ArrayList; +import java.util.List; + +public class SettingActivity extends BaseActivity implements ConfigCallback, SiteCallback, LiveCallback, DohCallback { private ActivitySettingBinding mBinding; private String[] quality; @@ -49,6 +57,16 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit activity.startActivity(new Intent(activity, SettingActivity.class)); } + private int getDohIndex() { + return Math.max(0, ApiConfig.get().getDoh().indexOf(Doh.objectFrom(Prefers.getDoh()))); + } + + private String[] getDohList() { + List list = new ArrayList<>(); + for (Doh item : ApiConfig.get().getDoh()) list.add(item.getName()); + return list.toArray(new String[0]); + } + @Override protected ViewBinding getBinding() { return mBinding = ActivitySettingBinding.inflate(getLayoutInflater()); @@ -59,6 +77,7 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit mBinding.vodUrl.setText(ApiConfig.getDesc()); mBinding.liveUrl.setText(LiveConfig.getDesc()); mBinding.wallUrl.setText(WallConfig.getDesc()); + mBinding.dohText.setText(getDohList()[getDohIndex()]); mBinding.versionText.setText(BuildConfig.VERSION_NAME); mBinding.sizeText.setText((size = ResUtil.getStringArray(R.array.select_size))[Prefers.getSize()]); mBinding.scaleText.setText((scale = ResUtil.getStringArray(R.array.select_scale))[Prefers.getScale()]); @@ -69,6 +88,15 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit setCacheText(); } + private void setCacheText() { + FileUtil.getCacheSize(new Callback() { + @Override + public void success(String result) { + mBinding.cacheText.setText(result); + } + }); + } + @Override protected void initEvent() { mBinding.vod.setOnClickListener(this::onVod); @@ -89,6 +117,7 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit mBinding.render.setOnClickListener(this::setRender); mBinding.scale.setOnClickListener(this::setScale); mBinding.size.setOnClickListener(this::setSize); + mBinding.doh.setOnClickListener(this::setDoh); } @Override @@ -104,22 +133,23 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit switch (config.getType()) { case 0: Notify.progress(this); + ApiConfig.load(config, getCallback()); mBinding.vodUrl.setText(config.getDesc()); - ApiConfig.get().clear().config(config).load(getCallback(config)); break; case 1: Notify.progress(this); + LiveConfig.load(config, getCallback()); mBinding.liveUrl.setText(config.getDesc()); - LiveConfig.get().clear().config(config).load(getCallback(config)); break; case 2: + Notify.progress(this); + WallConfig.load(config, getCallback()); mBinding.wallUrl.setText(config.getDesc()); - WallConfig.get().clear().config(config).load(getCallback(config)); break; } } - private Callback getCallback(Config config) { + private Callback getCallback() { return new Callback() { @Override public void success() { @@ -129,7 +159,6 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit @Override public void error(int resId) { Notify.show(resId); - config.delete(); setConfig(); } }; @@ -153,6 +182,7 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit break; case 2: setCacheText(); + Notify.dismiss(); mBinding.wallUrl.setText(WallConfig.getUrl()); break; } @@ -263,6 +293,19 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit RefreshEvent.size(); } + private void setDoh(View view) { + DohDialog.create(this).index(getDohIndex()).show(); + } + + @Override + public void setDoh(Doh doh) { + Notify.progress(getActivity()); + Prefers.putDoh(doh.toString()); + OkHttp.get().setDoh(App.get(), doh); + mBinding.dohText.setText(doh.getName()); + ApiConfig.load(Config.vod(), getCallback()); + } + private void onCache(View view) { FileUtil.clearCache(new Callback() { @Override @@ -271,13 +314,4 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit } }); } - - private void setCacheText() { - FileUtil.getCacheSize(new Callback() { - @Override - public void success(String result) { - mBinding.cacheText.setText(result); - } - }); - } } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/DohAdapter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/DohAdapter.java new file mode 100644 index 000000000..daacae711 --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/DohAdapter.java @@ -0,0 +1,67 @@ +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.api.ApiConfig; +import com.fongmi.android.tv.databinding.AdapterDohBinding; +import com.github.catvod.bean.Doh; + +import java.util.List; + +public class DohAdapter extends RecyclerView.Adapter { + + private final OnClickListener mListener; + private final List mItems; + private int select; + + public DohAdapter(OnClickListener listener) { + this.mItems = ApiConfig.get().getDoh(); + this.mListener = listener; + } + + public void setSelect(int select) { + this.select = select; + } + + public int getSelect() { + return select; + } + + public interface OnClickListener { + + void onItemClick(Doh item); + } + + @Override + public int getItemCount() { + return mItems.size(); + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new ViewHolder(AdapterDohBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + Doh item = mItems.get(position); + holder.binding.text.setText(item.getName()); + holder.binding.text.setActivated(select == position); + holder.binding.text.setOnClickListener(v -> mListener.onItemClick(item)); + } + + public static class ViewHolder extends RecyclerView.ViewHolder { + + private final AdapterDohBinding binding; + + public ViewHolder(@NonNull AdapterDohBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } +} diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/DohDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/DohDialog.java new file mode 100644 index 000000000..c4b8a7a67 --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/DohDialog.java @@ -0,0 +1,66 @@ +package com.fongmi.android.tv.ui.custom.dialog; + +import android.app.Activity; +import android.view.LayoutInflater; +import android.view.WindowManager; + +import androidx.appcompat.app.AlertDialog; + +import com.fongmi.android.tv.databinding.DialogDohBinding; +import com.fongmi.android.tv.impl.DohCallback; +import com.fongmi.android.tv.ui.adapter.DohAdapter; +import com.fongmi.android.tv.ui.custom.SpaceItemDecoration; +import com.fongmi.android.tv.utils.ResUtil; +import com.github.catvod.bean.Doh; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +public class DohDialog implements DohAdapter.OnClickListener { + + private final DialogDohBinding binding; + private final DohCallback callback; + private final AlertDialog dialog; + private final DohAdapter adapter; + + public static DohDialog create(Activity activity) { + return new DohDialog(activity); + } + + public DohDialog index(int index) { + adapter.setSelect(index); + return this; + } + + public DohDialog(Activity activity) { + this.callback = (DohCallback) activity; + this.binding = DialogDohBinding.inflate(LayoutInflater.from(activity)); + this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create(); + this.adapter = new DohAdapter(this); + } + + public void show() { + setRecyclerView(); + setDialog(); + } + + private void setRecyclerView() { + binding.recycler.setAdapter(adapter); + binding.recycler.setHasFixedSize(true); + binding.recycler.addItemDecoration(new SpaceItemDecoration(1, 16)); + binding.recycler.scrollToPosition(adapter.getSelect()); + } + + private void setDialog() { + if (adapter.getItemCount() == 0) return; + WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); + params.width = (int) (ResUtil.getScreenWidth() * 0.4f); + dialog.getWindow().setAttributes(params); + dialog.getWindow().setDimAmount(0); + dialog.show(); + } + + @Override + public void onItemClick(Doh item) { + callback.setDoh(item); + dialog.dismiss(); + } +} diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/HistoryDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/HistoryDialog.java index 7b2258992..b2049a700 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/HistoryDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/HistoryDialog.java @@ -45,8 +45,8 @@ public class HistoryDialog implements ConfigAdapter.OnClickListener { private void setRecyclerView() { binding.recycler.setHasFixedSize(true); - binding.recycler.addItemDecoration(new SpaceItemDecoration(1, 16)); binding.recycler.setAdapter(adapter.addAll(type)); + binding.recycler.addItemDecoration(new SpaceItemDecoration(1, 16)); } private void setDialog() { diff --git a/app/src/leanback/res/layout/activity_setting.xml b/app/src/leanback/res/layout/activity_setting.xml index ac14e31e5..9b03b49f7 100644 --- a/app/src/leanback/res/layout/activity_setting.xml +++ b/app/src/leanback/res/layout/activity_setting.xml @@ -410,31 +410,69 @@ - + android:background="@drawable/selector_item" + android:focusable="true" + android:focusableInTouchMode="true" + android:orientation="horizontal"> - + + + + + + + android:layout_weight="1" + android:background="@drawable/selector_item" + android:focusable="true" + android:focusableInTouchMode="true" + android:orientation="horizontal"> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/leanback/res/layout/dialog_doh.xml b/app/src/leanback/res/layout/dialog_doh.xml new file mode 100644 index 000000000..29632553f --- /dev/null +++ b/app/src/leanback/res/layout/dialog_doh.xml @@ -0,0 +1,9 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/android/tv/impl/DohCallback.java b/app/src/main/java/com/fongmi/android/tv/impl/DohCallback.java new file mode 100644 index 000000000..1fba32d1a --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/impl/DohCallback.java @@ -0,0 +1,8 @@ +package com.fongmi.android.tv.impl; + +import com.github.catvod.bean.Doh; + +public interface DohCallback { + + void setDoh(Doh doh); +}