diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadDepictsAdapterFactory.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadDepictsAdapterFactory.java deleted file mode 100644 index ca871ad41..000000000 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadDepictsAdapterFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -package fr.free.nrw.commons.upload; - -import com.pedrogomez.renderers.ListAdapteeCollection; -import com.pedrogomez.renderers.RVRendererAdapter; -import com.pedrogomez.renderers.RendererBuilder; - -import java.util.Collections; -import java.util.List; - -import fr.free.nrw.commons.upload.structure.depictions.DepictedItem; -import fr.free.nrw.commons.upload.structure.depictions.UploadDepictsCallback; - -/** - * Adapter Factory for DepictsClicked Listener - */ - -public class UploadDepictsAdapterFactory { - private final UploadDepictsCallback listener; - - public UploadDepictsAdapterFactory(UploadDepictsCallback listener) { - this.listener = listener; - } - - public RVRendererAdapter create(List itemList) { - RendererBuilder builder = new RendererBuilder() - .bind(DepictedItem.class, new UploadDepictsRenderer(listener)); - ListAdapteeCollection collection = new ListAdapteeCollection<>( - itemList != null ? itemList : Collections.emptyList()); - return new RVRendererAdapter<>(builder, collection); - } -} diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadDepictsRenderer.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadDepictsRenderer.java deleted file mode 100644 index a7cc3fa75..000000000 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadDepictsRenderer.java +++ /dev/null @@ -1,87 +0,0 @@ -package fr.free.nrw.commons.upload; - -import android.net.Uri; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.CheckBox; -import android.widget.TextView; -import butterknife.BindView; -import butterknife.ButterKnife; -import com.facebook.common.util.UriUtil; -import com.facebook.drawee.view.SimpleDraweeView; -import com.pedrogomez.renderers.Renderer; -import fr.free.nrw.commons.R; -import fr.free.nrw.commons.upload.structure.depictions.DepictedItem; -import fr.free.nrw.commons.upload.structure.depictions.UploadDepictsCallback; - -/** - * Depicts Renderer for setting up inflating layout, - * and setting views for the layout of each depicted Item - */ -public class UploadDepictsRenderer extends Renderer { - private final UploadDepictsCallback listener; - @BindView(R.id.depict_checkbox) - CheckBox checkedView; - @BindView(R.id.depicts_label) - TextView depictsLabel; - @BindView(R.id.description) TextView description; - @BindView(R.id.depicted_image) - SimpleDraweeView imageView; - - public UploadDepictsRenderer(UploadDepictsCallback listener) { - this.listener = listener; - } - - @Override - protected void setUpView(View rootView) { - ButterKnife.bind(this, rootView); - } - - /** - * Setup OnClicklisteners on the views - */ - @Override - protected void hookListeners(View rootView) { - rootView.setOnClickListener(v -> { - DepictedItem item = getContent(); - item.setSelected(!item.isSelected()); - checkedView.setChecked(item.isSelected()); - if (listener != null) { - listener.depictsClicked(item); - } - }); - checkedView.setOnClickListener(v -> { - DepictedItem item = getContent(); - item.setSelected(!item.isSelected()); - checkedView.setChecked(item.isSelected()); - if (listener != null) { - listener.depictsClicked(item); - } - }); - } - - @Override - protected View inflate(LayoutInflater inflater, ViewGroup parent) { - return inflater.inflate(R.layout.layout_upload_depicts_item, parent, false); - } - - /** - * initialise views for every item in the adapter - */ - @Override - public void render() { - DepictedItem item = getContent(); - checkedView.setChecked(item.isSelected()); - depictsLabel.setText(item.getName()); - description.setText(item.getDescription()); - final String imageUrl = item.getImageUrl(); - if (TextUtils.isEmpty(imageUrl)) { - imageView.setImageURI(UriUtil.getUriForResourceId(R.drawable.ic_wikidata_logo_24dp)); - } else { - imageView.setImageURI(Uri.parse(imageUrl)); - } - } - -} diff --git a/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsFragment.java index 8f2a35464..50eca58f6 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsFragment.java @@ -1,7 +1,6 @@ package fr.free.nrw.commons.upload.depicts; import android.os.Bundle; -import android.util.Pair; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -18,27 +17,23 @@ import com.google.android.material.textfield.TextInputEditText; import com.google.android.material.textfield.TextInputLayout; import com.jakewharton.rxbinding2.view.RxView; import com.jakewharton.rxbinding2.widget.RxTextView; -import com.pedrogomez.renderers.RVRendererAdapter; import fr.free.nrw.commons.R; import fr.free.nrw.commons.upload.UploadBaseFragment; -import fr.free.nrw.commons.upload.UploadDepictsAdapterFactory; import fr.free.nrw.commons.upload.structure.depictions.DepictedItem; -import fr.free.nrw.commons.upload.structure.depictions.UploadDepictsCallback; import fr.free.nrw.commons.utils.DialogUtil; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; -import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import javax.inject.Inject; -import org.jetbrains.annotations.NotNull; +import kotlin.Unit; import timber.log.Timber; /** * Fragment for showing depicted items list in Upload activity after media details */ -public class DepictsFragment extends UploadBaseFragment implements DepictsContract.View, UploadDepictsCallback { +public class DepictsFragment extends UploadBaseFragment implements DepictsContract.View { @BindView(R.id.depicts_title) TextView depictsTitle; @@ -53,7 +48,7 @@ public class DepictsFragment extends UploadBaseFragment implements DepictsContra @Inject DepictsContract.UserActionListener presenter; - private RVRendererAdapter adapter; + private UploadDepictsAdapter adapter; private Disposable subscribe; @Nullable @@ -86,8 +81,10 @@ public class DepictsFragment extends UploadBaseFragment implements DepictsContra * Initialise recyclerView and set adapter */ private void initRecyclerView() { - adapter = new UploadDepictsAdapterFactory(this) - .create(new ArrayList<>()); + adapter = new UploadDepictsAdapter(item -> { + presenter.onDepictItemClicked(item); + return Unit.INSTANCE; + }); depictsRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); depictsRecyclerView.setAdapter(adapter); } @@ -137,22 +134,7 @@ public class DepictsFragment extends UploadBaseFragment implements DepictsContra @Override public void setDepictsList(List depictedItemList) { - adapter.clear(); - if (depictedItemList != null) { - adapter.addAll(depictedItemList); - adapter.notifyDataSetChanged(); - } - } - - @Nullable - private Pair returnItemAndPosition(@NotNull DepictedItem depictedItem) { - for (int i = 0; i < adapter.getItemCount(); i++) { - final DepictedItem item = adapter.getItem(i); - if(item.getId().equals(depictedItem.getId())){ - return new Pair<>(item, i); - } - } - return null; + adapter.setItems(depictedItemList); } @OnClick(R.id.depicts_next) @@ -165,11 +147,6 @@ public class DepictsFragment extends UploadBaseFragment implements DepictsContra callback.onPreviousButtonClicked(callback.getIndexInViewFlipper(this)); } - @Override - public void depictsClicked(DepictedItem item) { - presenter.onDepictItemClicked(item); - } - /** * Text change listener for the edit text view of depicts */ diff --git a/app/src/main/java/fr/free/nrw/commons/upload/depicts/UploadDepictsAdapter.kt b/app/src/main/java/fr/free/nrw/commons/upload/depicts/UploadDepictsAdapter.kt new file mode 100644 index 000000000..a3a843afa --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/upload/depicts/UploadDepictsAdapter.kt @@ -0,0 +1,10 @@ +package fr.free.nrw.commons.upload.depicts + +import fr.free.nrw.commons.upload.categories.BaseDelegateAdapter +import fr.free.nrw.commons.upload.structure.depictions.DepictedItem + +class UploadDepictsAdapter(onDepictsClicked: (DepictedItem) -> Unit) : + BaseDelegateAdapter( + uploadDepictsDelegate(onDepictsClicked), + areItemsTheSame = { oldItem, newItem -> oldItem.id == newItem.id } + ) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/depicts/UploadDepictsAdapterDelegates.kt b/app/src/main/java/fr/free/nrw/commons/upload/depicts/UploadDepictsAdapterDelegates.kt new file mode 100644 index 000000000..c73953f53 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/upload/depicts/UploadDepictsAdapterDelegates.kt @@ -0,0 +1,32 @@ +package fr.free.nrw.commons.upload.depicts + +import android.net.Uri +import android.text.TextUtils +import android.view.View +import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateLayoutContainer +import fr.free.nrw.commons.R +import fr.free.nrw.commons.upload.structure.depictions.DepictedItem +import kotlinx.android.synthetic.main.layout_upload_depicts_item.* + + +fun uploadDepictsDelegate(onDepictClicked: (DepictedItem) -> Unit) = + adapterDelegateLayoutContainer(R.layout.layout_upload_depicts_item) { + val onClickListener = { _: View? -> + item.isSelected = !item.isSelected + depict_checkbox.isChecked = item.isSelected + onDepictClicked(item) + } + containerView.setOnClickListener(onClickListener) + depict_checkbox.setOnClickListener(onClickListener) + bind { + depict_checkbox.isChecked = item.isSelected + depicts_label.text = item.name + description.text = item.description + val imageUrl = item.imageUrl + if (TextUtils.isEmpty(imageUrl)) { + depicted_image.setActualImageResource(R.drawable.ic_wikidata_logo_24dp) + } else { + depicted_image.setImageURI(Uri.parse(imageUrl)) + } + } + }