Skip to content

Commit 2a2780a

Browse files
Migrated Review Package to View Binding (commons-app#5604)
* Migrated Review Package to View Binding * fix
1 parent a45ab9c commit 2a2780a

File tree

5 files changed

+90
-109
lines changed

5 files changed

+90
-109
lines changed

app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.java

Lines changed: 37 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,12 @@
1111
import android.view.MenuItem;
1212
import android.view.MotionEvent;
1313
import android.view.View;
14-
import android.widget.Button;
15-
import android.widget.FrameLayout;
16-
import android.widget.LinearLayout;
17-
import android.widget.ProgressBar;
18-
import android.widget.TextView;
19-
import androidx.appcompat.widget.Toolbar;
20-
import androidx.drawerlayout.widget.DrawerLayout;
2114
import androidx.fragment.app.Fragment;
2215
import androidx.fragment.app.FragmentManager;
23-
import butterknife.BindView;
24-
import butterknife.ButterKnife;
25-
import com.facebook.drawee.view.SimpleDraweeView;
26-
import com.viewpagerindicator.CirclePageIndicator;
2716
import fr.free.nrw.commons.Media;
2817
import fr.free.nrw.commons.R;
2918
import fr.free.nrw.commons.auth.AccountUtil;
19+
import fr.free.nrw.commons.databinding.ActivityReviewBinding;
3020
import fr.free.nrw.commons.delete.DeleteHelper;
3121
import fr.free.nrw.commons.media.MediaDetailFragment;
3222
import fr.free.nrw.commons.theme.BaseActivity;
@@ -39,27 +29,10 @@
3929

4030
public class ReviewActivity extends BaseActivity {
4131

42-
@BindView(R.id.pager_indicator_review)
43-
public CirclePageIndicator pagerIndicator;
44-
@BindView(R.id.toolbar)
45-
Toolbar toolbar;
46-
@BindView(R.id.drawer_layout)
47-
DrawerLayout drawerLayout;
48-
@BindView(R.id.view_pager_review)
49-
ReviewViewPager reviewPager;
50-
@BindView(R.id.skip_image)
51-
Button btnSkipImage;
52-
@BindView(R.id.review_image_view)
53-
SimpleDraweeView simpleDraweeView;
54-
@BindView(R.id.pb_review_image)
55-
ProgressBar progressBar;
56-
@BindView(R.id.tv_image_caption)
57-
TextView imageCaption;
58-
@BindView(R.id.mediaDetailContainer)
59-
FrameLayout mediaDetailContainer;
32+
33+
private ActivityReviewBinding binding;
34+
6035
MediaDetailFragment mediaDetailFragment;
61-
@BindView(R.id.reviewActivityContainer)
62-
LinearLayout reviewContainer;
6336
public ReviewPagerAdapter reviewPagerAdapter;
6437
public ReviewController reviewController;
6538
@Inject
@@ -110,19 +83,20 @@ public Media getMedia() {
11083
@Override
11184
protected void onCreate(Bundle savedInstanceState) {
11285
super.onCreate(savedInstanceState);
113-
setContentView(R.layout.activity_review);
114-
ButterKnife.bind(this);
115-
setSupportActionBar(toolbar);
86+
binding = ActivityReviewBinding.inflate(getLayoutInflater());
87+
setContentView(binding.getRoot());
88+
89+
setSupportActionBar(binding.toolbarBinding.toolbar);
11690
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
11791

11892
reviewController = new ReviewController(deleteHelper, this);
11993

12094
reviewPagerAdapter = new ReviewPagerAdapter(getSupportFragmentManager());
121-
reviewPager.setAdapter(reviewPagerAdapter);
122-
pagerIndicator.setViewPager(reviewPager);
123-
progressBar.setVisibility(View.VISIBLE);
95+
binding.viewPagerReview.setAdapter(reviewPagerAdapter);
96+
binding.pagerIndicatorReview.setViewPager(binding.viewPagerReview);
97+
binding.pbReviewImage.setVisibility(View.VISIBLE);
12498

125-
Drawable d[]=btnSkipImage.getCompoundDrawablesRelative();
99+
Drawable d[]=binding.skipImage.getCompoundDrawablesRelative();
126100
d[2].setColorFilter(getApplicationContext().getResources().getColor(R.color.button_blue), PorterDuff.Mode.SRC_IN);
127101

128102
if (savedInstanceState != null && savedInstanceState.getParcelable(SAVED_MEDIA) != null) {
@@ -132,17 +106,17 @@ protected void onCreate(Bundle savedInstanceState) {
132106
runRandomizer(); //Run randomizer whenever everything is ready so that a first random image will be added
133107
}
134108

135-
btnSkipImage.setOnClickListener(view -> {
109+
binding.skipImage.setOnClickListener(view -> {
136110
reviewImageFragment = getInstanceOfReviewImageFragment();
137111
reviewImageFragment.disableButtons();
138112
runRandomizer();
139113
});
140114

141-
simpleDraweeView.setOnClickListener(view ->setUpMediaDetailFragment());
115+
binding.reviewImageView.setOnClickListener(view ->setUpMediaDetailFragment());
142116

143-
btnSkipImage.setOnTouchListener((view, event) -> {
117+
binding.skipImage.setOnTouchListener((view, event) -> {
144118
if (event.getAction() == MotionEvent.ACTION_UP && event.getRawX() >= (
145-
btnSkipImage.getRight() - btnSkipImage
119+
binding.skipImage.getRight() - binding.skipImage
146120
.getCompoundDrawables()[2].getBounds().width())) {
147121
showSkipImageInfo();
148122
return true;
@@ -160,8 +134,8 @@ public boolean onSupportNavigateUp() {
160134
@SuppressLint("CheckResult")
161135
public boolean runRandomizer() {
162136
hasNonHiddenCategories = false;
163-
progressBar.setVisibility(View.VISIBLE);
164-
reviewPager.setCurrentItem(0);
137+
binding.pbReviewImage.setVisibility(View.VISIBLE);
138+
binding.viewPagerReview.setCurrentItem(0);
165139
// Finds non-hidden categories from Media instance
166140
compositeDisposable.add(reviewHelper.getRandomMedia()
167141
.subscribeOn(Schedulers.io())
@@ -213,7 +187,7 @@ private void updateImage(Media media) {
213187
this.media = media;
214188
String fileName = media.getFilename();
215189
if (fileName.length() == 0) {
216-
ViewUtil.showShortSnackbar(drawerLayout, R.string.error_review);
190+
ViewUtil.showShortSnackbar(binding.drawerLayout, R.string.error_review);
217191
return;
218192
}
219193

@@ -223,7 +197,7 @@ private void updateImage(Media media) {
223197
return;
224198
}
225199

226-
simpleDraweeView.setImageURI(media.getImageUrl());
200+
binding.reviewImageView.setImageURI(media.getImageUrl());
227201

228202
reviewController.onImageRefreshed(media); //file name is updated
229203
compositeDisposable.add(reviewHelper.getFirstRevisionOfFile(fileName)
@@ -233,19 +207,19 @@ private void updateImage(Media media) {
233207
reviewController.firstRevision = revision;
234208
reviewPagerAdapter.updateFileInformation();
235209
@SuppressLint({"StringFormatInvalid", "LocalSuppress"}) String caption = String.format(getString(R.string.review_is_uploaded_by), fileName, revision.getUser());
236-
imageCaption.setText(caption);
237-
progressBar.setVisibility(View.GONE);
210+
binding.tvImageCaption.setText(caption);
211+
binding.pbReviewImage.setVisibility(View.GONE);
238212
reviewImageFragment = getInstanceOfReviewImageFragment();
239213
reviewImageFragment.enableButtons();
240214
}));
241-
reviewPager.setCurrentItem(0);
215+
binding.viewPagerReview.setCurrentItem(0);
242216
}
243217

244218
public void swipeToNext() {
245-
int nextPos = reviewPager.getCurrentItem() + 1;
219+
int nextPos = binding.viewPagerReview.getCurrentItem() + 1;
246220
// If currently at category fragment, then check whether the media has any non-hidden category
247221
if (nextPos <= 3) {
248-
reviewPager.setCurrentItem(nextPos);
222+
binding.viewPagerReview.setCurrentItem(nextPos);
249223
if (nextPos == 2) {
250224
// The media has no non-hidden category. Such media are already flagged by server-side bots, so no need to review manually.
251225
if (!hasNonHiddenCategories) {
@@ -262,6 +236,7 @@ public void swipeToNext() {
262236
public void onDestroy() {
263237
super.onDestroy();
264238
compositeDisposable.clear();
239+
binding = null;
265240
}
266241

267242
public void showSkipImageInfo(){
@@ -306,18 +281,18 @@ public boolean onOptionsItemSelected(MenuItem item) {
306281
* this function return the instance of reviewImageFragment
307282
*/
308283
public ReviewImageFragment getInstanceOfReviewImageFragment(){
309-
int currentItemOfReviewPager = reviewPager.getCurrentItem();
310-
reviewImageFragment = (ReviewImageFragment) reviewPagerAdapter.instantiateItem(reviewPager, currentItemOfReviewPager);
284+
int currentItemOfReviewPager = binding.viewPagerReview.getCurrentItem();
285+
reviewImageFragment = (ReviewImageFragment) reviewPagerAdapter.instantiateItem(binding.viewPagerReview, currentItemOfReviewPager);
311286
return reviewImageFragment;
312287
}
313288

314289
/**
315290
* set up the media detail fragment when click on the review image
316291
*/
317292
private void setUpMediaDetailFragment() {
318-
if (mediaDetailContainer.getVisibility() == View.GONE && media != null) {
319-
mediaDetailContainer.setVisibility(View.VISIBLE);
320-
reviewContainer.setVisibility(View.INVISIBLE);
293+
if (binding.mediaDetailContainer.getVisibility() == View.GONE && media != null) {
294+
binding.mediaDetailContainer.setVisibility(View.VISIBLE);
295+
binding.reviewActivityContainer.setVisibility(View.INVISIBLE);
321296
FragmentManager fragmentManager = getSupportFragmentManager();
322297
mediaDetailFragment = new MediaDetailFragment();
323298
Bundle bundle = new Bundle();
@@ -334,9 +309,9 @@ private void setUpMediaDetailFragment() {
334309
*/
335310
@Override
336311
public void onBackPressed() {
337-
if (mediaDetailContainer.getVisibility() == View.VISIBLE) {
338-
mediaDetailContainer.setVisibility(View.GONE);
339-
reviewContainer.setVisibility(View.VISIBLE);
312+
if (binding.mediaDetailContainer.getVisibility() == View.VISIBLE) {
313+
binding.mediaDetailContainer.setVisibility(View.GONE);
314+
binding.reviewActivityContainer.setVisibility(View.VISIBLE);
340315
}
341316
super.onBackPressed();
342317
}
@@ -348,10 +323,11 @@ private void setUpMediaDetailOnOrientation() {
348323
Fragment mediaDetailFragment = getSupportFragmentManager()
349324
.findFragmentById(R.id.mediaDetailContainer);
350325
if (mediaDetailFragment != null) {
351-
mediaDetailContainer.setVisibility(View.VISIBLE);
352-
reviewContainer.setVisibility(View.INVISIBLE);
326+
binding.mediaDetailContainer.setVisibility(View.VISIBLE);
327+
binding.reviewActivityContainer.setVisibility(View.INVISIBLE);
353328
getSupportFragmentManager().beginTransaction()
354329
.replace(R.id.mediaDetailContainer, mediaDetailFragment).commit();
355330
}
356331
}
332+
357333
}

app/src/main/java/fr/free/nrw/commons/review/ReviewImageFragment.java

Lines changed: 33 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,12 @@
77
import android.view.LayoutInflater;
88
import android.view.View;
99
import android.view.ViewGroup;
10-
import android.widget.Button;
11-
import android.widget.ProgressBar;
12-
import android.widget.TextView;
1310

1411
import androidx.annotation.NonNull;
1512

16-
import butterknife.BindView;
17-
import butterknife.ButterKnife;
18-
import butterknife.OnClick;
1913
import fr.free.nrw.commons.Media;
2014
import fr.free.nrw.commons.R;
15+
import fr.free.nrw.commons.databinding.FragmentReviewImageBinding;
2116
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
2217
import java.util.ArrayList;
2318
import java.util.List;
@@ -31,16 +26,10 @@ public class ReviewImageFragment extends CommonsDaggerSupportFragment {
3126

3227
private int position;
3328

34-
public ProgressBar progressBar;
29+
private FragmentReviewImageBinding binding;
30+
31+
3532

36-
@BindView(R.id.tv_review_question)
37-
TextView textViewQuestion;
38-
@BindView(R.id.tv_review_question_context)
39-
TextView textViewQuestionContext;
40-
@BindView(R.id.button_yes)
41-
Button yesButton;
42-
@BindView(R.id.button_no)
43-
Button noButton;
4433

4534
// Constant variable used to store user's key name for onSaveInstanceState method
4635
private final String SAVED_USER = "saved_user";
@@ -68,7 +57,7 @@ private String updateCategoriesQuestion() {
6857
categories.add(value);
6958
}
7059
String catString = TextUtils.join(", ", categories);
71-
if (catString != null && !catString.equals("") && textViewQuestionContext != null) {
60+
if (catString != null && !catString.equals("") && binding.tvReviewQuestionContext != null) {
7261
catString = "<b>" + catString + "</b>";
7362
String stringToConvertHtml = String.format(getResources().getString(R.string.review_category_explanation), catString);
7463
return Html.fromHtml(stringToConvertHtml).toString();
@@ -86,19 +75,19 @@ public void onCreate(Bundle savedInstanceState) {
8675
public View onCreateView(LayoutInflater inflater, ViewGroup container,
8776
Bundle savedInstanceState) {
8877
position = getArguments().getInt("position");
89-
View layoutView = inflater.inflate(R.layout.fragment_review_image, container,
90-
false);
91-
ButterKnife.bind(this, layoutView);
78+
binding = FragmentReviewImageBinding.inflate(inflater, container, false);
9279

9380
String question, explanation=null, yesButtonText, noButtonText;
9481

82+
binding.buttonYes.setOnClickListener(view -> onYesButtonClicked());
83+
9584
switch (position) {
9685
case SPAM:
9786
question = getString(R.string.review_spam);
9887
explanation = getString(R.string.review_spam_explanation);
9988
yesButtonText = getString(R.string.yes);
10089
noButtonText = getString(R.string.no);
101-
noButton.setOnClickListener(view -> getReviewActivity()
90+
binding.buttonNo.setOnClickListener(view -> getReviewActivity()
10291
.reviewController.reportSpam(requireActivity(), getReviewCallback()));
10392
break;
10493
case COPYRIGHT:
@@ -107,7 +96,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
10796
explanation = getString(R.string.review_copyright_explanation);
10897
yesButtonText = getString(R.string.yes);
10998
noButtonText = getString(R.string.no);
110-
noButton.setOnClickListener(view -> getReviewActivity()
99+
binding.buttonNo.setOnClickListener(view -> getReviewActivity()
111100
.reviewController
112101
.reportPossibleCopyRightViolation(requireActivity(), getReviewCallback()));
113102
break;
@@ -117,7 +106,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
117106
explanation = updateCategoriesQuestion();
118107
yesButtonText = getString(R.string.yes);
119108
noButtonText = getString(R.string.no);
120-
noButton.setOnClickListener(view -> {
109+
binding.buttonNo.setOnClickListener(view -> {
121110
getReviewActivity()
122111
.reviewController
123112
.reportWrongCategory(requireActivity(), getReviewCallback());
@@ -144,9 +133,9 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
144133
// Note that the yes and no buttons are swapped in this section
145134
yesButtonText = getString(R.string.review_thanks_yes_button_text);
146135
noButtonText = getString(R.string.review_thanks_no_button_text);
147-
yesButton.setTextColor(Color.parseColor("#116aaa"));
148-
noButton.setTextColor(Color.parseColor("#228b22"));
149-
noButton.setOnClickListener(view -> {
136+
binding.buttonYes.setTextColor(Color.parseColor("#116aaa"));
137+
binding.buttonNo.setTextColor(Color.parseColor("#228b22"));
138+
binding.buttonNo.setOnClickListener(view -> {
150139
getReviewActivity().reviewController.sendThanks(getReviewActivity());
151140
getReviewActivity().swipeToNext();
152141
});
@@ -159,11 +148,11 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
159148
noButtonText = "no";
160149
}
161150

162-
textViewQuestion.setText(question);
163-
textViewQuestionContext.setText(explanation);
164-
yesButton.setText(yesButtonText);
165-
noButton.setText(noButtonText);
166-
return layoutView;
151+
binding.tvReviewQuestion.setText(question);
152+
binding.tvReviewQuestionContext.setText(explanation);
153+
binding.buttonYes.setText(yesButtonText);
154+
binding.buttonNo.setText(noButtonText);
155+
return binding.getRoot();
167156
}
168157

169158

@@ -200,29 +189,34 @@ public void onFailure() {
200189
* been loaded to enable the review buttons.
201190
*/
202191
public void enableButtons() {
203-
yesButton.setEnabled(true);
204-
yesButton.setAlpha(1);
205-
noButton.setEnabled(true);
206-
noButton.setAlpha(1);
192+
binding.buttonYes.setEnabled(true);
193+
binding.buttonYes.setAlpha(1);
194+
binding.buttonNo.setEnabled(true);
195+
binding.buttonNo.setAlpha(1);
207196
}
208197

209198
/**
210199
* This function is called when an image is being loaded
211200
* to disable the review buttons
212201
*/
213202
public void disableButtons() {
214-
yesButton.setEnabled(false);
215-
yesButton.setAlpha(0.5f);
216-
noButton.setEnabled(false);
217-
noButton.setAlpha(0.5f);
203+
binding.buttonYes.setEnabled(false);
204+
binding.buttonYes.setAlpha(0.5f);
205+
binding.buttonNo.setEnabled(false);
206+
binding.buttonNo.setAlpha(0.5f);
218207
}
219208

220-
@OnClick(R.id.button_yes)
221209
void onYesButtonClicked() {
222210
getReviewActivity().swipeToNext();
223211
}
224212

225213
private ReviewActivity getReviewActivity() {
226214
return (ReviewActivity) requireActivity();
227215
}
216+
217+
@Override
218+
public void onDestroy() {
219+
super.onDestroy();
220+
binding = null;
221+
}
228222
}

app/src/main/res/layout/activity_review.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
android:orientation="vertical"
2121
android:visibility="visible">
2222

23-
<include layout="@layout/toolbar" />
23+
<include
24+
android:id="@+id/toolbarBinding"
25+
layout="@layout/toolbar" />
2426

2527

2628
<androidx.appcompat.widget.AppCompatButton
@@ -123,4 +125,4 @@
123125

124126
</LinearLayout>
125127

126-
</androidx.drawerlayout.widget.DrawerLayout>
128+
</androidx.drawerlayout.widget.DrawerLayout>

0 commit comments

Comments
 (0)