diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksActivity.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksActivity.java
index 8293890a4..e21e56b38 100644
--- a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksActivity.java
@@ -2,36 +2,22 @@ package fr.free.nrw.commons.bookmarks;
import android.content.Context;
import android.content.Intent;
-import android.database.DataSetObserver;
import android.os.Bundle;
-import com.google.android.material.tabs.TabLayout;
+
import androidx.fragment.app.FragmentManager;
-import androidx.viewpager.widget.ViewPager;
-import android.view.View;
-import android.widget.AdapterView;
import javax.inject.Inject;
-import butterknife.BindView;
import butterknife.ButterKnife;
-import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.contributions.ContributionController;
import fr.free.nrw.commons.media.MediaDetailPagerFragment;
import fr.free.nrw.commons.theme.NavigationBaseActivity;
public class BookmarksActivity extends NavigationBaseActivity
- implements FragmentManager.OnBackStackChangedListener,
- MediaDetailPagerFragment.MediaDetailProvider,
- AdapterView.OnItemClickListener {
+ implements FragmentManager.OnBackStackChangedListener {
private FragmentManager supportFragmentManager;
- private BookmarksPagerAdapter adapter;
- private MediaDetailPagerFragment mediaDetails;
- @BindView(R.id.viewPagerBookmarks)
- ViewPager viewPager;
- @BindView(R.id.tab_layout)
- TabLayout tabLayout;
@Inject
ContributionController controller;
@@ -47,10 +33,16 @@ public class BookmarksActivity extends NavigationBaseActivity
supportFragmentManager = getSupportFragmentManager();
supportFragmentManager.addOnBackStackChangedListener(this);
initDrawer();
+ initViews();
+ }
- adapter = new BookmarksPagerAdapter(supportFragmentManager, this);
- viewPager.setAdapter(adapter);
- tabLayout.setupWithViewPager(viewPager);
+ private void initViews() {
+ BookmarksFragment fragment = new BookmarksFragment();
+ supportFragmentManager
+ .beginTransaction()
+ .add(R.id.bookmarksFragmentContainer, fragment)
+ .addToBackStack(null)
+ .commit();
}
/**
@@ -67,7 +59,6 @@ public class BookmarksActivity extends NavigationBaseActivity
public void onBackStackChanged() {
if (supportFragmentManager.getBackStackEntryCount() == 0) {
// The activity has the focus
- adapter.requestPictureListUpdate();
initDrawer();
}
}
@@ -77,89 +68,4 @@ public class BookmarksActivity extends NavigationBaseActivity
super.onActivityResult(requestCode, resultCode, data);
controller.handleActivityResult(this, requestCode, resultCode, data);
}
-
- /**
- * This method is called onClick of media inside category details (CategoryImageListFragment).
- */
- @Override
- public void onItemClick(AdapterView> adapterView, View view, int i, long l) {
- if (mediaDetails == null || !mediaDetails.isVisible()) {
- mediaDetails = new MediaDetailPagerFragment(false, true);
- supportFragmentManager
- .beginTransaction()
- .hide(supportFragmentManager.getFragments().get(supportFragmentManager.getBackStackEntryCount()))
- .add(R.id.fragmentContainer, mediaDetails)
- .addToBackStack(null)
- .commit();
- supportFragmentManager.executePendingTransactions();
- }
- mediaDetails.showImage(i);
- forceInitBackButton();
- }
-
- /**
- * This method is called on success of API call for featured Images.
- * The viewpager will notified that number of items have changed.
- */
- public void viewPagerNotifyDataSetChanged() {
- if (mediaDetails!=null){
- mediaDetails.notifyDataSetChanged();
- }
- }
-
- /**
- * This method is called mediaDetailPagerFragment. It returns the Media Object at that Index
- * @param i It is the index of which media object is to be returned which is same as
- * current index of viewPager.
- * @return Media Object
- */
- @Override
- public Media getMediaAtPosition(int i) {
- if (adapter.getMediaAdapter() == null) {
- // not yet ready to return data
- return null;
- } else {
- return (Media) adapter.getMediaAdapter().getItem(i);
- }
- }
-
- /**
- * This method is called on from getCount of MediaDetailPagerFragment
- * The viewpager will contain same number of media items as that of media elements in adapter.
- * @return Total Media count in the adapter
- */
- @Override
- public int getTotalMediaCount() {
- if (adapter.getMediaAdapter() == null) {
- return 0;
- }
- return adapter.getMediaAdapter().getCount();
- }
-
- /**
- * This method is never called but it was in MediaDetailProvider Interface
- * so it needs to be overrided.
- */
- @Override
- public void notifyDatasetChanged() {
-
- }
-
- /**
- * This method is never called but it was in MediaDetailProvider Interface
- * so it needs to be overrided.
- */
- @Override
- public void registerDataSetObserver(DataSetObserver observer) {
-
- }
-
- /**
- * This method is never called but it was in MediaDetailProvider Interface
- * so it needs to be overrided.
- */
- @Override
- public void unregisterDataSetObserver(DataSetObserver observer) {
-
- }
}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksFragment.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksFragment.java
new file mode 100644
index 000000000..fed19f595
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksFragment.java
@@ -0,0 +1,145 @@
+package fr.free.nrw.commons.bookmarks;
+
+import android.content.Context;
+import android.content.Intent;
+import android.database.DataSetObserver;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+
+import androidx.annotation.Nullable;
+import androidx.fragment.app.FragmentManager;
+import androidx.viewpager.widget.ViewPager;
+
+import com.google.android.material.tabs.TabLayout;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import fr.free.nrw.commons.Media;
+import fr.free.nrw.commons.R;
+import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
+import fr.free.nrw.commons.media.MediaDetailPagerFragment;
+
+public class BookmarksFragment extends CommonsDaggerSupportFragment
+ implements MediaDetailPagerFragment.MediaDetailProvider,
+ AdapterView.OnItemClickListener {
+
+ @BindView(R.id.viewPagerBookmarks)
+ ViewPager viewPager;
+ @BindView(R.id.tab_layout)
+ TabLayout tabLayout;
+ private FragmentManager supportFragmentManager;
+ private BookmarksPagerAdapter adapter;
+ private MediaDetailPagerFragment mediaDetails;
+
+ /**
+ * Consumers should be simply using this method to use this activity.
+ *
+ * @param context A Context of the application package implementing this class.
+ */
+ public static void startYourself(Context context) {
+ Intent intent = new Intent(context, BookmarksActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ context.startActivity(intent);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View v = inflater.inflate(R.layout.fragment_bookmarks, container, false);
+ ButterKnife.bind(this, v);
+ return v;
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ initViewPager();
+ }
+
+ private void initViewPager() {
+ // Activity can call methods in the fragment by acquiring a
+ // reference to the Fragment from FragmentManager, using findFragmentById()
+ supportFragmentManager = getFragmentManager();
+ adapter = new BookmarksPagerAdapter(supportFragmentManager, getContext());
+ viewPager.setAdapter(adapter);
+ tabLayout.setupWithViewPager(viewPager);
+ }
+
+ /**
+ * This method is called onClick of media inside bookmark pictures fragment (BookmarkPicturesFragment).
+ */
+ @Override
+ public void onItemClick(AdapterView> adapterView, View view, int i, long l) {
+ if (mediaDetails == null || !mediaDetails.isVisible()) {
+ mediaDetails = new MediaDetailPagerFragment(false, true);
+ supportFragmentManager
+ .beginTransaction()
+ .hide(supportFragmentManager.getFragments().get(supportFragmentManager.getBackStackEntryCount()))
+ .add(R.id.fragmentContainer, mediaDetails)
+ .addToBackStack(null)
+ .commit();
+ supportFragmentManager.executePendingTransactions();
+ }
+ mediaDetails.showImage(i);
+ }
+
+ /**
+ * This method is called mediaDetailPagerFragment. It returns the Media Object at that Index
+ *
+ * @param i It is the index of which media object is to be returned which is same as
+ * current index of viewPager.
+ * @return Media Object
+ */
+ @Override
+ public Media getMediaAtPosition(int i) {
+ if (adapter.getMediaAdapter() == null) {
+ // not yet ready to return data
+ return null;
+ } else {
+ return (Media) adapter.getMediaAdapter().getItem(i);
+ }
+ }
+
+ /**
+ * This method is called on from getCount of MediaDetailPagerFragment
+ * The viewpager will contain same number of media items as that of media elements in adapter.
+ *
+ * @return Total Media count in the adapter
+ */
+ @Override
+ public int getTotalMediaCount() {
+ if (adapter.getMediaAdapter() == null) {
+ return 0;
+ }
+ return adapter.getMediaAdapter().getCount();
+ }
+
+ /**
+ * This method is never called but it was in MediaDetailProvider Interface
+ * so it needs to be overrided.
+ */
+ @Override
+ public void notifyDatasetChanged() {
+
+ }
+
+ /**
+ * This method is never called but it was in MediaDetailProvider Interface
+ * so it needs to be overrided.
+ */
+ @Override
+ public void registerDataSetObserver(DataSetObserver observer) {
+
+ }
+
+ /**
+ * This method is never called but it was in MediaDetailProvider Interface
+ * so it needs to be overrided.
+ */
+ @Override
+ public void unregisterDataSetObserver(DataSetObserver observer) {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragment.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragment.java
index 10ac722fa..d03bcec02 100644
--- a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragment.java
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragment.java
@@ -25,6 +25,7 @@ import dagger.android.support.DaggerFragment;
import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.bookmarks.BookmarksActivity;
+import fr.free.nrw.commons.bookmarks.BookmarksFragment;
import fr.free.nrw.commons.category.GridViewAdapter;
import fr.free.nrw.commons.utils.NetworkUtils;
import fr.free.nrw.commons.utils.ViewUtil;
@@ -73,7 +74,7 @@ public class BookmarkPicturesFragment extends DaggerFragment {
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- gridView.setOnItemClickListener((AdapterView.OnItemClickListener) getActivity());
+ gridView.setOnItemClickListener((AdapterView.OnItemClickListener) getParentFragment());
initList();
}
@@ -94,14 +95,6 @@ public class BookmarkPicturesFragment extends DaggerFragment {
super.onResume();
if (controller.needRefreshBookmarkedPictures()) {
gridView.setVisibility(GONE);
- if (gridAdapter != null) {
- gridAdapter.clear();
- try {
- ((BookmarksActivity) getContext()).viewPagerNotifyDataSetChanged();
- }catch (Exception e){
- e.printStackTrace();
- }
- }
initList();
}
}
@@ -202,11 +195,6 @@ public class BookmarkPicturesFragment extends DaggerFragment {
return;
}
gridAdapter.addItems(collection);
- try {
- ((BookmarksActivity) getContext()).viewPagerNotifyDataSetChanged();
- }catch (Exception e){
- e.printStackTrace();
- }
}
progressBar.setVisibility(GONE);
statusTextView.setVisibility(GONE);
diff --git a/app/src/main/java/fr/free/nrw/commons/di/FragmentBuilderModule.java b/app/src/main/java/fr/free/nrw/commons/di/FragmentBuilderModule.java
index 97263d128..9f64f1474 100644
--- a/app/src/main/java/fr/free/nrw/commons/di/FragmentBuilderModule.java
+++ b/app/src/main/java/fr/free/nrw/commons/di/FragmentBuilderModule.java
@@ -2,6 +2,7 @@ package fr.free.nrw.commons.di;
import dagger.Module;
import dagger.android.ContributesAndroidInjector;
+import fr.free.nrw.commons.bookmarks.BookmarksFragment;
import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsFragment;
import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesFragment;
import fr.free.nrw.commons.category.CategoryImagesListFragment;
@@ -71,4 +72,7 @@ public abstract class FragmentBuilderModule {
@ContributesAndroidInjector
abstract ReviewImageFragment bindReviewOutOfContextFragment();
+ @ContributesAndroidInjector
+ abstract BookmarksFragment bindBookmarksFragment();
+
}
diff --git a/app/src/main/res/layout/activity_bookmarks.xml b/app/src/main/res/layout/activity_bookmarks.xml
index 028c43c91..3994fd856 100644
--- a/app/src/main/res/layout/activity_bookmarks.xml
+++ b/app/src/main/res/layout/activity_bookmarks.xml
@@ -1,6 +1,5 @@
@@ -11,40 +10,13 @@
-
-
-
-
+ android:id="@+id/bookmarksFragmentContainer"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_bookmarks.xml b/app/src/main/res/layout/fragment_bookmarks.xml
new file mode 100644
index 000000000..14572dca0
--- /dev/null
+++ b/app/src/main/res/layout/fragment_bookmarks.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file