diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Class.java b/app/src/main/java/com/fongmi/android/tv/bean/Class.java index 548b9c5d5..823334d95 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Class.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Class.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Objects; @Root(strict = false) public class Class implements Parcelable, Diffable { @@ -149,6 +150,11 @@ public class Class implements Parcelable, Diffable { return getTypeId().equals(it.getTypeId()); } + @Override + public int hashCode() { + return Objects.hashCode(getTypeId()); + } + @Override public int describeContents() { return 0; diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Collect.java b/app/src/main/java/com/fongmi/android/tv/bean/Collect.java index 9e5a603dd..1f2a3a457 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Collect.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Collect.java @@ -11,6 +11,7 @@ import com.fongmi.android.tv.utils.ResUtil; import java.util.ArrayList; import java.util.List; +import java.util.Objects; public class Collect implements Parcelable, Diffable { @@ -68,6 +69,11 @@ public class Collect implements Parcelable, Diffable { return getSite().equals(it.getSite()); } + @Override + public int hashCode() { + return Objects.hashCode(getSite()); + } + @Override public int describeContents() { return 0; diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Device.java b/app/src/main/java/com/fongmi/android/tv/bean/Device.java index a46d46fd7..8378f030f 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Device.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Device.java @@ -20,6 +20,7 @@ import com.google.gson.annotations.SerializedName; import java.util.Comparator; import java.util.List; +import java.util.Objects; @Entity(indices = @Index(value = {"uuid", "name"}, unique = true)) public class Device implements Diffable { @@ -170,6 +171,11 @@ public class Device implements Diffable { return getUuid().equals(it.getUuid()); } + @Override + public int hashCode() { + return Objects.hashCode(getUuid()); + } + @NonNull @Override public String toString() { diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Episode.java b/app/src/main/java/com/fongmi/android/tv/bean/Episode.java index 850b3c926..5f19c44a8 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Episode.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Episode.java @@ -11,6 +11,8 @@ import com.fongmi.android.tv.utils.Util; import com.github.catvod.utils.Trans; import com.google.gson.annotations.SerializedName; +import java.util.Objects; + public class Episode implements Parcelable, Diffable { @SerializedName("name") @@ -119,6 +121,11 @@ public class Episode implements Parcelable, Diffable { return getName().equals(it.getName()); } + @Override + public int hashCode() { + return Objects.hashCode(getName()); + } + @Override public int describeContents() { return 0; diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Flag.java b/app/src/main/java/com/fongmi/android/tv/bean/Flag.java index a77640e8e..e0dd05dcd 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Flag.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Flag.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; +import java.util.Objects; public class Flag implements Parcelable, Diffable { @@ -135,6 +136,11 @@ public class Flag implements Parcelable, Diffable { return getFlag().equals(it.getFlag()); } + @Override + public int hashCode() { + return Objects.hashCode(getFlag()); + } + @NonNull @Override public String toString() { diff --git a/app/src/main/java/com/fongmi/android/tv/bean/History.java b/app/src/main/java/com/fongmi/android/tv/bean/History.java index e7309f82f..3bd82f607 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/History.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/History.java @@ -22,6 +22,7 @@ import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.concurrent.TimeUnit; @Entity @@ -363,6 +364,11 @@ public class History implements Diffable { return getKey().equals(it.getKey()); } + @Override + public int hashCode() { + return Objects.hashCode(getKey()); + } + @NonNull @Override public String toString() { diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Keep.java b/app/src/main/java/com/fongmi/android/tv/bean/Keep.java index aaa5d1b36..24f2764ef 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Keep.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Keep.java @@ -16,6 +16,7 @@ import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.Collections; import java.util.List; +import java.util.Objects; @Entity public class Keep implements Diffable { @@ -178,6 +179,11 @@ public class Keep implements Diffable { return getKey().equals(it.getKey()); } + @Override + public int hashCode() { + return Objects.hashCode(getKey()); + } + @Override public boolean isSameItem(Keep other) { return equals(other); diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Parse.java b/app/src/main/java/com/fongmi/android/tv/bean/Parse.java index d0848c0b8..468bfa7d9 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Parse.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Parse.java @@ -19,6 +19,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; public class Parse implements Diffable { @@ -118,13 +119,6 @@ public class Parse implements Diffable { return getType() == 0 && getUrl().isEmpty(); } - @Override - public boolean equals(@Nullable Object obj) { - if (this == obj) return true; - if (!(obj instanceof Parse it)) return false; - return getName().equals(it.getName()); - } - public String extUrl() { int index = getUrl().indexOf("?"); if (getExt().isEmpty() || index == -1) return getUrl(); @@ -139,6 +133,18 @@ public class Parse implements Diffable { return map; } + @Override + public boolean equals(@Nullable Object obj) { + if (this == obj) return true; + if (!(obj instanceof Parse it)) return false; + return getName().equals(it.getName()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getName()); + } + @Override public boolean isSameItem(Parse other) { return equals(other); diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Value.java b/app/src/main/java/com/fongmi/android/tv/bean/Value.java index 94ceb157d..d874f83cb 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Value.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Value.java @@ -10,6 +10,8 @@ import com.fongmi.android.tv.impl.Diffable; import com.github.catvod.utils.Trans; import com.google.gson.annotations.SerializedName; +import java.util.Objects; + public class Value implements Parcelable, Diffable { @SerializedName("n") @@ -68,6 +70,11 @@ public class Value implements Parcelable, Diffable { return getV().equals(it.getV()); } + @Override + public int hashCode() { + return Objects.hashCode(getV()); + } + @Override public int describeContents() { return 0; diff --git a/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java b/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java index de3837cd3..eb1a5250c 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java @@ -10,7 +10,9 @@ import com.fongmi.android.tv.impl.Diffable; import java.util.ArrayList; import java.util.Comparator; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Objects; public abstract class BaseDiffAdapter, VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter { @@ -33,26 +35,22 @@ public abstract class BaseDiffAdapter, VH extends Recycler } public void setItems(List items, Runnable runnable) { - if (items == null || items.isEmpty()) { - differ.submitList(new ArrayList<>(), runnable); - } else { - differ.submitList(items, runnable); - } + differ.submitList(Objects.requireNonNullElseGet(items, ArrayList::new), runnable); } - public void addItem(T item, Runnable runnable) { + public void add(T item, Runnable runnable) { List current = new ArrayList<>(getItems()); current.add(item); setItems(current, runnable); } - public void addItems(List items) { - List current = new ArrayList<>(getItems()); + public void addAll(List items) { + LinkedHashSet current = new LinkedHashSet<>(getItems()); current.addAll(items); - setItems(current); + setItems(new ArrayList<>(current)); } - public void addItemSort(T item, Comparator comparator) { + public void sort(T item, Comparator comparator) { List current = new ArrayList<>(getItems()); current.add(item); if (current.size() >= 2) current.sort(comparator); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java index b7fd2837b..e34236c59 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java @@ -163,12 +163,12 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe @Override public void onFind(Device device) { - adapter.addItemSort(device, sorter); + adapter.sort(device, sorter); } @Override public void onDeviceAdded(@NonNull org.fourthline.cling.model.meta.Device device) { - adapter.addItemSort(DLNADevice.get().add(device), sorter); + adapter.sort(DLNADevice.get().add(device), sorter); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SyncDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SyncDialog.java index a0f9587fd..19e61613c 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SyncDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SyncDialog.java @@ -158,7 +158,7 @@ public class SyncDialog extends BaseDialog implements DeviceAdapter.OnClickListe @Override public void onFind(Device device) { - adapter.addItemSort(device, sorter); + adapter.sort(device, sorter); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java index bed174ac7..a705bd81c 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java @@ -140,8 +140,8 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle private void setCollect(Result result) { if (result == null) return; - if (mCollectAdapter.getPosition() == 0) mSearchAdapter.addItems(result.getList()); - mCollectAdapter.addItem(Collect.create(result.getList()), this::setWidth); + if (mCollectAdapter.getPosition() == 0) mSearchAdapter.addAll(result.getList()); + mCollectAdapter.add(Collect.create(result.getList()), this::setWidth); mCollectAdapter.add(result.getList()); } @@ -164,7 +164,7 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle if (result == null) return; boolean same = !result.getList().isEmpty() && mCollectAdapter.getActivated().getSite().equals(result.getList().get(0).getSite()); if (same) mCollectAdapter.getActivated().getList().addAll(result.getList()); - if (same) mSearchAdapter.addItems(result.getList()); + if (same) mSearchAdapter.addAll(result.getList()); mScroller.endLoading(result); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java index 9ab5b2c80..932d21589 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java @@ -158,7 +158,7 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac private void addVideo(Result result) { Style style = result.getList().get(0).getStyle(getStyle()); if (!style.equals(mAdapter.getStyle())) setStyle(style); - mAdapter.addItems(result.getList()); + mAdapter.addAll(result.getList()); } private void checkMore(int count) {