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 c9fc1a57c..06019527e 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 @@ -376,7 +376,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen public void onItemClick(Func item) { switch (item.getResId()) { case R.string.home_vod: - VodActivity.start(this, mResult.clear()); + VodActivity.start(this, mResult); break; case R.string.home_live: LiveActivity.start(this); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java index c3e752753..f19ddfecb 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java @@ -21,20 +21,14 @@ import androidx.viewpager.widget.ViewPager; import com.fongmi.android.tv.App; import com.fongmi.android.tv.api.config.VodConfig; import com.fongmi.android.tv.bean.Class; -import com.fongmi.android.tv.bean.Filter; import com.fongmi.android.tv.bean.Result; -import com.fongmi.android.tv.bean.Site; import com.fongmi.android.tv.databinding.ActivityVodBinding; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.fragment.FolderFragment; import com.fongmi.android.tv.ui.presenter.TypePresenter; import com.fongmi.android.tv.utils.KeyUtil; import com.fongmi.android.tv.utils.ResUtil; -import com.github.catvod.utils.Prefers; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; import java.util.Optional; public class VodActivity extends BaseActivity implements TypePresenter.OnClickListener { @@ -52,7 +46,6 @@ public class VodActivity extends BaseActivity implements TypePresenter.OnClickLi Intent intent = new Intent(activity, VodActivity.class); intent.putExtra("key", key); intent.putExtra("result", result); - for (Map.Entry> entry : result.getFilters().entrySet()) Prefers.put("filter_" + key + "_" + entry.getKey(), App.gson().toJson(entry.getValue())); activity.startActivity(intent); } @@ -64,14 +57,6 @@ public class VodActivity extends BaseActivity implements TypePresenter.OnClickLi return getIntent().getParcelableExtra("result"); } - private List getFilter(String typeId) { - return Filter.arrayFrom(Prefers.getString("filter_" + getKey() + "_" + typeId)); - } - - private Site getSite() { - return VodConfig.get().getSite(getKey()); - } - private Class getType() { return (Class) mAdapter.get(mBinding.pager.getCurrentItem()); } @@ -115,17 +100,8 @@ public class VodActivity extends BaseActivity implements TypePresenter.OnClickLi mBinding.recycler.setAdapter(new ItemBridgeAdapter(mAdapter = new ArrayObjectAdapter(new TypePresenter(this)))); } - private List getTypes(Result result) { - List items = new ArrayList<>(); - for (String cate : getSite().getCategories()) for (Class item : result.getTypes()) if (cate.equals(item.getTypeName())) items.add(item); - return items; - } - private void setTypes() { - Result result = getResult(); - result.setTypes(getTypes(result)); - for (Class item : result.getTypes()) item.setFilters(getFilter(item.getTypeId())); - mAdapter.setItems(result.getTypes(), null); + mAdapter.setItems(getResult().getTypes(), null); } private void setPager() { @@ -198,7 +174,7 @@ public class VodActivity extends BaseActivity implements TypePresenter.OnClickLi @Override public Fragment getItem(int position) { Class type = (Class) mAdapter.get(position); - return FolderFragment.newInstance(getKey(), type.getTypeId(), type.getStyle(), type.getExtend(false), "1".equals(type.getTypeFlag())); + return FolderFragment.newInstance(getKey(), type); } @Override diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/FolderFragment.java b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/FolderFragment.java index 8b207e345..cdef44073 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/FolderFragment.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/FolderFragment.java @@ -10,11 +10,10 @@ import androidx.fragment.app.FragmentTransaction; import androidx.viewbinding.ViewBinding; import com.fongmi.android.tv.R; -import com.fongmi.android.tv.bean.Style; +import com.fongmi.android.tv.bean.Class; import com.fongmi.android.tv.databinding.FragmentFolderBinding; import com.fongmi.android.tv.ui.activity.VodActivity; import com.fongmi.android.tv.ui.base.BaseFragment; -import com.github.catvod.utils.Prefers; import java.util.HashMap; import java.util.Optional; @@ -22,14 +21,12 @@ import java.util.Optional; public class FolderFragment extends BaseFragment { private FragmentFolderBinding mBinding; + private Class mType; - public static FolderFragment newInstance(String key, String typeId, Style style, HashMap extend, boolean folder) { + public static FolderFragment newInstance(String key, Class type) { Bundle args = new Bundle(); args.putString("key", key); - args.putString("typeId", typeId); - args.putBoolean("folder", folder); - args.putParcelable("style", style); - args.putSerializable("extend", extend); + args.putParcelable("type", type); FolderFragment fragment = new FolderFragment(); fragment.setArguments(args); return fragment; @@ -39,20 +36,8 @@ public class FolderFragment extends BaseFragment { return getArguments().getString("key"); } - private String getTypeId() { - return getArguments().getString("typeId"); - } - - private boolean getFolder() { - return getArguments().getBoolean("folder"); - } - - private Style getStyle() { - return getArguments().getParcelable("style"); - } - - private HashMap getExtend() { - return (HashMap) getArguments().getSerializable("extend"); + public Class getType() { + return getArguments().getParcelable("type"); } private TypeFragment getChild() { @@ -70,12 +55,12 @@ public class FolderFragment extends BaseFragment { @Override protected void initView() { - getChildFragmentManager().beginTransaction().replace(R.id.container, TypeFragment.newInstance(getKey(), getTypeId(), getStyle(), getExtend(), getFolder())).commit(); + mType = getType(); + getChildFragmentManager().beginTransaction().replace(R.id.container, TypeFragment.newInstance(getKey(), mType.getTypeId(), mType.getStyle(), mType.getFilters(), mType.getExtend(false), mType.isFolder())).commit(); } public void openFolder(String typeId, HashMap extend) { - Prefers.put("filter_" + getKey() + "_" + typeId, Prefers.getString("filter_" + getKey() + "_" + getTypeId())); - TypeFragment next = TypeFragment.newInstance(getKey(), typeId, getStyle(), extend, getFolder()); + TypeFragment next = TypeFragment.newInstance(getKey(), typeId, mType.getStyle(), mType.getFilters(), extend, mType.isFolder()); FragmentTransaction ft = getChildFragmentManager().beginTransaction(); Optional.ofNullable(getParent()).ifPresent(VodActivity::closeFilter); Optional.ofNullable(getChild()).ifPresent(ft::hide); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java index a05ababaf..c130b83d0 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java @@ -38,7 +38,6 @@ import com.fongmi.android.tv.ui.presenter.FilterPresenter; import com.fongmi.android.tv.ui.presenter.VodPresenter; import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.ResUtil; -import com.github.catvod.utils.Prefers; import com.google.common.collect.Lists; import java.util.ArrayList; @@ -57,13 +56,14 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac private boolean headerVisible; private boolean filterVisible; - public static TypeFragment newInstance(String key, String typeId, Style style, HashMap extend, boolean folder) { + public static TypeFragment newInstance(String key, String typeId, Style style, List filter, HashMap extend, boolean folder) { Bundle args = new Bundle(); args.putString("key", key); args.putString("typeId", typeId); args.putBoolean("folder", folder); args.putParcelable("style", style); args.putSerializable("extend", extend); + args.putParcelableArrayList("filter", new ArrayList<>(filter)); TypeFragment fragment = new TypeFragment(); fragment.setArguments(args); return fragment; @@ -85,6 +85,10 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac return isFolder() ? Style.list() : getSite().getStyle(getArguments().getParcelable("style")); } + private List getFilter() { + return getArguments().getParcelableArrayList("filter"); + } + private HashMap getExtend() { return (HashMap) getArguments().getSerializable("extend"); } @@ -93,10 +97,6 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac return VodConfig.get().getSite(getKey()); } - private List getFilter() { - return Filter.arrayFrom(Prefers.getString("filter_" + getKey() + "_" + getTypeId())); - } - private FolderFragment getParent() { return ((FolderFragment) getParentFragment()); } @@ -110,8 +110,8 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac protected void initView() { mBinding.swipeLayout.setColorSchemeResources(R.color.accent); mScroller = new CustomScroller(this); - mExtends = getExtend(); mFilters = getFilter(); + mExtends = getExtend(); setRecyclerView(); setViewModel(); setFilters(); diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Class.java b/app/src/main/java/com/fongmi/android/tv/bean/Class.java index b5443e424..82a248974 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Class.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Class.java @@ -127,6 +127,10 @@ public class Class implements Parcelable, Diffable { return "home".equals(getTypeId()); } + public boolean isFolder() { + return "1".equals(getTypeFlag()); + } + public void trans() { if (Trans.pass()) return; this.typeName = Trans.s2t(typeName); diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Result.java b/app/src/main/java/com/fongmi/android/tv/bean/Result.java index 9b5fe8da3..9185074fa 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Result.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Result.java @@ -166,7 +166,7 @@ public class Result implements Parcelable { } public void setTypes(List types) { - if (!types.isEmpty()) this.types = types; + this.types = types; } public List getList() { @@ -328,13 +328,11 @@ public class Result implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeList(this.types); - dest.writeTypedList(this.list); } protected Result(Parcel in) { this.types = new ArrayList<>(); in.readList(this.types, Class.class.getClassLoader()); - this.list = in.createTypedArrayList(Vod.CREATOR); } public static final Creator CREATOR = new Creator<>() { diff --git a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java index d8e701e6c..1ab23ec32 100644 --- a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java +++ b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java @@ -10,6 +10,7 @@ import com.fongmi.android.tv.App; import com.fongmi.android.tv.Constant; import com.fongmi.android.tv.R; import com.fongmi.android.tv.api.config.VodConfig; +import com.fongmi.android.tv.bean.Class; import com.fongmi.android.tv.bean.Episode; import com.fongmi.android.tv.bean.Flag; import com.fongmi.android.tv.bean.Result; @@ -37,6 +38,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; import okhttp3.Call; import okhttp3.Response; @@ -92,18 +94,18 @@ public class SiteViewModel extends ViewModel { String homeVideoContent = spider.homeVideoContent(); SpiderDebug.log("homeVideo", homeVideoContent); result.setList(Result.fromJson(homeVideoContent).getList()); - return result; + return setTypes(site, result); } else if (site.getType() == 4) { ArrayMap params = new ArrayMap<>(); params.put("filter", "true"); String homeContent = call(site.fetchExt(), params); SpiderDebug.log("home", homeContent); - return Result.fromJson(homeContent); + return setTypes(site, Result.fromJson(homeContent)); } else { try (Response response = OkHttp.newCall(site.getApi(), site.getHeader()).execute()) { String homeContent = response.body().string(); SpiderDebug.log("home", homeContent); - return fetchPic(site, Result.fromType(site.getType(), homeContent)); + return setTypes(site, fetchPic(site, Result.fromType(site.getType(), homeContent))); } } }); @@ -257,6 +259,13 @@ public class SiteViewModel extends ViewModel { } } + private Result setTypes(Site site, Result result) { + List types = site.getCategories().stream().flatMap(cate -> result.getTypes().stream().filter(type -> cate.equals(type.getTypeName()))).collect(Collectors.toCollection(ArrayList::new)); + result.getTypes().stream().filter(type -> result.getFilters().containsKey(type.getTypeId())).forEach(type -> type.setFilters(result.getFilters().get(type.getTypeId()))); + if (!types.isEmpty()) result.setTypes(types); + return result; + } + private void execute(MutableLiveData result, Callable callable) { int currentId = taskId.incrementAndGet(); if (future != null && !future.isDone()) future.cancel(true);