From 8f8b1227583f004e72735d8be6d6e0774fe054de Mon Sep 17 00:00:00 2001 From: Paul Hawke Date: Sat, 12 Jul 2025 10:39:00 -0500 Subject: [PATCH] Convert BookmarksPagerAdapter to kotlin --- .../bookmarks/BookmarksPagerAdapter.java | 94 ------------------- .../bookmarks/BookmarksPagerAdapter.kt | 82 ++++++++++++++++ .../bookmarks/BookmarksPagerAdapterTests.kt | 8 ++ .../LoggedOutBookmarksPagerAdapterTests.kt | 8 ++ 4 files changed, 98 insertions(+), 94 deletions(-) delete mode 100644 app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapter.java create mode 100644 app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapter.kt diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapter.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapter.java deleted file mode 100644 index f0620032a..000000000 --- a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapter.java +++ /dev/null @@ -1,94 +0,0 @@ -package fr.free.nrw.commons.bookmarks; - -import android.content.Context; -import android.os.Bundle; -import android.widget.ListAdapter; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; - -import java.util.ArrayList; - -import fr.free.nrw.commons.R; -import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesFragment; - -public class BookmarksPagerAdapter extends FragmentPagerAdapter { - - private ArrayList pages; - - /** - * Default Constructor - * @param fm - * @param context - * @param onlyPictures is true if the fragment requires only BookmarkPictureFragment - * (i.e. when no user is logged in). - */ - BookmarksPagerAdapter(FragmentManager fm, Context context,boolean onlyPictures) { - super(fm); - pages = new ArrayList<>(); - Bundle picturesBundle = new Bundle(); - picturesBundle.putString("categoryName", context.getString(R.string.title_page_bookmarks_pictures)); - picturesBundle.putInt("order", 0); - pages.add(new BookmarkPages( - new BookmarkListRootFragment(picturesBundle, this), - context.getString(R.string.title_page_bookmarks_pictures))); - if (!onlyPictures) { - // if onlyPictures is false we also add the location fragment. - Bundle locationBundle = new Bundle(); - locationBundle.putString("categoryName", - context.getString(R.string.title_page_bookmarks_locations)); - locationBundle.putInt("order", 1); - pages.add(new BookmarkPages( - new BookmarkListRootFragment(locationBundle, this), - context.getString(R.string.title_page_bookmarks_locations))); - - locationBundle.putInt("orderItem", 2); - pages.add(new BookmarkPages( - new BookmarkListRootFragment(locationBundle, this), - context.getString(R.string.title_page_bookmarks_items))); - } - final Bundle categoriesBundle = new Bundle(); - categoriesBundle.putString("categoryName", - context.getString(R.string.title_page_bookmarks_categories)); - categoriesBundle.putInt("order", 3); - pages.add(new BookmarkPages( - new BookmarkListRootFragment(categoriesBundle, this), - context.getString(R.string.title_page_bookmarks_categories))); - notifyDataSetChanged(); - } - - @Override - public Fragment getItem(int position) { - return pages.get(position).getPage(); - } - - @Override - public int getCount() { - return pages.size(); - } - - @Nullable - @Override - public CharSequence getPageTitle(int position) { - return pages.get(position).getTitle(); - } - - /** - * Return the Adapter used to display the picture gridview - * @return adapter - */ - public ListAdapter getMediaAdapter() { - BookmarkPicturesFragment fragment = (BookmarkPicturesFragment)(((BookmarkListRootFragment)pages.get(0).getPage()).listFragment); - return fragment.getAdapter(); - } - - /** - * Update the pictures list for the bookmark fragment - */ - public void requestPictureListUpdate() { - BookmarkPicturesFragment fragment = (BookmarkPicturesFragment)(((BookmarkListRootFragment)pages.get(0).getPage()).listFragment); - fragment.onResume(); - } -} diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapter.kt b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapter.kt new file mode 100644 index 000000000..a7cbf0e68 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapter.kt @@ -0,0 +1,82 @@ +package fr.free.nrw.commons.bookmarks + +import android.content.Context +import android.widget.ListAdapter +import androidx.core.os.bundleOf +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter +import fr.free.nrw.commons.R +import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesFragment + +class BookmarksPagerAdapter internal constructor( + fm: FragmentManager, context: Context, onlyPictures: Boolean +) : FragmentPagerAdapter(fm) { + private val pages = mutableListOf() + + /** + * Default Constructor + * @param fm + * @param context + * @param onlyPictures is true if the fragment requires only BookmarkPictureFragment + * (i.e. when no user is logged in). + */ + init { + pages.add( + BookmarkPages( + BookmarkListRootFragment( + bundleOf( + "categoryName" to context.getString(R.string.title_page_bookmarks_pictures), + "order" to 0 + ), this + ), context.getString(R.string.title_page_bookmarks_pictures) + ) + ) + if (!onlyPictures) { + // if onlyPictures is false we also add the location fragment. + val locationBundle = bundleOf( + "categoryName" to context.getString(R.string.title_page_bookmarks_locations), + "order" to 1 + ) + + pages.add( + BookmarkPages( + BookmarkListRootFragment(locationBundle, this), + context.getString(R.string.title_page_bookmarks_locations) + ) + ) + + locationBundle.putInt("orderItem", 2) + pages.add( + BookmarkPages( + BookmarkListRootFragment(locationBundle, this), + context.getString(R.string.title_page_bookmarks_items) + ) + ) + } + pages.add( + BookmarkPages( + BookmarkListRootFragment( + bundleOf( + "categoryName" to context.getString(R.string.title_page_bookmarks_categories), + "order" to 3 + ), this), + context.getString(R.string.title_page_bookmarks_categories) + ) + ) + notifyDataSetChanged() + } + + override fun getItem(position: Int): Fragment = pages[position].page!! + + override fun getCount(): Int = pages.size + + override fun getPageTitle(position: Int): CharSequence? = pages[position].title + + /** + * Return the Adapter used to display the picture gridview + * @return adapter + */ + val mediaAdapter: ListAdapter? + get() = (((pages[0].page as BookmarkListRootFragment).listFragment) as BookmarkPicturesFragment).getAdapter() +} diff --git a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapterTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapterTests.kt index bf143ecc0..3123bc1d0 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapterTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapterTests.kt @@ -2,12 +2,20 @@ package fr.free.nrw.commons.bookmarks import android.content.Context import androidx.fragment.app.FragmentManager +import fr.free.nrw.commons.TestCommonsApplication import org.junit.Assert import org.junit.Before import org.junit.Test +import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.MockitoAnnotations +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.LooperMode +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [21], application = TestCommonsApplication::class) +@LooperMode(LooperMode.Mode.PAUSED) class BookmarksPagerAdapterTests { @Mock private lateinit var bookmarksPagerAdapter: BookmarksPagerAdapter diff --git a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/LoggedOutBookmarksPagerAdapterTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/LoggedOutBookmarksPagerAdapterTests.kt index 7ba7d559e..19d612aba 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/LoggedOutBookmarksPagerAdapterTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/LoggedOutBookmarksPagerAdapterTests.kt @@ -2,15 +2,23 @@ package fr.free.nrw.commons.bookmarks import android.content.Context import androidx.fragment.app.FragmentManager +import fr.free.nrw.commons.TestCommonsApplication import org.junit.Assert import org.junit.Before import org.junit.Test +import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.MockitoAnnotations +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.LooperMode /** * BookmarksPagerAdapter when user is not loggedIn. */ +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [21], application = TestCommonsApplication::class) +@LooperMode(LooperMode.Mode.PAUSED) class LoggedOutBookmarksPagerAdapterTests { @Mock private lateinit var bookmarksPagerAdapter: BookmarksPagerAdapter