mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +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;
|
||||
|
||||
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<DepictedItem> 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<DepictedItem> depictedItemList) {
|
||||
adapter.clear();
|
||||
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;
|
||||
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
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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