mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 04:43:54 +01:00
#3468 Switch from RvRenderer to AdapterDelegates - replace UploadDepictsRenderer
This commit is contained in:
parent
8a39fddde8
commit
456b86454e
5 changed files with 50 additions and 149 deletions
|
|
@ -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<DepictedItem> create(List<DepictedItem> itemList) {
|
|
||||||
RendererBuilder<DepictedItem> builder = new RendererBuilder<DepictedItem>()
|
|
||||||
.bind(DepictedItem.class, new UploadDepictsRenderer(listener));
|
|
||||||
ListAdapteeCollection<DepictedItem> collection = new ListAdapteeCollection<>(
|
|
||||||
itemList != null ? itemList : Collections.emptyList());
|
|
||||||
return new RVRendererAdapter<>(builder, collection);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<DepictedItem> {
|
|
||||||
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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package fr.free.nrw.commons.upload.depicts;
|
package fr.free.nrw.commons.upload.depicts;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Pair;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
@ -18,27 +17,23 @@ import com.google.android.material.textfield.TextInputEditText;
|
||||||
import com.google.android.material.textfield.TextInputLayout;
|
import com.google.android.material.textfield.TextInputLayout;
|
||||||
import com.jakewharton.rxbinding2.view.RxView;
|
import com.jakewharton.rxbinding2.view.RxView;
|
||||||
import com.jakewharton.rxbinding2.widget.RxTextView;
|
import com.jakewharton.rxbinding2.widget.RxTextView;
|
||||||
import com.pedrogomez.renderers.RVRendererAdapter;
|
|
||||||
import fr.free.nrw.commons.R;
|
import fr.free.nrw.commons.R;
|
||||||
import fr.free.nrw.commons.upload.UploadBaseFragment;
|
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.DepictedItem;
|
||||||
import fr.free.nrw.commons.upload.structure.depictions.UploadDepictsCallback;
|
|
||||||
import fr.free.nrw.commons.utils.DialogUtil;
|
import fr.free.nrw.commons.utils.DialogUtil;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.disposables.Disposable;
|
import io.reactivex.disposables.Disposable;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import kotlin.Unit;
|
||||||
import timber.log.Timber;
|
import timber.log.Timber;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fragment for showing depicted items list in Upload activity after media details
|
* 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)
|
@BindView(R.id.depicts_title)
|
||||||
TextView depictsTitle;
|
TextView depictsTitle;
|
||||||
|
|
@ -53,7 +48,7 @@ public class DepictsFragment extends UploadBaseFragment implements DepictsContra
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
DepictsContract.UserActionListener presenter;
|
DepictsContract.UserActionListener presenter;
|
||||||
private RVRendererAdapter<DepictedItem> adapter;
|
private UploadDepictsAdapter adapter;
|
||||||
private Disposable subscribe;
|
private Disposable subscribe;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
@ -86,8 +81,10 @@ public class DepictsFragment extends UploadBaseFragment implements DepictsContra
|
||||||
* Initialise recyclerView and set adapter
|
* Initialise recyclerView and set adapter
|
||||||
*/
|
*/
|
||||||
private void initRecyclerView() {
|
private void initRecyclerView() {
|
||||||
adapter = new UploadDepictsAdapterFactory(this)
|
adapter = new UploadDepictsAdapter(item -> {
|
||||||
.create(new ArrayList<>());
|
presenter.onDepictItemClicked(item);
|
||||||
|
return Unit.INSTANCE;
|
||||||
|
});
|
||||||
depictsRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
|
depictsRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
|
||||||
depictsRecyclerView.setAdapter(adapter);
|
depictsRecyclerView.setAdapter(adapter);
|
||||||
}
|
}
|
||||||
|
|
@ -137,22 +134,7 @@ public class DepictsFragment extends UploadBaseFragment implements DepictsContra
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setDepictsList(List<DepictedItem> depictedItemList) {
|
public void setDepictsList(List<DepictedItem> depictedItemList) {
|
||||||
adapter.clear();
|
adapter.setItems(depictedItemList);
|
||||||
if (depictedItemList != null) {
|
|
||||||
adapter.addAll(depictedItemList);
|
|
||||||
adapter.notifyDataSetChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private Pair<DepictedItem,Integer> 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnClick(R.id.depicts_next)
|
@OnClick(R.id.depicts_next)
|
||||||
|
|
@ -165,11 +147,6 @@ public class DepictsFragment extends UploadBaseFragment implements DepictsContra
|
||||||
callback.onPreviousButtonClicked(callback.getIndexInViewFlipper(this));
|
callback.onPreviousButtonClicked(callback.getIndexInViewFlipper(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void depictsClicked(DepictedItem item) {
|
|
||||||
presenter.onDepictItemClicked(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Text change listener for the edit text view of depicts
|
* Text change listener for the edit text view of depicts
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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<DepictedItem>(
|
||||||
|
uploadDepictsDelegate(onDepictsClicked),
|
||||||
|
areItemsTheSame = { oldItem, newItem -> oldItem.id == newItem.id }
|
||||||
|
)
|
||||||
|
|
@ -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<DepictedItem, DepictedItem>(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))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue