Skip to content

Commit c94f607

Browse files
Migrated Contributions Package From Butterknife to ViewBinding (commons-app#5593)
* Butterknife to ViewBinding * code fix to pass all tests * test fix * test fix * test fix * test fix * Update ContributionsFragmentUnitTests.kt * code cleanup and tests improved * tests fixed * adjustments and code cleanup * adjustments and code cleanup
1 parent 2076bf9 commit c94f607

File tree

7 files changed

+127
-190
lines changed

7 files changed

+127
-190
lines changed

app/src/main/java/fr/free/nrw/commons/contributions/ContributionViewHolder.java

Lines changed: 63 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,12 @@
1212
import androidx.appcompat.app.AlertDialog;
1313
import androidx.appcompat.app.AlertDialog.Builder;
1414
import androidx.recyclerview.widget.RecyclerView;
15-
import butterknife.BindView;
16-
import butterknife.ButterKnife;
17-
import butterknife.OnClick;
1815
import com.facebook.drawee.view.SimpleDraweeView;
1916
import com.facebook.imagepipeline.request.ImageRequest;
2017
import com.facebook.imagepipeline.request.ImageRequestBuilder;
2118
import fr.free.nrw.commons.R;
2219
import fr.free.nrw.commons.contributions.ContributionsListAdapter.Callback;
20+
import fr.free.nrw.commons.databinding.LayoutContributionBinding;
2321
import fr.free.nrw.commons.media.MediaClient;
2422
import io.reactivex.android.schedulers.AndroidSchedulers;
2523
import io.reactivex.disposables.CompositeDisposable;
@@ -29,29 +27,8 @@
2927
public class ContributionViewHolder extends RecyclerView.ViewHolder {
3028

3129
private final Callback callback;
32-
@BindView(R.id.contributionImage)
33-
SimpleDraweeView imageView;
34-
@BindView(R.id.contributionTitle)
35-
TextView titleView;
36-
@BindView(R.id.authorView)
37-
TextView authorView;
38-
@BindView(R.id.contributionState)
39-
TextView stateView;
40-
@BindView(R.id.contributionSequenceNumber)
41-
TextView seqNumView;
42-
@BindView(R.id.contributionProgress)
43-
ProgressBar progressView;
44-
@BindView(R.id.image_options)
45-
RelativeLayout imageOptions;
46-
@BindView(R.id.wikipediaButton)
47-
ImageButton addToWikipediaButton;
48-
@BindView(R.id.retryButton)
49-
ImageButton retryButton;
50-
@BindView(R.id.cancelButton)
51-
ImageButton cancelButton;
52-
@BindView(R.id.pauseResumeButton)
53-
ImageButton pauseResumeButton;
5430

31+
LayoutContributionBinding binding;
5532

5633
private int position;
5734
private Contribution contribution;
@@ -67,9 +44,16 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
6744
super(parent);
6845
this.parent = parent;
6946
this.mediaClient = mediaClient;
70-
ButterKnife.bind(this, parent);
7147
this.callback = callback;
7248

49+
binding = LayoutContributionBinding.bind(parent);
50+
51+
binding.retryButton.setOnClickListener(v -> retryUpload());
52+
binding.cancelButton.setOnClickListener(v -> deleteUpload());
53+
binding.contributionImage.setOnClickListener(v -> imageClicked());
54+
binding.wikipediaButton.setOnClickListener(v -> wikipediaButtonClicked());
55+
binding.pauseResumeButton.setOnClickListener(v -> onPauseResumeButtonClicked());
56+
7357
/* Set a dialog indicating that the upload is being paused. This is needed because pausing
7458
an upload might take a dozen seconds. */
7559
AlertDialog.Builder builder = new Builder(parent.getContext());
@@ -87,14 +71,17 @@ public void init(final int position, final Contribution contribution) {
8771

8872
this.contribution = contribution;
8973
this.position = position;
90-
titleView.setText(contribution.getMedia().getMostRelevantCaption());
91-
authorView.setText(contribution.getMedia().getAuthor());
74+
binding.contributionTitle.setText(contribution.getMedia().getMostRelevantCaption());
75+
binding.authorView.setText(contribution.getMedia().getAuthor());
9276

9377
//Removes flicker of loading image.
94-
imageView.getHierarchy().setFadeDuration(0);
78+
binding.contributionImage.getHierarchy().setFadeDuration(0);
9579

96-
imageView.getHierarchy().setPlaceholderImage(R.drawable.image_placeholder);
97-
imageView.getHierarchy().setFailureImage(R.drawable.image_placeholder);
80+
binding.contributionImage.getHierarchy().setPlaceholderImage(R.drawable.image_placeholder);
81+
binding.contributionImage.getHierarchy().setFailureImage(R.drawable.image_placeholder);
82+
83+
84+
9885

9986
final String imageSource = chooseImageSource(contribution.getMedia().getThumbUrl(),
10087
contribution.getLocalUri());
@@ -109,67 +96,67 @@ public void init(final int position, final Contribution contribution) {
10996
}
11097

11198
if(imageRequest != null){
112-
imageView.setImageRequest(imageRequest);
99+
binding.contributionImage.setImageRequest(imageRequest);
113100
}
114101
}
115102

116-
seqNumView.setText(String.valueOf(position + 1));
117-
seqNumView.setVisibility(View.VISIBLE);
103+
binding.contributionSequenceNumber.setText(String.valueOf(position + 1));
104+
binding.contributionSequenceNumber.setVisibility(View.VISIBLE);
118105

119-
addToWikipediaButton.setVisibility(View.GONE);
106+
binding.wikipediaButton.setVisibility(View.GONE);
120107
switch (contribution.getState()) {
121108
case Contribution.STATE_COMPLETED:
122-
stateView.setVisibility(View.GONE);
123-
progressView.setVisibility(View.GONE);
124-
imageOptions.setVisibility(View.GONE);
125-
stateView.setText("");
109+
binding.contributionState.setVisibility(View.GONE);
110+
binding.contributionProgress.setVisibility(View.GONE);
111+
binding.imageOptions.setVisibility(View.GONE);
112+
binding.contributionState.setText("");
126113
checkIfMediaExistsOnWikipediaPage(contribution);
127114
break;
128115
case Contribution.STATE_QUEUED:
129116
case Contribution.STATE_QUEUED_LIMITED_CONNECTION_MODE:
130-
progressView.setVisibility(View.GONE);
131-
stateView.setVisibility(View.VISIBLE);
132-
stateView.setText(R.string.contribution_state_queued);
133-
imageOptions.setVisibility(View.GONE);
117+
binding.contributionProgress.setVisibility(View.GONE);
118+
binding.contributionState.setVisibility(View.VISIBLE);
119+
binding.contributionState.setText(R.string.contribution_state_queued);
120+
binding.imageOptions.setVisibility(View.GONE);
134121
break;
135122
case Contribution.STATE_IN_PROGRESS:
136-
stateView.setVisibility(View.GONE);
137-
progressView.setVisibility(View.VISIBLE);
138-
addToWikipediaButton.setVisibility(View.GONE);
139-
pauseResumeButton.setVisibility(View.VISIBLE);
140-
cancelButton.setVisibility(View.GONE);
141-
retryButton.setVisibility(View.GONE);
142-
imageOptions.setVisibility(View.VISIBLE);
123+
binding.contributionState.setVisibility(View.GONE);
124+
binding.contributionProgress.setVisibility(View.VISIBLE);
125+
binding.wikipediaButton.setVisibility(View.GONE);
126+
binding.pauseResumeButton.setVisibility(View.VISIBLE);
127+
binding.cancelButton.setVisibility(View.GONE);
128+
binding.retryButton.setVisibility(View.GONE);
129+
binding.imageOptions.setVisibility(View.VISIBLE);
143130
final long total = contribution.getDataLength();
144131
final long transferred = contribution.getTransferred();
145132
if (transferred == 0 || transferred >= total) {
146-
progressView.setIndeterminate(true);
133+
binding.contributionProgress.setIndeterminate(true);
147134
} else {
148-
progressView.setIndeterminate(false);
149-
progressView.setProgress((int) (((double) transferred / (double) total) * 100));
135+
binding.contributionProgress.setIndeterminate(false);
136+
binding.contributionProgress.setProgress((int) (((double) transferred / (double) total) * 100));
150137
}
151138
break;
152139
case Contribution.STATE_PAUSED:
153-
progressView.setVisibility(View.GONE);
154-
stateView.setVisibility(View.VISIBLE);
155-
stateView.setText(R.string.paused);
156-
cancelButton.setVisibility(View.VISIBLE);
157-
retryButton.setVisibility(View.GONE);
158-
pauseResumeButton.setVisibility(View.VISIBLE);
159-
imageOptions.setVisibility(View.VISIBLE);
140+
binding.contributionProgress.setVisibility(View.GONE);
141+
binding.contributionState.setVisibility(View.VISIBLE);
142+
binding.contributionState.setText(R.string.paused);
143+
binding.cancelButton.setVisibility(View.VISIBLE);
144+
binding.retryButton.setVisibility(View.GONE);
145+
binding.pauseResumeButton.setVisibility(View.VISIBLE);
146+
binding.imageOptions.setVisibility(View.VISIBLE);
160147
setResume();
161148
if(pausingPopUp.isShowing()){
162149
pausingPopUp.hide();
163150
}
164151
break;
165152
case Contribution.STATE_FAILED:
166-
stateView.setVisibility(View.VISIBLE);
167-
stateView.setText(R.string.contribution_state_failed);
168-
progressView.setVisibility(View.GONE);
169-
cancelButton.setVisibility(View.VISIBLE);
170-
retryButton.setVisibility(View.VISIBLE);
171-
pauseResumeButton.setVisibility(View.GONE);
172-
imageOptions.setVisibility(View.VISIBLE);
153+
binding.contributionState.setVisibility(View.VISIBLE);
154+
binding.contributionState.setText(R.string.contribution_state_failed);
155+
binding.contributionProgress.setVisibility(View.GONE);
156+
binding.cancelButton.setVisibility(View.VISIBLE);
157+
binding.retryButton.setVisibility(View.VISIBLE);
158+
binding.pauseResumeButton.setVisibility(View.GONE);
159+
binding.imageOptions.setVisibility(View.VISIBLE);
173160
break;
174161
}
175162
}
@@ -203,11 +190,11 @@ private void checkIfMediaExistsOnWikipediaPage(final Contribution contribution)
203190
*/
204191
private void displayWikipediaButton(Boolean mediaExists) {
205192
if (!mediaExists) {
206-
addToWikipediaButton.setVisibility(View.VISIBLE);
193+
binding.wikipediaButton.setVisibility(View.VISIBLE);
207194
isWikipediaButtonDisplayed = true;
208-
cancelButton.setVisibility(View.GONE);
209-
retryButton.setVisibility(View.GONE);
210-
imageOptions.setVisibility(View.VISIBLE);
195+
binding.cancelButton.setVisibility(View.GONE);
196+
binding.retryButton.setVisibility(View.GONE);
197+
binding.imageOptions.setVisibility(View.VISIBLE);
211198
}
212199
}
213200

@@ -229,35 +216,30 @@ private String chooseImageSource(final String thumbUrl, final Uri localUri) {
229216
/**
230217
* Retry upload when it is failed
231218
*/
232-
@OnClick(R.id.retryButton)
233219
public void retryUpload() {
234220
callback.retryUpload(contribution);
235221
}
236222

237223
/**
238224
* Delete a failed upload attempt
239225
*/
240-
@OnClick(R.id.cancelButton)
241226
public void deleteUpload() {
242227
callback.deleteUpload(contribution);
243228
}
244229

245-
@OnClick(R.id.contributionImage)
246230
public void imageClicked() {
247231
callback.openMediaDetail(position, isWikipediaButtonDisplayed);
248232
}
249233

250-
@OnClick(R.id.wikipediaButton)
251234
public void wikipediaButtonClicked() {
252235
callback.addImageToWikipedia(contribution);
253236
}
254237

255238
/**
256239
* Triggers a callback for pause/resume
257240
*/
258-
@OnClick(R.id.pauseResumeButton)
259241
public void onPauseResumeButtonClicked() {
260-
if (pauseResumeButton.getTag().toString().equals("pause")) {
242+
if (binding.pauseResumeButton.getTag().toString().equals("pause")) {
261243
pause();
262244
} else {
263245
resume();
@@ -279,16 +261,16 @@ private void pause() {
279261
* Update pause/resume button to show pause state
280262
*/
281263
private void setPaused() {
282-
pauseResumeButton.setImageResource(R.drawable.pause_icon);
283-
pauseResumeButton.setTag(parent.getContext().getString(R.string.pause));
264+
binding.pauseResumeButton.setImageResource(R.drawable.pause_icon);
265+
binding.pauseResumeButton.setTag(parent.getContext().getString(R.string.pause));
284266
}
285267

286268
/**
287269
* Update pause/resume button to show resume state
288270
*/
289271
private void setResume() {
290-
pauseResumeButton.setImageResource(R.drawable.play_icon);
291-
pauseResumeButton.setTag(parent.getContext().getString(R.string.resume));
272+
binding.pauseResumeButton.setImageResource(R.drawable.play_icon);
273+
binding.pauseResumeButton.setTag(parent.getContext().getString(R.string.resume));
292274
}
293275

294276
public ImageRequest getImageRequest() {

0 commit comments

Comments
 (0)