Optimize filter

pull/605/head
jhengazuki 4 months ago
parent 6b482a4564
commit eaab51ec96
  1. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  2. 28
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java
  3. 33
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/FolderFragment.java
  4. 14
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java
  5. 4
      app/src/main/java/com/fongmi/android/tv/bean/Class.java
  6. 4
      app/src/main/java/com/fongmi/android/tv/bean/Result.java
  7. 15
      app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.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);

@ -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<String, List<Filter>> 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<Filter> 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<Class> getTypes(Result result) {
List<Class> 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

@ -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<String, String> 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<String, String> getExtend() {
return (HashMap<String, String>) 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<String, String> 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);

@ -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<String, String> extend, boolean folder) {
public static TypeFragment newInstance(String key, String typeId, Style style, List<Filter> filter, 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);
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<Filter> getFilter() {
return getArguments().getParcelableArrayList("filter");
}
private HashMap<String, String> getExtend() {
return (HashMap<String, String>) getArguments().getSerializable("extend");
}
@ -93,10 +97,6 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
return VodConfig.get().getSite(getKey());
}
private List<Filter> 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();

@ -127,6 +127,10 @@ public class Class implements Parcelable, Diffable<Class> {
return "home".equals(getTypeId());
}
public boolean isFolder() {
return "1".equals(getTypeFlag());
}
public void trans() {
if (Trans.pass()) return;
this.typeName = Trans.s2t(typeName);

@ -166,7 +166,7 @@ public class Result implements Parcelable {
}
public void setTypes(List<Class> types) {
if (!types.isEmpty()) this.types = types;
this.types = types;
}
public List<Vod> 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<Result> CREATOR = new Creator<>() {

@ -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<String, String> 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<Class> 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> result, Callable<Result> callable) {
int currentId = taskId.incrementAndGet();
if (future != null && !future.isDone()) future.cancel(true);

Loading…
Cancel
Save