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