Optimize filters

pull/606/head
FongMi 4 months ago
parent 6ba69703e0
commit f64605b4c3
  1. 42
      app/src/leanback/java/com/fongmi/android/tv/bean/Cache.java
  2. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  3. 3
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java
  4. 12
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/FolderFragment.java
  5. 15
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java
  6. 3
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/TypePresenter.java
  7. 15
      app/src/main/java/com/fongmi/android/tv/bean/Class.java
  8. 9
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/FolderFragment.java
  9. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java

@ -0,0 +1,42 @@
package com.fongmi.android.tv.bean;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Cache {
private final Map<String, List<Filter>> cache;
private static class Loader {
static volatile Cache INSTANCE = new Cache();
}
private static Cache get() {
return Loader.INSTANCE;
}
public Cache() {
cache = new HashMap<>();
}
public void put(Result result) {
if (result == null) return;
result.getTypes().forEach(type -> get().cache.put(type.getTypeId(), type.getFilters()));
}
public static List<Filter> get(Class type) {
return get(type.getTypeId());
}
public static List<Filter> get(String typeId) {
List<Filter> filters = get().cache.get(typeId);
return filters == null ? Collections.emptyList() : filters;
}
public static Cache clear() {
get().cache.clear();
return get();
}
}

@ -27,6 +27,7 @@ import com.fongmi.android.tv.Updater;
import com.fongmi.android.tv.api.config.LiveConfig;
import com.fongmi.android.tv.api.config.VodConfig;
import com.fongmi.android.tv.api.config.WallConfig;
import com.fongmi.android.tv.bean.Cache;
import com.fongmi.android.tv.bean.Config;
import com.fongmi.android.tv.bean.Func;
import com.fongmi.android.tv.bean.History;
@ -171,6 +172,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
mViewModel.result.observe(this, result -> {
mAdapter.remove("progress");
addVideo(mResult = result);
Cache.clear().put(result);
});
}

@ -132,10 +132,9 @@ public class VodActivity extends BaseActivity implements TypePresenter.OnClickLi
}
private void updateFilter(Class item) {
if (!item.hasFilter()) return;
item.setFilter(!item.getFilter());
getFragment().toggleFilter(item.getFilter());
mAdapter.notifyArrayItemRangeChanged(0, mAdapter.size());
mAdapter.notifyArrayItemRangeChanged(mAdapter.indexOf(item), 1);
}
public void closeFilter() {

@ -10,7 +10,9 @@ import androidx.fragment.app.FragmentTransaction;
import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.bean.Cache;
import com.fongmi.android.tv.bean.Class;
import com.fongmi.android.tv.bean.Filter;
import com.fongmi.android.tv.databinding.FragmentFolderBinding;
import com.fongmi.android.tv.ui.activity.VodActivity;
import com.fongmi.android.tv.ui.base.BaseFragment;
@ -56,11 +58,17 @@ public class FolderFragment extends BaseFragment {
@Override
protected void initView() {
mType = getType();
getChildFragmentManager().beginTransaction().replace(R.id.container, TypeFragment.newInstance(getKey(), mType.getTypeId(), mType.getStyle(), mType.getFilters(), mType.getExtend(false), mType.isFolder())).commit();
getChildFragmentManager().beginTransaction().replace(R.id.container, TypeFragment.newInstance(getKey(), mType.getTypeId(), mType.getStyle(), getExtend(), mType.isFolder())).commit();
}
private HashMap<String, String> getExtend() {
HashMap<String, String> extend = new HashMap<>();
for (Filter filter : Cache.get(mType)) if (filter.getInit() != null) extend.put(filter.getKey(), filter.getInit());
return extend;
}
public void openFolder(String typeId, HashMap<String, String> extend) {
TypeFragment next = TypeFragment.newInstance(getKey(), typeId, mType.getStyle(), mType.getFilters(), extend, mType.isFolder());
TypeFragment next = TypeFragment.newInstance(getKey(), typeId, mType.getStyle(), extend, mType.isFolder());
FragmentTransaction ft = getChildFragmentManager().beginTransaction();
Optional.ofNullable(getParent()).ifPresent(VodActivity::closeFilter);
Optional.ofNullable(getChild()).ifPresent(ft::hide);

@ -19,6 +19,7 @@ import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.Product;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.api.config.VodConfig;
import com.fongmi.android.tv.bean.Cache;
import com.fongmi.android.tv.bean.Filter;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.bean.Site;
@ -56,14 +57,13 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
private boolean headerVisible;
private boolean filterVisible;
public static TypeFragment newInstance(String key, String typeId, Style style, List<Filter> filter, HashMap<String, String> extend, boolean folder) {
public static TypeFragment 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);
args.putParcelableArrayList("filter", new ArrayList<>(filter));
TypeFragment fragment = new TypeFragment();
fragment.setArguments(args);
return fragment;
@ -85,14 +85,14 @@ 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");
}
private List<Filter> getFilter() {
return Cache.get(getTypeId());
}
private Site getSite() {
return VodConfig.get().getSite(getKey());
}
@ -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);
mFilters = getFilter();
mExtends = getExtend();
mFilters = getFilter();
setRecyclerView();
setViewModel();
setFilters();
@ -231,6 +231,7 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
}
public void toggleFilter(boolean visible) {
if (mFilters.isEmpty()) return;
this.filterVisible = visible;
if (visible) showFilter();
else hideFilter();

@ -7,6 +7,7 @@ import androidx.annotation.NonNull;
import androidx.leanback.widget.Presenter;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.bean.Cache;
import com.fongmi.android.tv.bean.Class;
import com.fongmi.android.tv.databinding.AdapterTypeBinding;
import com.fongmi.android.tv.utils.ResUtil;
@ -48,7 +49,7 @@ public class TypePresenter extends Presenter {
}
private int getIcon(Class item) {
return !item.hasFilter() ? 0 : item.getFilter() ? R.drawable.ic_vod_filter_off : R.drawable.ic_vod_filter_on;
return Cache.get(item).isEmpty() ? 0 : item.getFilter() ? R.drawable.ic_vod_filter_off : R.drawable.ic_vod_filter_on;
}
public static class ViewHolder extends Presenter.ViewHolder {

@ -15,9 +15,7 @@ import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.Text;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@Root(strict = false)
@ -124,10 +122,6 @@ public class Class implements Parcelable, Diffable<Class> {
return "1".equals(getTypeFlag());
}
public boolean hasFilter() {
return !getFilters().isEmpty();
}
public void trans() {
if (Trans.pass()) return;
this.typeName = Trans.s2t(typeName);
@ -137,12 +131,6 @@ public class Class implements Parcelable, Diffable<Class> {
return Style.get(getLand(), getCircle(), getRatio());
}
public HashMap<String, String> getExtend(boolean change) {
HashMap<String, String> extend = new HashMap<>();
for (Filter filter : getFilters()) if (filter.getInit() != null) extend.put(filter.getKey(), change ? filter.setActivated(filter.getInit()) : filter.getInit());
return extend;
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) return true;
@ -165,7 +153,6 @@ public class Class implements Parcelable, Diffable<Class> {
dest.writeString(this.typeId);
dest.writeString(this.typeName);
dest.writeString(this.typeFlag);
dest.writeList(this.filters);
dest.writeByte(this.filter ? (byte) 1 : (byte) 0);
dest.writeInt(this.land);
dest.writeInt(this.circle);
@ -177,8 +164,6 @@ public class Class implements Parcelable, Diffable<Class> {
this.typeId = in.readString();
this.typeName = in.readString();
this.typeFlag = in.readString();
this.filters = new ArrayList<>();
in.readList(this.filters, Filter.class.getClassLoader());
this.filter = in.readByte() != 0;
this.land = in.readInt();
this.circle = in.readInt();

@ -11,6 +11,7 @@ import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.R;
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.Value;
import com.fongmi.android.tv.databinding.FragmentFolderBinding;
@ -61,7 +62,13 @@ public class FolderFragment extends BaseFragment {
@Override
protected void initView() {
mType = getType();
getChildFragmentManager().beginTransaction().replace(R.id.container, TypeFragment.newInstance(getKey(), mType.getTypeId(), mType.getStyle(), mType.getExtend(true), mType.isFolder(), getY())).commit();
getChildFragmentManager().beginTransaction().replace(R.id.container, TypeFragment.newInstance(getKey(), mType.getTypeId(), mType.getStyle(), getExtend(), mType.isFolder(), getY())).commit();
}
private HashMap<String, String> getExtend() {
HashMap<String, String> extend = new HashMap<>();
for (Filter filter : mType.getFilters()) if (filter.getInit() != null) extend.put(filter.getKey(), filter.setActivated(filter.getInit()));
return extend;
}
public void openFolder(String typeId, HashMap<String, String> extend) {

@ -147,11 +147,11 @@ public class VodFragment extends BaseFragment implements ConfigCallback, SiteCal
mBinding.top.setVisibility(View.INVISIBLE);
mBinding.link.setVisibility(View.VISIBLE);
mBinding.filter.setVisibility(View.GONE);
} else if (mAdapter.get(position).hasFilter()) {
} else if (!mAdapter.get(position).getFilters().isEmpty()) {
mBinding.top.setVisibility(View.INVISIBLE);
mBinding.link.setVisibility(View.GONE);
mBinding.filter.show();
} else if (position == 0 || !mAdapter.get(position).hasFilter()) {
} else if (position == 0 || mAdapter.get(position).getFilters().isEmpty()) {
mBinding.top.setVisibility(View.INVISIBLE);
mBinding.filter.setVisibility(View.GONE);
mBinding.link.show();

Loading…
Cancel
Save