From 3aec08c953edb7e91fb50f96a5a32e5634052098 Mon Sep 17 00:00:00 2001 From: ValentinPside <91324342+ValentinPside@users.noreply.github.com> Date: Wed, 1 Feb 2023 08:28:59 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=E2=84=96?= =?UTF-8?q?2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 3 +-- .../base/BaseListDiffCallback.java | 26 +++++++++++++++++++ .../presentation/base/ListDiffInterface.java | 6 +++++ .../filter/FilterContactTypeAdapter.java | 7 ++--- .../filter/model/FilterContactTypeUi.java | 10 ++++++- .../presentation/main/ContactAdapter.java | 7 ++--- .../contacts/presentation/main/ContactUi.java | 9 ++++++- .../presentation/sort/SortTypeAdapter.java | 7 ++--- .../presentation/sort/SortTypeUI.java | 8 +++++- build.gradle | 4 +-- gradle/wrapper/gradle-wrapper.properties | 2 +- 12 files changed, 73 insertions(+), 17 deletions(-) create mode 100644 app/src/main/java/ru/yandex/practicum/contacts/presentation/base/BaseListDiffCallback.java create mode 100644 app/src/main/java/ru/yandex/practicum/contacts/presentation/base/ListDiffInterface.java diff --git a/app/build.gradle b/app/build.gradle index 5100b95a6..a86852062 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,6 +29,7 @@ android { buildFeatures { viewBinding true } + namespace 'ru.yandex.practicum.contacts' } dependencies { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5f2186e36..a8137e4e3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + 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..d41ca3995 --- /dev/null +++ b/app/src/main/java/ru/yandex/practicum/contacts/presentation/base/BaseListDiffCallback.java @@ -0,0 +1,26 @@ +package ru.yandex.practicum.contacts.presentation.base; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.DiffUtil; + +public class BaseListDiffCallback> extends DiffUtil.ItemCallback{ + + private T t; + + @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; + } +} 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..ad0233f36 --- /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 t); + boolean equals(Object o); +} 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..03a21c85c 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 @@ -17,6 +17,7 @@ import ru.yandex.practicum.contacts.databinding.ItemFilterBinding; import ru.yandex.practicum.contacts.model.ContactType; +import ru.yandex.practicum.contacts.presentation.base.BaseListDiffCallback; import ru.yandex.practicum.contacts.presentation.filter.model.FilterContactType; import ru.yandex.practicum.contacts.presentation.filter.model.FilterContactTypeUi; import ru.yandex.practicum.contacts.utils.model.ContactTypeUtils; @@ -26,7 +27,7 @@ public class FilterContactTypeAdapter extends RecyclerView.Adapter differ = new AsyncListDiffer<>( new AdapterListUpdateCallback(this), - new AsyncDifferConfig.Builder<>(new ListDiffCallback()).build() + new AsyncDifferConfig.Builder<>(new BaseListDiffCallback()).build() ); private final Consumer clickListener; @@ -86,7 +87,7 @@ public void bind(FilterContactTypeUi data) { } } - static class ListDiffCallback extends DiffUtil.ItemCallback { + /*static class ListDiffCallback extends DiffUtil.ItemCallback { @Override public boolean areItemsTheSame(@NonNull FilterContactTypeUi oldItem, @NonNull FilterContactTypeUi newItem) { @@ -103,5 +104,5 @@ public boolean areContentsTheSame(@NonNull FilterContactTypeUi oldItem, @NonNull 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..ffc8d2297 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; +import ru.yandex.practicum.contacts.presentation.main.ContactUi; + +public class FilterContactTypeUi implements ListDiffInterface { private final FilterContactType contactType; private final boolean selected; @@ -20,6 +23,11 @@ public boolean isSelected() { return selected; } + @Override + public boolean theSameAs(FilterContactTypeUi filterContactTypeUi) { + return this.hashCode() == filterContactTypeUi.hashCode(); + } + @Override public boolean equals(Object o) { if (this == o) return true; 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..92604e29c 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 @@ -23,12 +23,13 @@ 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,7 +94,7 @@ private void loadAvatar(ContactUi contact) { } } - static class ListDiffCallback extends DiffUtil.ItemCallback { + /*static class ListDiffCallback extends DiffUtil.ItemCallback { @Override public boolean areItemsTheSame(@NonNull ContactUi oldItem, @NonNull ContactUi newItem) { @@ -110,5 +111,5 @@ public boolean areContentsTheSame(@NonNull ContactUi oldItem, @NonNull ContactUi 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..e84f49396 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 @@ -5,8 +5,10 @@ import java.util.List; import ru.yandex.practicum.contacts.model.ContactType; +import ru.yandex.practicum.contacts.presentation.base.ListDiffInterface; +import ru.yandex.practicum.contacts.presentation.sort.SortTypeUI; -public class ContactUi { +public class ContactUi implements ListDiffInterface { private final String name; private final String phone; @@ -41,6 +43,11 @@ public List getTypes() { return types; } + @Override + public boolean theSameAs(ContactUi contactUi) { + return this.hashCode() == contactUi.hashCode(); + } + @Override public boolean equals(Object o) { if (this == o) return true; 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..23bf76b95 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 @@ -17,13 +17,14 @@ import ru.yandex.practicum.contacts.R; import ru.yandex.practicum.contacts.databinding.ItemSortBinding; +import ru.yandex.practicum.contacts.presentation.base.BaseListDiffCallback; import ru.yandex.practicum.contacts.presentation.sort.model.SortType; 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,7 +90,7 @@ private int resource(SortType sortType) { } } - static class ListDiffCallback extends DiffUtil.ItemCallback { + /*static class ListDiffCallback extends DiffUtil.ItemCallback { @Override public boolean areItemsTheSame(@NonNull SortTypeUI oldItem, @NonNull SortTypeUI newItem) { @@ -106,5 +107,5 @@ public boolean areContentsTheSame(@NonNull SortTypeUI oldItem, @NonNull SortType 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..86938dd36 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 @@ -2,9 +2,10 @@ import androidx.annotation.NonNull; +import ru.yandex.practicum.contacts.presentation.base.ListDiffInterface; import ru.yandex.practicum.contacts.presentation.sort.model.SortType; -public class SortTypeUI { +public class SortTypeUI implements ListDiffInterface { private final SortType sortType; private final boolean selected; @@ -22,6 +23,11 @@ public boolean isSelected() { return selected; } + @Override + public boolean theSameAs(SortTypeUI sortTypeUI) { + return this.hashCode() == sortTypeUI.hashCode(); + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/build.gradle b/build.gradle index f5cff798e..2290e642a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id 'com.android.application' version '7.1.3' apply false - id 'com.android.library' version '7.1.3' apply false + id 'com.android.application' version '7.3.1' apply false + id 'com.android.library' version '7.3.1' apply false id 'org.jetbrains.kotlin.android' version '1.6.21' apply false } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ffc1ff25e..0894265f9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Apr 26 22:12:06 CEST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME From 378a1cc2a629974a304f680697f2fcd093a0e01c Mon Sep 17 00:00:00 2001 From: ValentinPside <91324342+ValentinPside@users.noreply.github.com> Date: Thu, 2 Feb 2023 15:03:20 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=E2=84=96?= =?UTF-8?q?2=20(=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Устранены критические замечания: - в классе FilterContactTypeUi исправлена реализация метода theSameAs() - в классе SortTypeUI исправлена реализация метода theSameAs() Дополнительно в адаптерах удалены неиспользуемые методы, которые ранее были закомментированы, а из класса BaseListDiffCallback удалена неиспользуемая переменная. --- .../base/BaseListDiffCallback.java | 1 - .../filter/FilterContactTypeAdapter.java | 19 ------------------- .../filter/model/FilterContactTypeUi.java | 2 +- .../presentation/main/ContactAdapter.java | 19 ------------------- .../presentation/sort/SortTypeAdapter.java | 19 ------------------- .../presentation/sort/SortTypeUI.java | 2 +- 6 files changed, 2 insertions(+), 60 deletions(-) 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 index d41ca3995..c4af97eef 100644 --- 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 @@ -6,7 +6,6 @@ public class BaseListDiffCallback> extends DiffUtil.ItemCallback{ - private T t; @Override public boolean areItemsTheSame(@NonNull T oldItem, @NonNull T newItem) { 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 03a21c85c..42049a5a7 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 @@ -86,23 +86,4 @@ 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 ffc8d2297..ca2a6f27f 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 @@ -25,7 +25,7 @@ public boolean isSelected() { @Override public boolean theSameAs(FilterContactTypeUi filterContactTypeUi) { - return this.hashCode() == filterContactTypeUi.hashCode(); + return this.getContactType() == filterContactTypeUi.getContactType(); } @Override 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 92604e29c..e075245a1 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 @@ -93,23 +93,4 @@ private void loadAvatar(ContactUi contact) { .into(binding.contactPhoto); } } - - /*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/sort/SortTypeAdapter.java b/app/src/main/java/ru/yandex/practicum/contacts/presentation/sort/SortTypeAdapter.java index 23bf76b95..2797a9fe0 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 @@ -89,23 +89,4 @@ 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 86938dd36..4fbee9dc9 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 @@ -25,7 +25,7 @@ public boolean isSelected() { @Override public boolean theSameAs(SortTypeUI sortTypeUI) { - return this.hashCode() == sortTypeUI.hashCode(); + return this.getSortType() == sortTypeUI.getSortType(); } @Override