Migrated Review Package to View Binding (#5604)

* Migrated Review Package to View Binding
* fix
This commit is contained in:
Shashank Kumar 2024-03-25 09:47:08 +05:30 committed by GitHub
parent a45ab9cf16
commit 2a2780a4d2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 90 additions and 109 deletions

View file

@ -11,22 +11,12 @@ import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.appcompat.widget.Toolbar;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.facebook.drawee.view.SimpleDraweeView;
import com.viewpagerindicator.CirclePageIndicator;
import fr.free.nrw.commons.Media; import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.auth.AccountUtil; import fr.free.nrw.commons.auth.AccountUtil;
import fr.free.nrw.commons.databinding.ActivityReviewBinding;
import fr.free.nrw.commons.delete.DeleteHelper; import fr.free.nrw.commons.delete.DeleteHelper;
import fr.free.nrw.commons.media.MediaDetailFragment; import fr.free.nrw.commons.media.MediaDetailFragment;
import fr.free.nrw.commons.theme.BaseActivity; import fr.free.nrw.commons.theme.BaseActivity;
@ -39,27 +29,10 @@ import javax.inject.Inject;
public class ReviewActivity extends BaseActivity { public class ReviewActivity extends BaseActivity {
@BindView(R.id.pager_indicator_review)
public CirclePageIndicator pagerIndicator; private ActivityReviewBinding binding;
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.drawer_layout)
DrawerLayout drawerLayout;
@BindView(R.id.view_pager_review)
ReviewViewPager reviewPager;
@BindView(R.id.skip_image)
Button btnSkipImage;
@BindView(R.id.review_image_view)
SimpleDraweeView simpleDraweeView;
@BindView(R.id.pb_review_image)
ProgressBar progressBar;
@BindView(R.id.tv_image_caption)
TextView imageCaption;
@BindView(R.id.mediaDetailContainer)
FrameLayout mediaDetailContainer;
MediaDetailFragment mediaDetailFragment; MediaDetailFragment mediaDetailFragment;
@BindView(R.id.reviewActivityContainer)
LinearLayout reviewContainer;
public ReviewPagerAdapter reviewPagerAdapter; public ReviewPagerAdapter reviewPagerAdapter;
public ReviewController reviewController; public ReviewController reviewController;
@Inject @Inject
@ -110,19 +83,20 @@ public class ReviewActivity extends BaseActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_review); binding = ActivityReviewBinding.inflate(getLayoutInflater());
ButterKnife.bind(this); setContentView(binding.getRoot());
setSupportActionBar(toolbar);
setSupportActionBar(binding.toolbarBinding.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
reviewController = new ReviewController(deleteHelper, this); reviewController = new ReviewController(deleteHelper, this);
reviewPagerAdapter = new ReviewPagerAdapter(getSupportFragmentManager()); reviewPagerAdapter = new ReviewPagerAdapter(getSupportFragmentManager());
reviewPager.setAdapter(reviewPagerAdapter); binding.viewPagerReview.setAdapter(reviewPagerAdapter);
pagerIndicator.setViewPager(reviewPager); binding.pagerIndicatorReview.setViewPager(binding.viewPagerReview);
progressBar.setVisibility(View.VISIBLE); binding.pbReviewImage.setVisibility(View.VISIBLE);
Drawable d[]=btnSkipImage.getCompoundDrawablesRelative(); Drawable d[]=binding.skipImage.getCompoundDrawablesRelative();
d[2].setColorFilter(getApplicationContext().getResources().getColor(R.color.button_blue), PorterDuff.Mode.SRC_IN); d[2].setColorFilter(getApplicationContext().getResources().getColor(R.color.button_blue), PorterDuff.Mode.SRC_IN);
if (savedInstanceState != null && savedInstanceState.getParcelable(SAVED_MEDIA) != null) { if (savedInstanceState != null && savedInstanceState.getParcelable(SAVED_MEDIA) != null) {
@ -132,17 +106,17 @@ public class ReviewActivity extends BaseActivity {
runRandomizer(); //Run randomizer whenever everything is ready so that a first random image will be added runRandomizer(); //Run randomizer whenever everything is ready so that a first random image will be added
} }
btnSkipImage.setOnClickListener(view -> { binding.skipImage.setOnClickListener(view -> {
reviewImageFragment = getInstanceOfReviewImageFragment(); reviewImageFragment = getInstanceOfReviewImageFragment();
reviewImageFragment.disableButtons(); reviewImageFragment.disableButtons();
runRandomizer(); runRandomizer();
}); });
simpleDraweeView.setOnClickListener(view ->setUpMediaDetailFragment()); binding.reviewImageView.setOnClickListener(view ->setUpMediaDetailFragment());
btnSkipImage.setOnTouchListener((view, event) -> { binding.skipImage.setOnTouchListener((view, event) -> {
if (event.getAction() == MotionEvent.ACTION_UP && event.getRawX() >= ( if (event.getAction() == MotionEvent.ACTION_UP && event.getRawX() >= (
btnSkipImage.getRight() - btnSkipImage binding.skipImage.getRight() - binding.skipImage
.getCompoundDrawables()[2].getBounds().width())) { .getCompoundDrawables()[2].getBounds().width())) {
showSkipImageInfo(); showSkipImageInfo();
return true; return true;
@ -160,8 +134,8 @@ public class ReviewActivity extends BaseActivity {
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
public boolean runRandomizer() { public boolean runRandomizer() {
hasNonHiddenCategories = false; hasNonHiddenCategories = false;
progressBar.setVisibility(View.VISIBLE); binding.pbReviewImage.setVisibility(View.VISIBLE);
reviewPager.setCurrentItem(0); binding.viewPagerReview.setCurrentItem(0);
// Finds non-hidden categories from Media instance // Finds non-hidden categories from Media instance
compositeDisposable.add(reviewHelper.getRandomMedia() compositeDisposable.add(reviewHelper.getRandomMedia()
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
@ -213,7 +187,7 @@ public class ReviewActivity extends BaseActivity {
this.media = media; this.media = media;
String fileName = media.getFilename(); String fileName = media.getFilename();
if (fileName.length() == 0) { if (fileName.length() == 0) {
ViewUtil.showShortSnackbar(drawerLayout, R.string.error_review); ViewUtil.showShortSnackbar(binding.drawerLayout, R.string.error_review);
return; return;
} }
@ -223,7 +197,7 @@ public class ReviewActivity extends BaseActivity {
return; return;
} }
simpleDraweeView.setImageURI(media.getImageUrl()); binding.reviewImageView.setImageURI(media.getImageUrl());
reviewController.onImageRefreshed(media); //file name is updated reviewController.onImageRefreshed(media); //file name is updated
compositeDisposable.add(reviewHelper.getFirstRevisionOfFile(fileName) compositeDisposable.add(reviewHelper.getFirstRevisionOfFile(fileName)
@ -233,19 +207,19 @@ public class ReviewActivity extends BaseActivity {
reviewController.firstRevision = revision; reviewController.firstRevision = revision;
reviewPagerAdapter.updateFileInformation(); reviewPagerAdapter.updateFileInformation();
@SuppressLint({"StringFormatInvalid", "LocalSuppress"}) String caption = String.format(getString(R.string.review_is_uploaded_by), fileName, revision.getUser()); @SuppressLint({"StringFormatInvalid", "LocalSuppress"}) String caption = String.format(getString(R.string.review_is_uploaded_by), fileName, revision.getUser());
imageCaption.setText(caption); binding.tvImageCaption.setText(caption);
progressBar.setVisibility(View.GONE); binding.pbReviewImage.setVisibility(View.GONE);
reviewImageFragment = getInstanceOfReviewImageFragment(); reviewImageFragment = getInstanceOfReviewImageFragment();
reviewImageFragment.enableButtons(); reviewImageFragment.enableButtons();
})); }));
reviewPager.setCurrentItem(0); binding.viewPagerReview.setCurrentItem(0);
} }
public void swipeToNext() { public void swipeToNext() {
int nextPos = reviewPager.getCurrentItem() + 1; int nextPos = binding.viewPagerReview.getCurrentItem() + 1;
// If currently at category fragment, then check whether the media has any non-hidden category // If currently at category fragment, then check whether the media has any non-hidden category
if (nextPos <= 3) { if (nextPos <= 3) {
reviewPager.setCurrentItem(nextPos); binding.viewPagerReview.setCurrentItem(nextPos);
if (nextPos == 2) { if (nextPos == 2) {
// The media has no non-hidden category. Such media are already flagged by server-side bots, so no need to review manually. // The media has no non-hidden category. Such media are already flagged by server-side bots, so no need to review manually.
if (!hasNonHiddenCategories) { if (!hasNonHiddenCategories) {
@ -262,6 +236,7 @@ public class ReviewActivity extends BaseActivity {
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
compositeDisposable.clear(); compositeDisposable.clear();
binding = null;
} }
public void showSkipImageInfo(){ public void showSkipImageInfo(){
@ -306,8 +281,8 @@ public class ReviewActivity extends BaseActivity {
* this function return the instance of reviewImageFragment * this function return the instance of reviewImageFragment
*/ */
public ReviewImageFragment getInstanceOfReviewImageFragment(){ public ReviewImageFragment getInstanceOfReviewImageFragment(){
int currentItemOfReviewPager = reviewPager.getCurrentItem(); int currentItemOfReviewPager = binding.viewPagerReview.getCurrentItem();
reviewImageFragment = (ReviewImageFragment) reviewPagerAdapter.instantiateItem(reviewPager, currentItemOfReviewPager); reviewImageFragment = (ReviewImageFragment) reviewPagerAdapter.instantiateItem(binding.viewPagerReview, currentItemOfReviewPager);
return reviewImageFragment; return reviewImageFragment;
} }
@ -315,9 +290,9 @@ public class ReviewActivity extends BaseActivity {
* set up the media detail fragment when click on the review image * set up the media detail fragment when click on the review image
*/ */
private void setUpMediaDetailFragment() { private void setUpMediaDetailFragment() {
if (mediaDetailContainer.getVisibility() == View.GONE && media != null) { if (binding.mediaDetailContainer.getVisibility() == View.GONE && media != null) {
mediaDetailContainer.setVisibility(View.VISIBLE); binding.mediaDetailContainer.setVisibility(View.VISIBLE);
reviewContainer.setVisibility(View.INVISIBLE); binding.reviewActivityContainer.setVisibility(View.INVISIBLE);
FragmentManager fragmentManager = getSupportFragmentManager(); FragmentManager fragmentManager = getSupportFragmentManager();
mediaDetailFragment = new MediaDetailFragment(); mediaDetailFragment = new MediaDetailFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
@ -334,9 +309,9 @@ public class ReviewActivity extends BaseActivity {
*/ */
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if (mediaDetailContainer.getVisibility() == View.VISIBLE) { if (binding.mediaDetailContainer.getVisibility() == View.VISIBLE) {
mediaDetailContainer.setVisibility(View.GONE); binding.mediaDetailContainer.setVisibility(View.GONE);
reviewContainer.setVisibility(View.VISIBLE); binding.reviewActivityContainer.setVisibility(View.VISIBLE);
} }
super.onBackPressed(); super.onBackPressed();
} }
@ -348,10 +323,11 @@ public class ReviewActivity extends BaseActivity {
Fragment mediaDetailFragment = getSupportFragmentManager() Fragment mediaDetailFragment = getSupportFragmentManager()
.findFragmentById(R.id.mediaDetailContainer); .findFragmentById(R.id.mediaDetailContainer);
if (mediaDetailFragment != null) { if (mediaDetailFragment != null) {
mediaDetailContainer.setVisibility(View.VISIBLE); binding.mediaDetailContainer.setVisibility(View.VISIBLE);
reviewContainer.setVisibility(View.INVISIBLE); binding.reviewActivityContainer.setVisibility(View.INVISIBLE);
getSupportFragmentManager().beginTransaction() getSupportFragmentManager().beginTransaction()
.replace(R.id.mediaDetailContainer, mediaDetailFragment).commit(); .replace(R.id.mediaDetailContainer, mediaDetailFragment).commit();
} }
} }
} }

View file

@ -7,17 +7,12 @@ import android.text.TextUtils;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import fr.free.nrw.commons.Media; import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.databinding.FragmentReviewImageBinding;
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -31,16 +26,10 @@ public class ReviewImageFragment extends CommonsDaggerSupportFragment {
private int position; private int position;
public ProgressBar progressBar; private FragmentReviewImageBinding binding;
@BindView(R.id.tv_review_question)
TextView textViewQuestion;
@BindView(R.id.tv_review_question_context)
TextView textViewQuestionContext;
@BindView(R.id.button_yes)
Button yesButton;
@BindView(R.id.button_no)
Button noButton;
// Constant variable used to store user's key name for onSaveInstanceState method // Constant variable used to store user's key name for onSaveInstanceState method
private final String SAVED_USER = "saved_user"; private final String SAVED_USER = "saved_user";
@ -68,7 +57,7 @@ public class ReviewImageFragment extends CommonsDaggerSupportFragment {
categories.add(value); categories.add(value);
} }
String catString = TextUtils.join(", ", categories); String catString = TextUtils.join(", ", categories);
if (catString != null && !catString.equals("") && textViewQuestionContext != null) { if (catString != null && !catString.equals("") && binding.tvReviewQuestionContext != null) {
catString = "<b>" + catString + "</b>"; catString = "<b>" + catString + "</b>";
String stringToConvertHtml = String.format(getResources().getString(R.string.review_category_explanation), catString); String stringToConvertHtml = String.format(getResources().getString(R.string.review_category_explanation), catString);
return Html.fromHtml(stringToConvertHtml).toString(); return Html.fromHtml(stringToConvertHtml).toString();
@ -86,19 +75,19 @@ public class ReviewImageFragment extends CommonsDaggerSupportFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
position = getArguments().getInt("position"); position = getArguments().getInt("position");
View layoutView = inflater.inflate(R.layout.fragment_review_image, container, binding = FragmentReviewImageBinding.inflate(inflater, container, false);
false);
ButterKnife.bind(this, layoutView);
String question, explanation=null, yesButtonText, noButtonText; String question, explanation=null, yesButtonText, noButtonText;
binding.buttonYes.setOnClickListener(view -> onYesButtonClicked());
switch (position) { switch (position) {
case SPAM: case SPAM:
question = getString(R.string.review_spam); question = getString(R.string.review_spam);
explanation = getString(R.string.review_spam_explanation); explanation = getString(R.string.review_spam_explanation);
yesButtonText = getString(R.string.yes); yesButtonText = getString(R.string.yes);
noButtonText = getString(R.string.no); noButtonText = getString(R.string.no);
noButton.setOnClickListener(view -> getReviewActivity() binding.buttonNo.setOnClickListener(view -> getReviewActivity()
.reviewController.reportSpam(requireActivity(), getReviewCallback())); .reviewController.reportSpam(requireActivity(), getReviewCallback()));
break; break;
case COPYRIGHT: case COPYRIGHT:
@ -107,7 +96,7 @@ public class ReviewImageFragment extends CommonsDaggerSupportFragment {
explanation = getString(R.string.review_copyright_explanation); explanation = getString(R.string.review_copyright_explanation);
yesButtonText = getString(R.string.yes); yesButtonText = getString(R.string.yes);
noButtonText = getString(R.string.no); noButtonText = getString(R.string.no);
noButton.setOnClickListener(view -> getReviewActivity() binding.buttonNo.setOnClickListener(view -> getReviewActivity()
.reviewController .reviewController
.reportPossibleCopyRightViolation(requireActivity(), getReviewCallback())); .reportPossibleCopyRightViolation(requireActivity(), getReviewCallback()));
break; break;
@ -117,7 +106,7 @@ public class ReviewImageFragment extends CommonsDaggerSupportFragment {
explanation = updateCategoriesQuestion(); explanation = updateCategoriesQuestion();
yesButtonText = getString(R.string.yes); yesButtonText = getString(R.string.yes);
noButtonText = getString(R.string.no); noButtonText = getString(R.string.no);
noButton.setOnClickListener(view -> { binding.buttonNo.setOnClickListener(view -> {
getReviewActivity() getReviewActivity()
.reviewController .reviewController
.reportWrongCategory(requireActivity(), getReviewCallback()); .reportWrongCategory(requireActivity(), getReviewCallback());
@ -144,9 +133,9 @@ public class ReviewImageFragment extends CommonsDaggerSupportFragment {
// Note that the yes and no buttons are swapped in this section // Note that the yes and no buttons are swapped in this section
yesButtonText = getString(R.string.review_thanks_yes_button_text); yesButtonText = getString(R.string.review_thanks_yes_button_text);
noButtonText = getString(R.string.review_thanks_no_button_text); noButtonText = getString(R.string.review_thanks_no_button_text);
yesButton.setTextColor(Color.parseColor("#116aaa")); binding.buttonYes.setTextColor(Color.parseColor("#116aaa"));
noButton.setTextColor(Color.parseColor("#228b22")); binding.buttonNo.setTextColor(Color.parseColor("#228b22"));
noButton.setOnClickListener(view -> { binding.buttonNo.setOnClickListener(view -> {
getReviewActivity().reviewController.sendThanks(getReviewActivity()); getReviewActivity().reviewController.sendThanks(getReviewActivity());
getReviewActivity().swipeToNext(); getReviewActivity().swipeToNext();
}); });
@ -159,11 +148,11 @@ public class ReviewImageFragment extends CommonsDaggerSupportFragment {
noButtonText = "no"; noButtonText = "no";
} }
textViewQuestion.setText(question); binding.tvReviewQuestion.setText(question);
textViewQuestionContext.setText(explanation); binding.tvReviewQuestionContext.setText(explanation);
yesButton.setText(yesButtonText); binding.buttonYes.setText(yesButtonText);
noButton.setText(noButtonText); binding.buttonNo.setText(noButtonText);
return layoutView; return binding.getRoot();
} }
@ -200,10 +189,10 @@ public class ReviewImageFragment extends CommonsDaggerSupportFragment {
* been loaded to enable the review buttons. * been loaded to enable the review buttons.
*/ */
public void enableButtons() { public void enableButtons() {
yesButton.setEnabled(true); binding.buttonYes.setEnabled(true);
yesButton.setAlpha(1); binding.buttonYes.setAlpha(1);
noButton.setEnabled(true); binding.buttonNo.setEnabled(true);
noButton.setAlpha(1); binding.buttonNo.setAlpha(1);
} }
/** /**
@ -211,13 +200,12 @@ public class ReviewImageFragment extends CommonsDaggerSupportFragment {
* to disable the review buttons * to disable the review buttons
*/ */
public void disableButtons() { public void disableButtons() {
yesButton.setEnabled(false); binding.buttonYes.setEnabled(false);
yesButton.setAlpha(0.5f); binding.buttonYes.setAlpha(0.5f);
noButton.setEnabled(false); binding.buttonNo.setEnabled(false);
noButton.setAlpha(0.5f); binding.buttonNo.setAlpha(0.5f);
} }
@OnClick(R.id.button_yes)
void onYesButtonClicked() { void onYesButtonClicked() {
getReviewActivity().swipeToNext(); getReviewActivity().swipeToNext();
} }
@ -225,4 +213,10 @@ public class ReviewImageFragment extends CommonsDaggerSupportFragment {
private ReviewActivity getReviewActivity() { private ReviewActivity getReviewActivity() {
return (ReviewActivity) requireActivity(); return (ReviewActivity) requireActivity();
} }
@Override
public void onDestroy() {
super.onDestroy();
binding = null;
}
} }

View file

@ -20,7 +20,9 @@
android:orientation="vertical" android:orientation="vertical"
android:visibility="visible"> android:visibility="visible">
<include layout="@layout/toolbar" /> <include
android:id="@+id/toolbarBinding"
layout="@layout/toolbar" />
<androidx.appcompat.widget.AppCompatButton <androidx.appcompat.widget.AppCompatButton
@ -123,4 +125,4 @@
</LinearLayout> </LinearLayout>
</androidx.drawerlayout.widget.DrawerLayout> </androidx.drawerlayout.widget.DrawerLayout>

View file

@ -12,6 +12,7 @@ import fr.free.nrw.commons.Media
import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.databinding.ActivityReviewBinding
import io.reactivex.Single import io.reactivex.Single
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
@ -58,6 +59,8 @@ class ReviewActivityTest {
@Mock @Mock
private lateinit var reviewImageFragment: ReviewImageFragment private lateinit var reviewImageFragment: ReviewImageFragment
private lateinit var binding: ActivityReviewBinding
@Before @Before
fun setUp() { fun setUp() {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
@ -71,11 +74,12 @@ class ReviewActivityTest {
Fresco.initialize(context) Fresco.initialize(context)
activity = Robolectric.buildActivity(ReviewActivity::class.java).create().get() activity = Robolectric.buildActivity(ReviewActivity::class.java).create().get()
binding = ActivityReviewBinding.inflate(activity.layoutInflater)
menuItem = RoboMenuItem(null) menuItem = RoboMenuItem(null)
menu = RoboMenu(context) menu = RoboMenu(context)
Whitebox.setInternalState(activity, "reviewPager", reviewPager); Whitebox.setInternalState(binding, "viewPagerReview", reviewPager);
Whitebox.setInternalState(activity, "hasNonHiddenCategories", hasNonHiddenCategories); Whitebox.setInternalState(activity, "hasNonHiddenCategories", hasNonHiddenCategories);
Whitebox.setInternalState(activity, "reviewHelper", reviewHelper); Whitebox.setInternalState(activity, "reviewHelper", reviewHelper);
Whitebox.setInternalState(activity, "reviewImageFragment", reviewImageFragment); Whitebox.setInternalState(activity, "reviewImageFragment", reviewImageFragment);
@ -192,4 +196,4 @@ class ReviewActivityTest {
activity.onBackPressed() activity.onBackPressed()
} }
} }

View file

@ -18,6 +18,7 @@ import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.databinding.FragmentReviewImageBinding
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
@ -57,6 +58,8 @@ class ReviewImageFragmentTest {
private lateinit var activity: ReviewActivity private lateinit var activity: ReviewActivity
private lateinit var binding: FragmentReviewImageBinding
@Before @Before
fun setUp() { fun setUp() {
@ -78,16 +81,18 @@ class ReviewImageFragmentTest {
view = LayoutInflater.from(activity) view = LayoutInflater.from(activity)
.inflate(R.layout.fragment_review_image, null) as View .inflate(R.layout.fragment_review_image, null) as View
binding = FragmentReviewImageBinding.inflate(LayoutInflater.from(activity))
noButton = view.findViewById(R.id.button_no) noButton = view.findViewById(R.id.button_no)
yesButton = view.findViewById(R.id.button_yes) yesButton = view.findViewById(R.id.button_yes)
textViewQuestion = view.findViewById(R.id.tv_review_question) textViewQuestion = view.findViewById(R.id.tv_review_question)
textViewQuestionContext = view.findViewById(R.id.tv_review_question_context) textViewQuestionContext = view.findViewById(R.id.tv_review_question_context)
fragment.noButton = noButton Whitebox.setInternalState(fragment, "binding", binding)
fragment.yesButton = yesButton Whitebox.setInternalState(binding, "buttonYes", yesButton)
fragment.textViewQuestion = textViewQuestion Whitebox.setInternalState(binding, "buttonNo", noButton)
fragment.textViewQuestionContext = textViewQuestionContext Whitebox.setInternalState(binding, "tvReviewQuestion", textViewQuestion)
Whitebox.setInternalState(binding, "tvReviewQuestionContext", textViewQuestionContext)
} }
@Test @Test
@ -159,4 +164,4 @@ class ReviewImageFragmentTest {
shadowOf(Looper.getMainLooper()).idle() shadowOf(Looper.getMainLooper()).idle()
Assert.assertNotNull(method.invoke(fragment)) Assert.assertNotNull(method.invoke(fragment))
} }
} }