From 0c8b92c7aadc0e2d684f1f61cfe1aad3706faffc Mon Sep 17 00:00:00 2001
From: Prince kushwaha <65972015+Prince-kushwaha@users.noreply.github.com>
Date: Mon, 10 May 2021 21:37:28 +0530
Subject: [PATCH] Show media details fragment when on clicking image of Peer
Review (#4374)
* * show MediaDetailFragment in ReviewActivity on image click
* Add javadoc
* Reformated code of ReviewActivity xml
* fix typos
* add unit test
* made minor changes
---
.../commons/media/MediaDetailFragment.java | 7 +-
.../nrw/commons/review/ReviewActivity.java | 60 +++++-
app/src/main/res/layout/activity_review.xml | 194 +++++++++---------
.../nrw/commons/review/ReviewActivityTest.kt | 25 +++
4 files changed, 189 insertions(+), 97 deletions(-)
diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java
index a8625cd6c..fa04da47c 100644
--- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java
+++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java
@@ -332,8 +332,13 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements
Label.valuesAsList()), categoryRecyclerView, categoryClient, this);
categoryRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
categoryRecyclerView.setAdapter(categoryEditSearchRecyclerViewAdapter);
+ // detail provider is null when fragment is shown in review activity
+ if (detailProvider != null) {
+ media = detailProvider.getMediaAtPosition(index);
+ } else {
+ media = getArguments().getParcelable("media");
+ }
- media = detailProvider.getMediaAtPosition(index);
scrollView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
diff --git a/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.java b/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.java
index 3376667cb..4839f6922 100644
--- a/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.java
@@ -12,10 +12,14 @@ import android.view.MenuItem;
import android.view.MotionEvent;
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.FragmentManager;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.facebook.drawee.view.SimpleDraweeView;
@@ -23,6 +27,7 @@ import com.viewpagerindicator.CirclePageIndicator;
import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.delete.DeleteHelper;
+import fr.free.nrw.commons.media.MediaDetailFragment;
import fr.free.nrw.commons.theme.BaseActivity;
import fr.free.nrw.commons.utils.DialogUtil;
import fr.free.nrw.commons.utils.ViewUtil;
@@ -49,6 +54,11 @@ public class ReviewActivity extends BaseActivity {
ProgressBar progressBar;
@BindView(R.id.tv_image_caption)
TextView imageCaption;
+ @BindView(R.id.mediaDetailContainer)
+ FrameLayout mediaDetailContainer;
+ MediaDetailFragment mediaDetailFragment;
+ @BindView(R.id.reviewActivityContainer)
+ LinearLayout reviewContainer;
public ReviewPagerAdapter reviewPagerAdapter;
public ReviewController reviewController;
@Inject
@@ -109,9 +119,9 @@ public class ReviewActivity extends BaseActivity {
Drawable d[]=btnSkipImage.getCompoundDrawablesRelative();
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) {
updateImage(savedInstanceState.getParcelable(SAVED_MEDIA)); // Use existing media if we have one
+ setUpMediaDetailOnOrientation();
} else {
runRandomizer(); //Run randomizer whenever everything is ready so that a first random image will be added
}
@@ -122,6 +132,8 @@ public class ReviewActivity extends BaseActivity {
runRandomizer();
});
+ simpleDraweeView.setOnClickListener(view ->setUpMediaDetailFragment());
+
btnSkipImage.setOnTouchListener((view, event) -> {
if (event.getAction() == MotionEvent.ACTION_UP && event.getRawX() >= (
btnSkipImage.getRight() - btnSkipImage
@@ -242,4 +254,48 @@ public class ReviewActivity extends BaseActivity {
reviewImageFragment = (ReviewImageFragment) reviewPagerAdapter.instantiateItem(reviewPager, currentItemOfReviewPager);
return reviewImageFragment;
}
+
+ /**
+ * set up the media detail fragment when click on the review image
+ */
+ private void setUpMediaDetailFragment() {
+ if (mediaDetailContainer.getVisibility() == View.GONE && media != null) {
+ mediaDetailContainer.setVisibility(View.VISIBLE);
+ reviewContainer.setVisibility(View.INVISIBLE);
+ FragmentManager fragmentManager = getSupportFragmentManager();
+ mediaDetailFragment = new MediaDetailFragment();
+ Bundle bundle = new Bundle();
+ bundle.putParcelable("media", media);
+ mediaDetailFragment.setArguments(bundle);
+ fragmentManager.beginTransaction().add(R.id.mediaDetailContainer, mediaDetailFragment).
+ addToBackStack("MediaDetail").commit();
+ }
+ }
+
+ /**
+ * handle the back pressed event of this activity
+ * this function call every time when back button is pressed
+ */
+ @Override
+ public void onBackPressed() {
+ if (mediaDetailContainer.getVisibility() == View.VISIBLE) {
+ mediaDetailContainer.setVisibility(View.GONE);
+ reviewContainer.setVisibility(View.VISIBLE);
+ }
+ super.onBackPressed();
+ }
+
+ /**
+ * set up media detail fragment after orientation change
+ */
+ private void setUpMediaDetailOnOrientation() {
+ Fragment mediaDetailFragment = getSupportFragmentManager()
+ .findFragmentById(R.id.mediaDetailContainer);
+ if (mediaDetailFragment != null) {
+ mediaDetailContainer.setVisibility(View.VISIBLE);
+ reviewContainer.setVisibility(View.INVISIBLE);
+ getSupportFragmentManager().beginTransaction()
+ .replace(R.id.mediaDetailContainer, mediaDetailFragment).commit();
+ }
+ }
}
diff --git a/app/src/main/res/layout/activity_review.xml b/app/src/main/res/layout/activity_review.xml
index ffd340d23..e4da13677 100644
--- a/app/src/main/res/layout/activity_review.xml
+++ b/app/src/main/res/layout/activity_review.xml
@@ -6,114 +6,120 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_alignParentTop="true"
+ android:layout_marginTop="@dimen/dimen_0"
+ app:srcCompat="@drawable/commons_logo" />
-
+
-
-
+ android:textColor="#FFFFFFFF" />
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewActivityTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewActivityTest.kt
index b5d943d89..7e0a3b7f9 100644
--- a/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewActivityTest.kt
+++ b/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewActivityTest.kt
@@ -19,6 +19,7 @@ import org.robolectric.annotation.Config
import org.robolectric.fakes.RoboMenu
import org.robolectric.fakes.RoboMenuItem
import org.wikipedia.AppAdapter
+import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class)
@Config(sdk = [21], application = TestCommonsApplication::class)
@@ -101,4 +102,28 @@ class ReviewActivityTest {
activity.onOptionsItemSelected(menuItem)
}
+ @Test
+ @Throws(Exception::class)
+ fun testSetUpMediaDetailFragment() {
+ var setUpMediaDetailFragment: Method =
+ ReviewActivity::class.java.getDeclaredMethod("setUpMediaDetailFragment")
+ setUpMediaDetailFragment.isAccessible = true
+ setUpMediaDetailFragment.invoke(activity)
+ }
+
+ @Test
+ @Throws(Exception::class)
+ fun testSetUpMediaDetailOnOrientation() {
+ var setUpMediaDetailFragment: Method =
+ ReviewActivity::class.java.getDeclaredMethod("setUpMediaDetailOnOrientation")
+ setUpMediaDetailFragment.isAccessible = true
+ setUpMediaDetailFragment.invoke(activity)
+ }
+
+ @Test
+ @Throws(Exception::class)
+ fun testOnBackPressed() {
+ activity.onBackPressed()
+ }
+
}
\ No newline at end of file