diff --git a/app/build.gradle b/app/build.gradle
index 5100b95a6..dee949492 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -4,12 +4,13 @@ plugins {
}
android {
- compileSdk 31
+ compileSdk 34
+ namespace = "ru.yandex.practicum.contacts"
defaultConfig {
applicationId "ru.yandex.practicum.contacts"
minSdk 24
- targetSdk 31
+ targetSdk 34
versionCode 1
versionName "1.0"
@@ -33,14 +34,14 @@ android {
dependencies {
- implementation 'androidx.appcompat:appcompat:1.3.0'
- implementation 'com.google.android.material:material:1.4.0'
- implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
- implementation 'androidx.navigation:navigation-fragment:2.3.5'
- implementation 'androidx.navigation:navigation-ui:2.3.5'
- implementation 'com.github.bumptech.glide:glide:4.13.0'
- annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0'
+ implementation 'androidx.appcompat:appcompat:1.7.0'
+ implementation 'com.google.android.material:material:1.12.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+ implementation 'androidx.navigation:navigation-fragment:2.8.3'
+ implementation 'androidx.navigation:navigation-ui:2.8.3'
+ implementation 'com.github.bumptech.glide:glide:4.16.0'
+ annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0'
testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.test.ext:junit:1.1.3'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+ androidTestImplementation 'androidx.test.ext:junit:1.2.1'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f2186e36..7e9bcd174 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -4,6 +4,7 @@
+
extends BottomSheetDialogFragment {
private final Class viewModelClass;
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..0312f4cc3
--- /dev/null
+++ b/app/src/main/java/ru/yandex/practicum/contacts/presentation/base/BaseListDiffCallback.java
@@ -0,0 +1,24 @@
+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 {
+
+ @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..48827c26f
--- /dev/null
+++ b/app/src/main/java/ru/yandex/practicum/contacts/presentation/base/ListDiffInterface.java
@@ -0,0 +1,8 @@
+package ru.yandex.practicum.contacts.presentation.base;
+
+import androidx.annotation.NonNull;
+
+public interface ListDiffInterface {
+ boolean theSameAs(@NonNull T other);
+ 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..ad89d7549 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
@@ -21,12 +21,13 @@
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;
@@ -81,27 +82,10 @@ public void bind(FilterContactTypeUi data) {
final ContactType contactType = FilterContactTypeUtils.toContactType(data.getContactType());
final int iconRes = ContactTypeUtils.getIconRes(contactType);
binding.logo.setVisibility(View.VISIBLE);
- binding.logo.setImageResource(iconRes);
+ binding.logo.setImageResource(iconRes); //
}
}
}
- 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..a432af7ff 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
@@ -1,8 +1,9 @@
package ru.yandex.practicum.contacts.presentation.filter.model;
import androidx.annotation.NonNull;
+import ru.yandex.practicum.contacts.presentation.base.ListDiffInterface;
-public class FilterContactTypeUi {
+public class FilterContactTypeUi implements ListDiffInterface {
private final FilterContactType contactType;
private final boolean selected;
@@ -19,6 +20,10 @@ public FilterContactType getContactType() {
public boolean isSelected() {
return selected;
}
+ @Override
+ public boolean theSameAs(@NonNull FilterContactTypeUi other) {
+ return this.getContactType() == other.getContactType();
+ }
@Override
public boolean equals(Object o) {
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..a32a429b3 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,22 +94,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..07381e9eb 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,9 @@
import java.util.List;
import ru.yandex.practicum.contacts.model.ContactType;
+import ru.yandex.practicum.contacts.presentation.base.ListDiffInterface;
-public class ContactUi {
+public class ContactUi implements ListDiffInterface {
private final String name;
private final String phone;
@@ -40,7 +41,10 @@ public String getPhoto() {
public List getTypes() {
return types;
}
-
+ @Override
+public boolean theSameAs (@NonNull ContactUi other){
+ return this.hashCode() == other.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..d9040429d 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,13 @@
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 +90,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..9f490548b 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
@@ -3,8 +3,9 @@
import androidx.annotation.NonNull;
import ru.yandex.practicum.contacts.presentation.sort.model.SortType;
+import ru.yandex.practicum.contacts.presentation.base.ListDiffInterface;
-public class SortTypeUI {
+public class SortTypeUI implements ListDiffInterface {
private final SortType sortType;
private final boolean selected;
@@ -21,6 +22,10 @@ public SortType getSortType() {
public boolean isSelected() {
return selected;
}
+ @Override
+ public boolean theSameAs(@NonNull SortTypeUI other) {
+ return this.getSortType() == other.getSortType();
+ }
@Override
public boolean equals(Object o) {
diff --git a/build.gradle b/build.gradle
index f5cff798e..32ceac6ea 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,10 +1,6 @@
// 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 'org.jetbrains.kotlin.android' version '1.6.21' apply false
-}
-
-task clean(type: Delete) {
- delete rootProject.buildDir
+ id 'com.android.application' version '8.6.1' apply false
+ id 'com.android.library' version '8.6.1' apply false
+ id 'org.jetbrains.kotlin.android' version '2.0.20' apply false
}
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index ffc1ff25e..934d1b4a0 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
+#Thu Oct 17 01:49:43 MSK 2024
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
distributionPath=wrapper/dists
-zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists