1
1
package fr .free .nrw .commons .contributions ;
2
2
3
+ import android .net .Uri ;
4
+ import android .text .TextUtils ;
5
+ import android .util .Log ;
3
6
import android .view .View ;
4
7
import android .widget .LinearLayout ;
5
8
import android .widget .ProgressBar ;
6
9
import android .widget .TextView ;
7
10
8
- import androidx .collection .LruCache ;
9
11
import androidx .recyclerview .widget .RecyclerView ;
10
12
11
13
import com .facebook .drawee .view .SimpleDraweeView ;
12
14
13
- import org .apache .commons .lang3 .StringUtils ;
15
+ import com .facebook .imagepipeline .request .ImageRequest ;
16
+ import com .facebook .imagepipeline .request .ImageRequestBuilder ;
14
17
15
- import javax .inject .Inject ;
16
- import javax .inject .Named ;
17
18
18
19
import butterknife .BindView ;
19
20
import butterknife .ButterKnife ;
20
21
import butterknife .OnClick ;
21
- import fr .free .nrw .commons .MediaDataExtractor ;
22
22
import fr .free .nrw .commons .R ;
23
23
import fr .free .nrw .commons .contributions .ContributionsListAdapter .Callback ;
24
- import fr .free .nrw .commons .contributions .model .DisplayableContribution ;
25
- import fr .free .nrw .commons .di .ApplicationlessInjection ;
26
- import fr .free .nrw .commons .upload .FileUtils ;
27
- import io .reactivex .android .schedulers .AndroidSchedulers ;
28
- import io .reactivex .disposables .CompositeDisposable ;
29
- import io .reactivex .disposables .Disposable ;
30
- import io .reactivex .schedulers .Schedulers ;
31
- import timber .log .Timber ;
32
24
33
25
public class ContributionViewHolder extends RecyclerView .ViewHolder {
34
26
@@ -41,32 +33,33 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
41
33
@ BindView (R .id .contributionProgress ) ProgressBar progressView ;
42
34
@ BindView (R .id .failed_image_options ) LinearLayout failedImageOptions ;
43
35
44
- @ Inject
45
- MediaDataExtractor mediaDataExtractor ;
46
-
47
- @ Inject
48
- @ Named ("thumbnail-cache" )
49
- LruCache <String , String > thumbnailCache ;
50
-
51
- private DisplayableContribution contribution ;
52
- private CompositeDisposable compositeDisposable = new CompositeDisposable ();
53
- private int position ;
36
+ int position ;
37
+ private Contribution contribution ;
54
38
55
39
ContributionViewHolder (View parent , Callback callback ) {
56
40
super (parent );
57
41
ButterKnife .bind (this , parent );
58
42
this .callback =callback ;
59
43
}
60
44
61
- public void init (int position , DisplayableContribution contribution ) {
62
- ApplicationlessInjection .getInstance (itemView .getContext ())
63
- .getCommonsApplicationComponent ().inject (this );
45
+ public void init (int position , Contribution contribution ) {
46
+ this .contribution =contribution ;
64
47
this .position =position ;
65
- this .contribution = contribution ;
66
- fetchAndDisplayThumbnail (contribution );
48
+ String imageSource = contribution .thumbUrl ;
49
+ if (TextUtils .isEmpty (imageSource )) {
50
+ imageSource =
51
+ contribution .getLocalUri () != null ? contribution .getLocalUri ().toString ()
52
+ : null ;
53
+ }
54
+ if (!TextUtils .isEmpty (imageSource )) {
55
+ final ImageRequest imageRequest =
56
+ ImageRequestBuilder .newBuilderWithSource (Uri .parse (imageSource )).setProgressiveRenderingEnabled (true ).setProgressiveRenderingEnabled (true )
57
+ .build ();
58
+ imageView .setImageRequest (imageRequest );
59
+ }
67
60
titleView .setText (contribution .getDisplayTitle ());
68
61
69
- seqNumView .setText (String .valueOf (contribution . getPosition () + 1 ));
62
+ seqNumView .setText (String .valueOf (position + 1 ));
70
63
seqNumView .setVisibility (View .VISIBLE );
71
64
72
65
switch (contribution .getState ()) {
@@ -103,43 +96,6 @@ public void init(int position, DisplayableContribution contribution) {
103
96
}
104
97
}
105
98
106
- /**
107
- * This method fetches the thumbnail url from file name
108
- * If the thumbnail url is present in cache, then it is used otherwise API call is made to fetch the thumbnail
109
- * This can be removed once #2904 is in place and contribution contains all metadata beforehand
110
- * @param contribution
111
- */
112
- private void fetchAndDisplayThumbnail (DisplayableContribution contribution ) {
113
- String keyForLRUCache = contribution .getFilename ();
114
- String cacheUrl = thumbnailCache .get (keyForLRUCache );
115
- if (!StringUtils .isBlank (cacheUrl )) {
116
- imageView .setImageURI (cacheUrl );
117
- return ;
118
- }
119
-
120
- imageView .setBackground (null );
121
- if ((contribution .getState () != Contribution .STATE_COMPLETED ) && FileUtils .fileExists (
122
- contribution .getLocalUri ())) {
123
- imageView .setImageURI (contribution .getLocalUri ());
124
- } else {
125
- Timber .d ("Fetching thumbnail for %s" , contribution .getFilename ());
126
- Disposable disposable = mediaDataExtractor
127
- .getMediaFromFileName (contribution .getFilename ())
128
- .subscribeOn (Schedulers .io ())
129
- .observeOn (AndroidSchedulers .mainThread ())
130
- .subscribe (media -> {
131
- thumbnailCache .put (keyForLRUCache , media .getThumbUrl ());
132
- imageView .setImageURI (media .getThumbUrl ());
133
- });
134
- compositeDisposable .add (disposable );
135
- }
136
-
137
- }
138
-
139
- public void clear () {
140
- compositeDisposable .clear ();
141
- }
142
-
143
99
/**
144
100
* Retry upload when it is failed
145
101
*/
0 commit comments