Fetch and use thumbnail across the app (#2906)

This commit is contained in:
Vivek Maskara 2019-04-23 22:33:09 +05:30 committed by Josephine Lim
parent 17d69cde02
commit 37e9eae314
18 changed files with 161 additions and 260 deletions

View file

@ -6,23 +6,37 @@ import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import fr.free.nrw.commons.MediaWikiImageView;
import fr.free.nrw.commons.MediaDataExtractor;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.ViewHolder;
import fr.free.nrw.commons.contributions.model.DisplayableContribution;
import fr.free.nrw.commons.di.ApplicationlessInjection;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import timber.log.Timber;
class ContributionViewHolder implements ViewHolder<DisplayableContribution> {
@BindView(R.id.contributionImage) MediaWikiImageView imageView;
public class ContributionViewHolder implements ViewHolder<DisplayableContribution> {
@BindView(R.id.contributionImage)
SimpleDraweeView imageView;
@BindView(R.id.contributionTitle) TextView titleView;
@BindView(R.id.contributionState) TextView stateView;
@BindView(R.id.contributionSequenceNumber) TextView seqNumView;
@BindView(R.id.contributionProgress) ProgressBar progressView;
@BindView(R.id.failed_image_options) LinearLayout failedImageOptions;
@Inject
MediaDataExtractor mediaDataExtractor;
private DisplayableContribution contribution;
private CompositeDisposable compositeDisposable = new CompositeDisposable();
ContributionViewHolder(View parent) {
ButterKnife.bind(this, parent);
@ -30,8 +44,10 @@ class ContributionViewHolder implements ViewHolder<DisplayableContribution> {
@Override
public void bindModel(Context context, DisplayableContribution contribution) {
ApplicationlessInjection.getInstance(context)
.getCommonsApplicationComponent().inject(this);
this.contribution = contribution;
imageView.setMedia(contribution);
fetchAndDisplayThumbnail(contribution);
titleView.setText(contribution.getDisplayTitle());
seqNumView.setText(String.valueOf(contribution.getPosition() + 1));
@ -71,6 +87,26 @@ class ContributionViewHolder implements ViewHolder<DisplayableContribution> {
}
}
/**
* This method fetches the thumbnail url from file name
* This can be removed once #2904 is in place and contribution contains all metadata beforehand
* @param contribution
*/
private void fetchAndDisplayThumbnail(DisplayableContribution contribution) {
Timber.d("Fetching thumbnail for %s", contribution.getFilename());
Disposable disposable = mediaDataExtractor.getMediaFromFileName(contribution.getFilename())
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribe(media -> {
imageView.setImageURI(media.getThumbUrl());
});
compositeDisposable.add(disposable);
}
public void clear() {
compositeDisposable.clear();
}
/**
* Retry upload when it is failed
*/

View file

@ -50,6 +50,7 @@ class ContributionsListAdapter extends CursorAdapter {
final ContributionViewHolder views = (ContributionViewHolder)view.getTag();
final Contribution contribution = contributionDao.fromCursor(cursor);
Timber.d("Cursor position is %d", cursor.getPosition());
DisplayableContribution displayableContribution = new DisplayableContribution(contribution,
cursor.getPosition(),
new DisplayableContribution.ContributionActions() {