diff --git a/app/src/main/java/ru/yandex/practicum/contacts/presentation/base/BaseListDiffCallback.java b/app/src/main/java/ru/yandex/practicum/contacts/presentation/base/BaseListDiffCallback.java new file mode 100644 index 000000000..d3f4bf029 --- /dev/null +++ b/app/src/main/java/ru/yandex/practicum/contacts/presentation/base/BaseListDiffCallback.java @@ -0,0 +1,23 @@ +package ru.yandex.practicum.contacts.presentation.base; + +import androidx.recyclerview.widget.DiffUtil; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +public class BaseListDiffCallback> extends DiffUtil.ItemCallback { + @Override + public boolean areItemsTheSame(@NonNull T oldItem, @NonNull T newItem) { + return oldItem.theSameAs(newItem); + } + + @Override + public boolean areContentsTheSame(@NonNull T oldItem, @NonNull T newItem) { + return oldItem.equals(newItem); + } + + @Nullable + @Override + public Object getChangePayload(@NonNull T oldItem, @NonNull T newItem) { + return newItem; + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/yandex/practicum/contacts/presentation/base/ListDiffInterface.java b/app/src/main/java/ru/yandex/practicum/contacts/presentation/base/ListDiffInterface.java new file mode 100644 index 000000000..9b4eaffc5 --- /dev/null +++ b/app/src/main/java/ru/yandex/practicum/contacts/presentation/base/ListDiffInterface.java @@ -0,0 +1,6 @@ +package ru.yandex.practicum.contacts.presentation.base; + +public interface ListDiffInterface { + boolean theSameAs(T object); + boolean equals(Object object); +} \ No newline at end of file diff --git a/app/src/main/java/ru/yandex/practicum/contacts/presentation/filter/FilterContactTypeAdapter.java b/app/src/main/java/ru/yandex/practicum/contacts/presentation/filter/FilterContactTypeAdapter.java index 4203bc297..6a95827ca 100644 --- a/app/src/main/java/ru/yandex/practicum/contacts/presentation/filter/FilterContactTypeAdapter.java +++ b/app/src/main/java/ru/yandex/practicum/contacts/presentation/filter/FilterContactTypeAdapter.java @@ -5,11 +5,11 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; + import androidx.recyclerview.widget.AdapterListUpdateCallback; import androidx.recyclerview.widget.AsyncDifferConfig; import androidx.recyclerview.widget.AsyncListDiffer; -import androidx.recyclerview.widget.DiffUtil; + import androidx.recyclerview.widget.RecyclerView; import java.util.List; @@ -21,12 +21,12 @@ import ru.yandex.practicum.contacts.presentation.filter.model.FilterContactTypeUi; import ru.yandex.practicum.contacts.utils.model.ContactTypeUtils; import ru.yandex.practicum.contacts.utils.model.FilterContactTypeUtils; - +import ru.yandex.practicum.contacts.presentation.base.BaseListDiffCallback; public class FilterContactTypeAdapter extends RecyclerView.Adapter { private final AsyncListDiffer differ = new AsyncListDiffer<>( new AdapterListUpdateCallback(this), - new AsyncDifferConfig.Builder<>(new ListDiffCallback()).build() + new AsyncDifferConfig.Builder<>(new BaseListDiffCallback()).build() ); private final Consumer clickListener; @@ -86,22 +86,5 @@ public void bind(FilterContactTypeUi data) { } } - static class ListDiffCallback extends DiffUtil.ItemCallback { - - @Override - public boolean areItemsTheSame(@NonNull FilterContactTypeUi oldItem, @NonNull FilterContactTypeUi newItem) { - return oldItem.getContactType() == newItem.getContactType(); - } - @Override - public boolean areContentsTheSame(@NonNull FilterContactTypeUi oldItem, @NonNull FilterContactTypeUi newItem) { - return oldItem.equals(newItem); - } - - @Nullable - @Override - public Object getChangePayload(@NonNull FilterContactTypeUi oldItem, @NonNull FilterContactTypeUi newItem) { - return newItem; - } - } } diff --git a/app/src/main/java/ru/yandex/practicum/contacts/presentation/filter/model/FilterContactTypeUi.java b/app/src/main/java/ru/yandex/practicum/contacts/presentation/filter/model/FilterContactTypeUi.java index fbb187fdf..6eafe9bc1 100644 --- a/app/src/main/java/ru/yandex/practicum/contacts/presentation/filter/model/FilterContactTypeUi.java +++ b/app/src/main/java/ru/yandex/practicum/contacts/presentation/filter/model/FilterContactTypeUi.java @@ -2,7 +2,10 @@ import androidx.annotation.NonNull; -public class FilterContactTypeUi { +import ru.yandex.practicum.contacts.presentation.base.ListDiffInterface; + +public class FilterContactTypeUi implements ListDiffInterface { + private final FilterContactType contactType; private final boolean selected; @@ -37,4 +40,8 @@ public int hashCode() { result = 31 * result + (selected ? 1 : 0); return result; } + @Override + public boolean theSameAs(FilterContactTypeUi object){ + return this.getContactType() == object.getContactType(); + } } diff --git a/app/src/main/java/ru/yandex/practicum/contacts/presentation/main/ContactAdapter.java b/app/src/main/java/ru/yandex/practicum/contacts/presentation/main/ContactAdapter.java index 9c2317248..64d12f5db 100644 --- a/app/src/main/java/ru/yandex/practicum/contacts/presentation/main/ContactAdapter.java +++ b/app/src/main/java/ru/yandex/practicum/contacts/presentation/main/ContactAdapter.java @@ -13,7 +13,7 @@ import androidx.recyclerview.widget.AdapterListUpdateCallback; import androidx.recyclerview.widget.AsyncDifferConfig; import androidx.recyclerview.widget.AsyncListDiffer; -import androidx.recyclerview.widget.DiffUtil; + import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; @@ -23,12 +23,12 @@ import ru.yandex.practicum.contacts.R; import ru.yandex.practicum.contacts.databinding.ItemContactBinding; - +import ru.yandex.practicum.contacts.presentation.base.BaseListDiffCallback; public class ContactAdapter extends RecyclerView.Adapter { private final AsyncListDiffer differ = new AsyncListDiffer<>( new AdapterListUpdateCallback(this), - new AsyncDifferConfig.Builder<>(new ListDiffCallback()).build() + new AsyncDifferConfig.Builder<>(new BaseListDiffCallback()).build() ); @NonNull @@ -93,22 +93,5 @@ private void loadAvatar(ContactUi contact) { } } - static class ListDiffCallback extends DiffUtil.ItemCallback { - - @Override - public boolean areItemsTheSame(@NonNull ContactUi oldItem, @NonNull ContactUi newItem) { - return oldItem.hashCode() == newItem.hashCode(); - } - - @Override - public boolean areContentsTheSame(@NonNull ContactUi oldItem, @NonNull ContactUi newItem) { - return oldItem.equals(newItem); - } - @Nullable - @Override - public Object getChangePayload(@NonNull ContactUi oldItem, @NonNull ContactUi newItem) { - return newItem; - } - } } diff --git a/app/src/main/java/ru/yandex/practicum/contacts/presentation/main/ContactUi.java b/app/src/main/java/ru/yandex/practicum/contacts/presentation/main/ContactUi.java index 4b2f216e8..76067a26c 100644 --- a/app/src/main/java/ru/yandex/practicum/contacts/presentation/main/ContactUi.java +++ b/app/src/main/java/ru/yandex/practicum/contacts/presentation/main/ContactUi.java @@ -6,7 +6,9 @@ import ru.yandex.practicum.contacts.model.ContactType; -public class ContactUi { +import ru.yandex.practicum.contacts.presentation.base.ListDiffInterface; + +public class ContactUi implements ListDiffInterface { private final String name; private final String phone; @@ -62,4 +64,8 @@ public int hashCode() { result = 31 * result + types.hashCode(); return result; } + @Override + public boolean theSameAs(ContactUi object){ + return this.hashCode() == object.hashCode(); + } } diff --git a/app/src/main/java/ru/yandex/practicum/contacts/presentation/sort/SortTypeAdapter.java b/app/src/main/java/ru/yandex/practicum/contacts/presentation/sort/SortTypeAdapter.java index fde5f59c8..e0413d000 100644 --- a/app/src/main/java/ru/yandex/practicum/contacts/presentation/sort/SortTypeAdapter.java +++ b/app/src/main/java/ru/yandex/practicum/contacts/presentation/sort/SortTypeAdapter.java @@ -18,12 +18,12 @@ import ru.yandex.practicum.contacts.R; import ru.yandex.practicum.contacts.databinding.ItemSortBinding; import ru.yandex.practicum.contacts.presentation.sort.model.SortType; - +import ru.yandex.practicum.contacts.presentation.base.BaseListDiffCallback; public class SortTypeAdapter extends RecyclerView.Adapter { private final AsyncListDiffer differ = new AsyncListDiffer<>( new AdapterListUpdateCallback(this), - new AsyncDifferConfig.Builder<>(new ListDiffCallback()).build() + new AsyncDifferConfig.Builder<>(new BaseListDiffCallback()).build() ); private final Consumer clickListener; @@ -89,22 +89,5 @@ private int resource(SortType sortType) { } } - static class ListDiffCallback extends DiffUtil.ItemCallback { - - @Override - public boolean areItemsTheSame(@NonNull SortTypeUI oldItem, @NonNull SortTypeUI newItem) { - return oldItem.getSortType() == newItem.getSortType(); - } - @Override - public boolean areContentsTheSame(@NonNull SortTypeUI oldItem, @NonNull SortTypeUI newItem) { - return oldItem.equals(newItem); - } - - @Nullable - @Override - public Object getChangePayload(@NonNull SortTypeUI oldItem, @NonNull SortTypeUI newItem) { - return newItem; - } - } } diff --git a/app/src/main/java/ru/yandex/practicum/contacts/presentation/sort/SortTypeUI.java b/app/src/main/java/ru/yandex/practicum/contacts/presentation/sort/SortTypeUI.java index eb71f27cd..694922e36 100644 --- a/app/src/main/java/ru/yandex/practicum/contacts/presentation/sort/SortTypeUI.java +++ b/app/src/main/java/ru/yandex/practicum/contacts/presentation/sort/SortTypeUI.java @@ -4,7 +4,9 @@ import ru.yandex.practicum.contacts.presentation.sort.model.SortType; -public class SortTypeUI { +import ru.yandex.practicum.contacts.presentation.base.ListDiffInterface; + +public class SortTypeUI implements ListDiffInterface { private final SortType sortType; private final boolean selected; @@ -39,4 +41,8 @@ public int hashCode() { result = 31 * result + (selected ? 1 : 0); return result; } + @Override + public boolean theSameAs(SortTypeUI object){ + return this.getSortType() == object.getSortType(); + } }