Optimize bean

pull/605/head
jhengazuki 5 months ago
parent fc70c2735d
commit 421b619656
  1. 2
      app/src/leanback/java/com/fongmi/android/tv/bean/Func.java
  2. 3
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java
  3. 27
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java
  4. 13
      app/src/main/java/com/fongmi/android/tv/bean/Class.java
  5. 2
      app/src/main/java/com/fongmi/android/tv/bean/Collect.java
  6. 6
      app/src/main/java/com/fongmi/android/tv/bean/Device.java
  7. 19
      app/src/main/java/com/fongmi/android/tv/bean/Episode.java
  8. 13
      app/src/main/java/com/fongmi/android/tv/bean/Flag.java
  9. 6
      app/src/main/java/com/fongmi/android/tv/bean/History.java
  10. 6
      app/src/main/java/com/fongmi/android/tv/bean/Keep.java
  11. 13
      app/src/main/java/com/fongmi/android/tv/bean/Parse.java
  12. 13
      app/src/main/java/com/fongmi/android/tv/bean/Value.java
  13. 6
      app/src/main/java/com/fongmi/android/tv/bean/Vod.java

@ -70,7 +70,7 @@ public class Func implements Diffable<Func> {
@Override
public boolean isSameItem(Func other) {
return getResId() == other.getResId();
return equals(other);
}
@Override

@ -22,6 +22,7 @@ import com.fongmi.android.tv.databinding.FragmentTypeBinding;
import com.fongmi.android.tv.model.SiteViewModel;
import com.fongmi.android.tv.ui.activity.VideoActivity;
import com.fongmi.android.tv.ui.activity.VodActivity;
import com.fongmi.android.tv.ui.adapter.BaseDiffCallback;
import com.fongmi.android.tv.ui.base.BaseFragment;
import com.fongmi.android.tv.ui.custom.CustomRowPresenter;
import com.fongmi.android.tv.ui.custom.CustomScroller;
@ -108,7 +109,7 @@ public class CollectFragment extends BaseFragment implements CustomScroller.Call
List<ListRow> rows = new ArrayList<>();
for (List<Vod> part : Lists.partition(items, Product.getColumn())) {
mLast = new ArrayObjectAdapter(new VodPresenter(this));
mLast.setItems(part, null);
mLast.setItems(part, new BaseDiffCallback<Vod>());
rows.add(new ListRow(mLast));
}
mAdapter.addAll(mAdapter.size(), rows);

@ -15,7 +15,6 @@ import androidx.leanback.widget.ListRow;
import androidx.lifecycle.ViewModelProvider;
import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.Product;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.api.config.VodConfig;
@ -29,6 +28,7 @@ import com.fongmi.android.tv.databinding.FragmentTypeBinding;
import com.fongmi.android.tv.model.SiteViewModel;
import com.fongmi.android.tv.ui.activity.CollectActivity;
import com.fongmi.android.tv.ui.activity.VideoActivity;
import com.fongmi.android.tv.ui.adapter.BaseDiffCallback;
import com.fongmi.android.tv.ui.base.BaseFragment;
import com.fongmi.android.tv.ui.custom.CustomRowPresenter;
import com.fongmi.android.tv.ui.custom.CustomScroller;
@ -129,15 +129,8 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
private void setViewModel() {
mViewModel = new ViewModelProvider(this).get(SiteViewModel.class);
mViewModel.result.observe(getViewLifecycleOwner(), this::setAdapter);
mViewModel.action.observe(getViewLifecycleOwner(), result -> Notify.show(result.getMsg()));
mViewModel.result.observe(getViewLifecycleOwner(), result -> {
boolean first = mScroller.first();
int size = result.getList().size();
mBinding.progressLayout.showContent(first, size);
if (size > 0) addVideo(result);
mScroller.endLoading(result);
checkMore(size);
});
}
private void setFilters() {
@ -164,13 +157,23 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
private void getVideo(String typeId, String page) {
boolean first = "1".equals(page);
if (first) mLast = null;
if (first) showProgress();
int filterSize = filterVisible ? mFilters.size() : 0;
boolean clear = first && mAdapter.size() > filterSize;
if (first && mAdapter.size() == filterSize) showProgress();
if (clear) mAdapter.removeItems(filterSize, mAdapter.size() - filterSize);
mViewModel.categoryContent(getKey(), typeId, page, true, mExtends);
}
private void setAdapter(Result result) {
boolean first = mScroller.first();
boolean flag = mExtends.isEmpty();
int size = result.getList().size();
mBinding.progressLayout.showContent(first & flag, size);
if (size > 0) addVideo(result);
mScroller.endLoading(result);
checkMore(size);
}
private void addVideo(Result result) {
Style style = result.getStyle(getStyle());
if (style.isList()) mAdapter.addAll(mAdapter.size(), result.getList());
@ -197,7 +200,7 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
List<ListRow> rows = new ArrayList<>();
for (List<Vod> part : Lists.partition(items, Product.getColumn(style))) {
mLast = new ArrayObjectAdapter(new VodPresenter(this, style));
mLast.setItems(part, null);
mLast.setItems(part, new BaseDiffCallback<Vod>());
rows.add(new ListRow(mLast));
}
mAdapter.addAll(mAdapter.size(), rows);
@ -218,7 +221,7 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
private void showFilter() {
List<ListRow> rows = new ArrayList<>();
for (Filter filter : mFilters) rows.add(getRow(filter));
App.post(() -> mBinding.recycler.scrollToPosition(0), 48);
mBinding.recycler.postDelayed(() -> mBinding.recycler.scrollToPosition(0), 48);
mAdapter.addAll(0, rows);
}

@ -7,6 +7,7 @@ import android.text.TextUtils;
import androidx.annotation.Nullable;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.impl.Diffable;
import com.github.catvod.utils.Trans;
import com.google.gson.annotations.SerializedName;
@ -20,7 +21,7 @@ import java.util.HashMap;
import java.util.List;
@Root(strict = false)
public class Class implements Parcelable {
public class Class implements Parcelable, Diffable<Class> {
@Attribute(name = "id", required = false)
@SerializedName(value = "type_id", alternate = "id")
@ -190,4 +191,14 @@ public class Class implements Parcelable {
return new Class[size];
}
};
@Override
public boolean isSameItem(Class other) {
return equals(other);
}
@Override
public boolean isSameContent(Class other) {
return getTypeName().equals(other.getTypeName()) && getTypeFlag().equals(other.getTypeFlag());
}
}

@ -90,7 +90,7 @@ public class Collect implements Parcelable, Diffable<Collect> {
@Override
public boolean isSameItem(Collect other) {
return getSite().equals(other.getSite());
return equals(other);
}
@Override

@ -167,7 +167,7 @@ public class Device implements Diffable<Device> {
public boolean equals(@Nullable Object obj) {
if (this == obj) return true;
if (!(obj instanceof Device it)) return false;
return getUuid().equals(it.getUuid()) && getName().equals(it.getName()) && getType() == it.getType();
return getUuid().equals(it.getUuid());
}
@NonNull
@ -178,12 +178,12 @@ public class Device implements Diffable<Device> {
@Override
public boolean isSameItem(Device other) {
return getUuid().equals(other.getUuid());
return equals(other);
}
@Override
public boolean isSameContent(Device other) {
return equals(other);
return getName().equals(other.getName()) && getType() == other.getType();
}
public static class Sorter implements Comparator<Device> {

@ -6,11 +6,12 @@ import android.os.Parcelable;
import androidx.annotation.Nullable;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.impl.Diffable;
import com.fongmi.android.tv.utils.Util;
import com.github.catvod.utils.Trans;
import com.google.gson.annotations.SerializedName;
public class Episode implements Parcelable {
public class Episode implements Parcelable, Diffable<Episode> {
@SerializedName("name")
private String name;
@ -111,15 +112,11 @@ public class Episode implements Parcelable {
return name.toLowerCase().contains(getName().toLowerCase());
}
public boolean equals(Episode episode) {
return rule1(episode.getName());
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) return true;
if (!(obj instanceof Episode it)) return false;
return getUrl().equals(it.getUrl()) && getName().equals(it.getName()) && getDesc().equals(it.getDesc());
return getName().equals(it.getName());
}
@Override
@ -157,4 +154,14 @@ public class Episode implements Parcelable {
return new Episode[size];
}
};
@Override
public boolean isSameItem(Episode other) {
return equals(other);
}
@Override
public boolean isSameContent(Episode other) {
return getUrl().equals(other.getUrl()) && getDesc().equals(other.getDesc());
}
}

@ -8,6 +8,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.impl.Diffable;
import com.fongmi.android.tv.utils.Util;
import com.github.catvod.utils.Trans;
import com.google.gson.annotations.SerializedName;
@ -20,7 +21,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.Locale;
public class Flag implements Parcelable {
public class Flag implements Parcelable, Diffable<Flag> {
@Attribute(name = "flag", required = false)
@SerializedName("flag")
@ -175,4 +176,14 @@ public class Flag implements Parcelable {
return new Flag[size];
}
};
@Override
public boolean isSameItem(Flag other) {
return equals(other);
}
@Override
public boolean isSameContent(Flag other) {
return equals(other);
}
}

@ -360,7 +360,7 @@ public class History implements Diffable<History> {
public boolean equals(@Nullable Object obj) {
if (this == obj) return true;
if (!(obj instanceof History it)) return false;
return getKey().equals(it.getKey()) && getVodName().equals(it.getVodName()) && getVodPic().equals(it.getVodPic()) && getCreateTime() == it.getCreateTime();
return getKey().equals(it.getKey());
}
@NonNull
@ -371,11 +371,11 @@ public class History implements Diffable<History> {
@Override
public boolean isSameItem(History other) {
return getKey().equals(other.getKey());
return equals(other);
}
@Override
public boolean isSameContent(History other) {
return equals(other);
return getVodName().equals(other.getVodName()) && getVodPic().equals(other.getVodPic()) && getCreateTime() == other.getCreateTime();
}
}

@ -175,16 +175,16 @@ public class Keep implements Diffable<Keep> {
public boolean equals(@Nullable Object obj) {
if (this == obj) return true;
if (!(obj instanceof Keep it)) return false;
return getKey().equals(it.getKey()) && getVodName().equals(it.getVodName()) && getVodPic().equals(it.getVodPic()) && getCreateTime() == it.getCreateTime();
return getKey().equals(it.getKey());
}
@Override
public boolean isSameItem(Keep other) {
return getKey().equals(other.getKey());
return equals(other);
}
@Override
public boolean isSameContent(Keep other) {
return equals(other);
return getVodName().equals(other.getVodName()) && getVodPic().equals(other.getVodPic()) && getCreateTime() == other.getCreateTime();
}
}

@ -7,6 +7,7 @@ import androidx.annotation.Nullable;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.impl.Diffable;
import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.UrlUtil;
import com.github.catvod.utils.Json;
@ -19,7 +20,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Parse {
public class Parse implements Diffable<Parse> {
@SerializedName("name")
private String name;
@ -138,6 +139,16 @@ public class Parse {
return map;
}
@Override
public boolean isSameItem(Parse other) {
return equals(other);
}
@Override
public boolean isSameContent(Parse other) {
return equals(other);
}
public static class Ext {
@SerializedName("flag")

@ -6,10 +6,11 @@ import android.text.TextUtils;
import androidx.annotation.Nullable;
import com.fongmi.android.tv.impl.Diffable;
import com.github.catvod.utils.Trans;
import com.google.gson.annotations.SerializedName;
public class Value implements Parcelable {
public class Value implements Parcelable, Diffable<Value> {
@SerializedName("n")
private String n;
@ -96,4 +97,14 @@ public class Value implements Parcelable {
return new Value[size];
}
};
@Override
public boolean isSameItem(Value other) {
return equals(other);
}
@Override
public boolean isSameContent(Value other) {
return equals(other);
}
}

@ -306,7 +306,7 @@ public class Vod implements Parcelable, Diffable<Vod> {
public boolean equals(@Nullable Object obj) {
if (this == obj) return true;
if (!(obj instanceof Vod it)) return false;
return getVodId().equals(it.getVodId()) && getVodName().equals(it.getVodName()) && getVodPic().equals(it.getVodPic()) && getVodRemarks().equals(it.getVodRemarks()) && getSite().equals(it.getSite());
return getVodId().equals(it.getVodId());
}
@Override
@ -377,11 +377,11 @@ public class Vod implements Parcelable, Diffable<Vod> {
@Override
public boolean isSameItem(Vod other) {
return getVodId().equals(other.getVodId());
return equals(other);
}
@Override
public boolean isSameContent(Vod other) {
return equals(other);
return getVodName().equals(other.getVodName()) && getVodPic().equals(other.getVodPic()) && getVodRemarks().equals(other.getVodRemarks()) && getSite().equals(other.getSite());
}
}

Loading…
Cancel
Save