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 e85ddd5a9..cd67750c9 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 @@ -26,7 +26,7 @@ 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.TypeFragment; +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; @@ -35,6 +35,7 @@ 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 { @@ -72,6 +73,14 @@ public class VodActivity extends BaseActivity implements TypePresenter.OnClickLi return VodConfig.get().getSite(getKey()); } + private Class getType() { + return (Class) mAdapter.get(mBinding.pager.getCurrentItem()); + } + + private FolderFragment getFragment() { + return (FolderFragment) mPageAdapter.instantiateItem(mBinding.pager, mBinding.pager.getCurrentItem()); + } + @Override protected ViewBinding getBinding() { return mBinding = ActivityVodBinding.inflate(getLayoutInflater()); @@ -139,14 +148,22 @@ public class VodActivity extends BaseActivity implements TypePresenter.OnClickLi } }; + private boolean isFilterVisible() { + return Optional.ofNullable(getType()).map(Class::getFilter).orElse(false); + } + + private void updateFilter() { + Optional.ofNullable(getType()).ifPresent(this::updateFilter); + } + private void updateFilter(Class item) { if (item.getFilter() == null) return; getFragment().toggleFilter(item.toggleFilter()); mAdapter.notifyArrayItemRangeChanged(0, mAdapter.size()); } - private TypeFragment getFragment() { - return (TypeFragment) mPageAdapter.instantiateItem(mBinding.pager, mBinding.pager.getCurrentItem()); + public void closeFilter() { + if (isFilterVisible()) updateFilter(); } @Override @@ -161,14 +178,13 @@ public class VodActivity extends BaseActivity implements TypePresenter.OnClickLi @Override public boolean dispatchKeyEvent(KeyEvent event) { - if (KeyUtil.isMenuKey(event)) updateFilter((Class) mAdapter.get(mBinding.pager.getCurrentItem())); + if (KeyUtil.isMenuKey(event)) updateFilter(); return super.dispatchKeyEvent(event); } @Override protected void onBackInvoked() { - Class item = (Class) mAdapter.get(mBinding.pager.getCurrentItem()); - if (item != null && item.getFilter() != null && item.getFilter()) updateFilter(item); + if (isFilterVisible()) updateFilter(); else if (getFragment().canBack()) getFragment().goBack(); else super.onBackInvoked(); } @@ -183,7 +199,7 @@ public class VodActivity extends BaseActivity implements TypePresenter.OnClickLi @Override public Fragment getItem(int position) { Class type = (Class) mAdapter.get(position); - return TypeFragment.newInstance(getKey(), type.getTypeId(), type.getStyle(), type.getExtend(false), "1".equals(type.getTypeFlag())); + return FolderFragment.newInstance(getKey(), type.getTypeId(), type.getStyle(), type.getExtend(false), "1".equals(type.getTypeFlag())); } @Override 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/FolderFragment.java similarity index 80% rename from app/src/leanback/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java rename to app/src/leanback/java/com/fongmi/android/tv/ui/fragment/FolderFragment.java index 373f6e779..67e70c724 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/FolderFragment.java @@ -12,23 +12,25 @@ import androidx.viewbinding.ViewBinding; import com.fongmi.android.tv.R; import com.fongmi.android.tv.bean.Style; 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; -public class TypeFragment extends BaseFragment { +public class FolderFragment extends BaseFragment { private FragmentFolderBinding mBinding; - public static TypeFragment newInstance(String key, String typeId, Style style, HashMap extend, boolean folder) { + public static FolderFragment newInstance(String key, String typeId, Style style, 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); - TypeFragment fragment = new TypeFragment(); + FolderFragment fragment = new FolderFragment(); fragment.setArguments(args); return fragment; } @@ -57,6 +59,10 @@ public class TypeFragment extends BaseFragment { return (VodFragment) getChildFragmentManager().findFragmentById(R.id.container); } + private VodActivity getParent() { + return (VodActivity) getActivity(); + } + @Override protected ViewBinding getBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) { return mBinding = FragmentFolderBinding.inflate(inflater, container, false); @@ -67,9 +73,11 @@ public class TypeFragment extends BaseFragment { getChildFragmentManager().beginTransaction().replace(R.id.container, VodFragment.newInstance(getKey(), getTypeId(), getStyle(), getExtend(), getFolder())).commit(); } - public void openFolder(String typeId) { - VodFragment next = VodFragment.newInstance(getKey(), typeId, getStyle(), getExtend(), getFolder()); + public void openFolder(String typeId, HashMap extend) { + Prefers.put("filter_" + getKey() + "_" + typeId, Prefers.getString("filter_" + getKey() + "_" + getTypeId())); + VodFragment next = VodFragment.newInstance(getKey(), typeId, getStyle(), extend, getFolder()); FragmentTransaction ft = getChildFragmentManager().beginTransaction(); + Optional.ofNullable(getParent()).ifPresent(VodActivity::closeFilter); Optional.ofNullable(getChild()).ifPresent(ft::hide); ft.add(R.id.container, next); ft.addToBackStack(null); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index 49e0e8131..d00daa8de 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -96,8 +96,8 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback return Filter.arrayFrom(Prefers.getString("filter_" + getKey() + "_" + getTypeId())); } - private TypeFragment getParent() { - return ((TypeFragment) getParentFragment()); + private FolderFragment getParent() { + return ((FolderFragment) getParentFragment()); } @Override @@ -241,7 +241,7 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback if (item.isAction()) { mViewModel.action(getKey(), item.getAction()); } else if (item.isFolder()) { - getParent().openFolder(item.getVodId()); + getParent().openFolder(item.getVodId(), mExtends); headerVisible = mBinding.recycler.isHeaderVisible(); } else { if (getSite().isIndex()) CollectActivity.start(requireActivity(), item.getVodName()); diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Page.java b/app/src/main/java/com/fongmi/android/tv/bean/Page.java deleted file mode 100644 index 4db3b3038..000000000 --- a/app/src/main/java/com/fongmi/android/tv/bean/Page.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.fongmi.android.tv.bean; - -import androidx.annotation.Nullable; - -public class Page { - - private final String vodId; - private final Style style; - private final int position; - - public static Page get(Vod vod, int position) { - return new Page(vod, position); - } - - private Page(Vod vod, int position) { - this.vodId = vod.getVodId(); - this.style = vod.getCate() != null ? vod.getCate().getStyle() : null; - this.position = position; - } - - public String getVodId() { - return vodId; - } - - public Style getStyle() { - return style; - } - - public int getPosition() { - return position; - } - - @Override - public boolean equals(@Nullable Object obj) { - if (this == obj) return true; - if (!(obj instanceof Page it)) return false; - return getVodId().equals(it.getVodId()) && getPosition() == it.getPosition(); - } -}