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