pull/594/head
jhengazuki 6 months ago
parent 8b4afdf7e5
commit 691b28848d
  1. 30
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java
  2. 18
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/FolderFragment.java
  3. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java
  4. 39
      app/src/main/java/com/fongmi/android/tv/bean/Page.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

@ -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<String, String> extend, boolean folder) {
public static FolderFragment newInstance(String key, String typeId, Style style, HashMap<String, String> 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<String, String> 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);

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

@ -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();
}
}
Loading…
Cancel
Save