11package fr .free .nrw .commons .contributions ;
22
3- import android .content . Context ;
3+ import android .net . Uri ;
44import android .view .View ;
55import android .widget .LinearLayout ;
66import android .widget .ProgressBar ;
77import android .widget .TextView ;
8-
98import androidx .collection .LruCache ;
10-
11- import com .facebook .drawee .view .SimpleDraweeView ;
12-
13- import org .apache .commons .lang3 .StringUtils ;
14-
15- import javax .inject .Inject ;
16- import javax .inject .Named ;
17-
9+ import androidx .recyclerview .widget .RecyclerView ;
1810import butterknife .BindView ;
1911import butterknife .ButterKnife ;
2012import butterknife .OnClick ;
13+ import com .facebook .drawee .view .SimpleDraweeView ;
2114import fr .free .nrw .commons .MediaDataExtractor ;
2215import fr .free .nrw .commons .R ;
23- import fr .free .nrw .commons .ViewHolder ;
16+ import fr .free .nrw .commons .contributions . ContributionsListAdapter . Callback ;
2417import fr .free .nrw .commons .contributions .model .DisplayableContribution ;
2518import fr .free .nrw .commons .di .ApplicationlessInjection ;
19+ import fr .free .nrw .commons .upload .FileUtils ;
2620import io .reactivex .android .schedulers .AndroidSchedulers ;
2721import io .reactivex .disposables .CompositeDisposable ;
2822import io .reactivex .disposables .Disposable ;
2923import io .reactivex .schedulers .Schedulers ;
24+ import javax .inject .Inject ;
25+ import javax .inject .Named ;
26+ import org .apache .commons .lang3 .StringUtils ;
3027import timber .log .Timber ;
3128
32- public class ContributionViewHolder implements ViewHolder <DisplayableContribution > {
29+ public class ContributionViewHolder extends RecyclerView .ViewHolder {
30+
31+ private final Callback callback ;
3332 @ BindView (R .id .contributionImage )
3433 SimpleDraweeView imageView ;
3534 @ BindView (R .id .contributionTitle ) TextView titleView ;
@@ -47,15 +46,18 @@ public class ContributionViewHolder implements ViewHolder<DisplayableContributio
4746
4847 private DisplayableContribution contribution ;
4948 private CompositeDisposable compositeDisposable = new CompositeDisposable ();
49+ private int position ;
5050
51- ContributionViewHolder (View parent ) {
51+ ContributionViewHolder (View parent , Callback callback ) {
52+ super (parent );
5253 ButterKnife .bind (this , parent );
54+ this .callback =callback ;
5355 }
5456
55- @ Override
56- public void bindModel (Context context , DisplayableContribution contribution ) {
57- ApplicationlessInjection .getInstance (context )
57+ public void init (int position , DisplayableContribution contribution ) {
58+ ApplicationlessInjection .getInstance (itemView .getContext ())
5859 .getCommonsApplicationComponent ().inject (this );
60+ this .position =position ;
5961 this .contribution = contribution ;
6062 fetchAndDisplayThumbnail (contribution );
6163 titleView .setText (contribution .getDisplayTitle ());
@@ -104,19 +106,39 @@ public void bindModel(Context context, DisplayableContribution contribution) {
104106 * @param contribution
105107 */
106108 private void fetchAndDisplayThumbnail (DisplayableContribution contribution ) {
107- if (!StringUtils .isBlank (thumbnailCache .get (contribution .getFilename ()))) {
108- imageView .setImageURI (thumbnailCache .get (contribution .getFilename ()));
109+ String keyForLRUCache = getKeyForLRUCache (contribution .getContentUri ());
110+ String cacheUrl = thumbnailCache .get (keyForLRUCache );
111+ if (!StringUtils .isBlank (cacheUrl )) {
112+ imageView .setImageURI (cacheUrl );
109113 return ;
110114 }
111- Timber .d ("Fetching thumbnail for %s" , contribution .getFilename ());
112- Disposable disposable = mediaDataExtractor .getMediaFromFileName (contribution .getFilename ())
113- .subscribeOn (Schedulers .io ())
114- .observeOn (AndroidSchedulers .mainThread ())
115- .subscribe (media -> {
116- thumbnailCache .put (contribution .getFilename (), media .getThumbUrl ());
117- imageView .setImageURI (media .getThumbUrl ());
118- });
119- compositeDisposable .add (disposable );
115+
116+ imageView .setBackground (null );
117+ if ((contribution .getState () != Contribution .STATE_COMPLETED ) && FileUtils .fileExists (
118+ contribution .getLocalUri ())) {
119+ imageView .setImageURI (contribution .getLocalUri ());
120+ } else {
121+ Timber .d ("Fetching thumbnail for %s" , contribution .getFilename ());
122+ Disposable disposable = mediaDataExtractor
123+ .getMediaFromFileName (contribution .getFilename ())
124+ .subscribeOn (Schedulers .io ())
125+ .observeOn (AndroidSchedulers .mainThread ())
126+ .subscribe (media -> {
127+ thumbnailCache .put (keyForLRUCache , media .getThumbUrl ());
128+ imageView .setImageURI (media .getThumbUrl ());
129+ });
130+ compositeDisposable .add (disposable );
131+ }
132+
133+ }
134+
135+ /**
136+ * Returns image key for the LRU cache, basically the id of the image, (the content uri is the ""+/id)
137+ * @param contentUri
138+ * @return
139+ */
140+ private String getKeyForLRUCache (Uri contentUri ) {
141+ return contentUri .getLastPathSegment ();
120142 }
121143
122144 public void clear () {
@@ -128,28 +150,19 @@ public void clear() {
128150 */
129151 @ OnClick (R .id .retryButton )
130152 public void retryUpload () {
131- DisplayableContribution .ContributionActions actions = contribution .getContributionActions ();
132- if (actions != null ) {
133- actions .retryUpload ();
134- }
153+ callback .retryUpload (contribution );
135154 }
136155
137156 /**
138157 * Delete a failed upload attempt
139158 */
140159 @ OnClick (R .id .cancelButton )
141160 public void deleteUpload () {
142- DisplayableContribution .ContributionActions actions = contribution .getContributionActions ();
143- if (actions != null ) {
144- actions .deleteUpload ();
145- }
161+ callback .deleteUpload (contribution );
146162 }
147163
148164 @ OnClick (R .id .contributionImage )
149165 public void imageClicked (){
150- DisplayableContribution .ContributionActions actions = contribution .getContributionActions ();
151- if (actions != null ) {
152- actions .onClick ();
153- }
166+ callback .openMediaDetail (position );
154167 }
155168}
0 commit comments