Skip to content

Commit c7d25e1

Browse files
committed
#3468 Switch from RvRenderer to AdapterDelegates - replace UploadCategoryDepictionsRenderer
1 parent 88c307d commit c7d25e1

9 files changed

+82
-187
lines changed

app/src/main/java/fr/free/nrw/commons/category/CategoriesRenderer.java

-55
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,19 @@
11
package fr.free.nrw.commons.explore.depictions
22

33
import androidx.recyclerview.widget.DiffUtil
4-
import com.hannesdorfmann.adapterdelegates4.AsyncListDifferDelegationAdapter
4+
import fr.free.nrw.commons.upload.categories.BaseAdapter
55
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem
66

77

8-
class DepictionAdapter(clickListener: (DepictedItem) -> Unit) :
9-
AsyncListDifferDelegationAdapter<DepictedItem>(
10-
DiffUtil,
11-
depictionDelegate(clickListener)
12-
) {
8+
class DepictionAdapter(clickListener: (DepictedItem) -> Unit) : BaseAdapter<DepictedItem>(
9+
object : DiffUtil.ItemCallback<DepictedItem>() {
10+
override fun areItemsTheSame(oldItem: DepictedItem, newItem: DepictedItem) =
11+
oldItem.id == newItem.id
1312

14-
fun addAll(newResults: List<DepictedItem>) {
15-
items = (items ?: emptyList<DepictedItem>()) + newResults
16-
}
13+
override fun areContentsTheSame(oldItem: DepictedItem, newItem: DepictedItem) =
14+
oldItem == newItem
15+
},
16+
depictionDelegate(clickListener)
17+
)
1718

18-
fun clear() {
19-
items = emptyList()
20-
}
2119

22-
}
23-
24-
object DiffUtil : DiffUtil.ItemCallback<DepictedItem>() {
25-
override fun areItemsTheSame(oldItem: DepictedItem, newItem: DepictedItem) =
26-
oldItem.id == newItem.id
27-
28-
override fun areContentsTheSame(oldItem: DepictedItem, newItem: DepictedItem) =
29-
oldItem == newItem
30-
}

app/src/main/java/fr/free/nrw/commons/upload/UploadCategoriesAdapterFactory.java

-27
This file was deleted.

app/src/main/java/fr/free/nrw/commons/upload/UploadCategoriesRenderer.java

-59
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package fr.free.nrw.commons.upload.categories
2+
3+
import androidx.recyclerview.widget.DiffUtil
4+
import com.hannesdorfmann.adapterdelegates4.AdapterDelegate
5+
import com.hannesdorfmann.adapterdelegates4.AsyncListDifferDelegationAdapter
6+
7+
8+
abstract class BaseAdapter<T>(
9+
itemCallback: DiffUtil.ItemCallback<T>,
10+
vararg adapterDelegate: AdapterDelegate<List<T>>
11+
) : AsyncListDifferDelegationAdapter<T>(itemCallback, *adapterDelegate) {
12+
fun addAll(newResults: List<T>) {
13+
items = (items ?: emptyList<T>()) + newResults
14+
}
15+
16+
fun clear() {
17+
items = emptyList()
18+
}
19+
}
20+

app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoriesFragment.java

+12-23
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,19 @@
1717
import com.google.android.material.textfield.TextInputLayout;
1818
import com.jakewharton.rxbinding2.view.RxView;
1919
import com.jakewharton.rxbinding2.widget.RxTextView;
20-
import com.pedrogomez.renderers.RVRendererAdapter;
2120
import fr.free.nrw.commons.R;
22-
import fr.free.nrw.commons.category.CategoryClickedListener;
2321
import fr.free.nrw.commons.category.CategoryItem;
2422
import fr.free.nrw.commons.upload.UploadBaseFragment;
25-
import fr.free.nrw.commons.upload.UploadCategoriesAdapterFactory;
2623
import fr.free.nrw.commons.utils.DialogUtil;
2724
import io.reactivex.android.schedulers.AndroidSchedulers;
2825
import io.reactivex.disposables.Disposable;
29-
import java.util.ArrayList;
3026
import java.util.List;
3127
import java.util.concurrent.TimeUnit;
3228
import javax.inject.Inject;
29+
import kotlin.Unit;
3330
import timber.log.Timber;
3431

35-
public class UploadCategoriesFragment extends UploadBaseFragment implements CategoriesContract.View,
36-
CategoryClickedListener {
32+
public class UploadCategoriesFragment extends UploadBaseFragment implements CategoriesContract.View {
3733

3834
@BindView(R.id.tv_title)
3935
TextView tvTitle;
@@ -48,16 +44,11 @@ public class UploadCategoriesFragment extends UploadBaseFragment implements Cate
4844

4945
@Inject
5046
CategoriesContract.UserActionListener presenter;
51-
private RVRendererAdapter<CategoryItem> adapter;
47+
private UploadCategoryAdapter adapter;
5248
private Disposable subscribe;
5349
private List<CategoryItem> categories;
5450
private boolean isVisible;
5551

56-
@Override
57-
public void onCreate(@Nullable Bundle savedInstanceState) {
58-
super.onCreate(savedInstanceState);
59-
}
60-
6152
@Nullable
6253
@Override
6354
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@@ -103,8 +94,10 @@ private void searchForCategory(String query) {
10394
}
10495

10596
private void initRecyclerView() {
106-
adapter = new UploadCategoriesAdapterFactory(this)
107-
.create(new ArrayList<>());
97+
adapter = new UploadCategoryAdapter(categoryItem -> {
98+
presenter.onCategoryItemClicked(categoryItem);
99+
return Unit.INSTANCE;
100+
});
108101
rvCategories.setLayoutManager(new LinearLayoutManager(getContext()));
109102
rvCategories.setAdapter(adapter);
110103
}
@@ -133,11 +126,12 @@ public void showError(int stringResourceId) {
133126

134127
@Override
135128
public void setCategories(List<CategoryItem> categories) {
136-
adapter.clear();
137-
if (categories != null) {
129+
if(categories==null) {
130+
adapter.clear();
131+
}
132+
else{
138133
this.categories = categories;
139-
adapter.addAll(categories);
140-
adapter.notifyDataSetChanged();
134+
adapter.setItems(categories);
141135
}
142136
}
143137

@@ -168,11 +162,6 @@ public void onPreviousButtonClicked() {
168162
callback.onPreviousButtonClicked(callback.getIndexInViewFlipper(this));
169163
}
170164

171-
@Override
172-
public void categoryClicked(CategoryItem item) {
173-
presenter.onCategoryItemClicked(item);
174-
}
175-
176165
@Override
177166
public void setUserVisibleHint(boolean isVisibleToUser) {
178167
super.setUserVisibleHint(isVisibleToUser);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package fr.free.nrw.commons.upload.categories
2+
3+
import androidx.recyclerview.widget.DiffUtil
4+
import fr.free.nrw.commons.category.CategoryItem
5+
6+
class UploadCategoryAdapter(onCategoryClicked: (CategoryItem) -> Unit) :
7+
BaseAdapter<CategoryItem>(
8+
object : DiffUtil.ItemCallback<CategoryItem>() {
9+
override fun areItemsTheSame(oldItem: CategoryItem, newItem: CategoryItem) =
10+
oldItem.name == newItem.name
11+
12+
override fun areContentsTheSame(oldItem: CategoryItem, newItem: CategoryItem) =
13+
oldItem.name == newItem.name && oldItem.isSelected == newItem.isSelected
14+
},
15+
uploadCategoryDelegate(onCategoryClicked)
16+
)
17+
18+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package fr.free.nrw.commons.upload.categories
2+
3+
import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateLayoutContainer
4+
import fr.free.nrw.commons.R
5+
import fr.free.nrw.commons.category.CategoryItem
6+
import kotlinx.android.synthetic.main.layout_upload_categories_item.*
7+
8+
9+
fun uploadCategoryDelegate(onCategoryClicked: (CategoryItem) -> Unit) =
10+
adapterDelegateLayoutContainer<CategoryItem, CategoryItem>(R.layout.layout_upload_categories_item) {
11+
containerView.setOnClickListener {
12+
item.isSelected = !item.isSelected
13+
uploadCategoryCheckbox.isChecked = item.isSelected
14+
onCategoryClicked(item)
15+
}
16+
bind {
17+
uploadCategoryCheckbox.isChecked = item.isSelected
18+
uploadCategoryCheckbox.text = item.name
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
3-
android:id="@+id/tvName"
3+
android:id="@+id/uploadCategoryCheckbox"
44
android:layout_width="match_parent"
55
android:layout_height="wrap_content"
66
android:checkMark="?android:attr/textCheckMark"
77
android:checked="false"
88
android:gravity="center_vertical"
9-
android:padding="@dimen/tiny_gap"/>
9+
android:padding="@dimen/tiny_gap"/>

0 commit comments

Comments
 (0)