mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 04:43:54 +01:00
Convert the MediaDetailAdapter to kotlin
This commit is contained in:
parent
d59d8bcbd9
commit
1d1210e863
2 changed files with 76 additions and 95 deletions
|
|
@ -1,95 +0,0 @@
|
||||||
package fr.free.nrw.commons.media;
|
|
||||||
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.fragment.app.FragmentManager;
|
|
||||||
import androidx.fragment.app.FragmentStatePagerAdapter;
|
|
||||||
import timber.log.Timber;
|
|
||||||
|
|
||||||
//FragmentStatePagerAdapter allows user to swipe across collection of images (no. of images undetermined)
|
|
||||||
class MediaDetailAdapter extends FragmentStatePagerAdapter {
|
|
||||||
|
|
||||||
final MediaDetailPagerFragment mediaDetailPagerFragment;
|
|
||||||
/**
|
|
||||||
* Keeps track of the current displayed fragment.
|
|
||||||
*/
|
|
||||||
private Fragment mCurrentFragment;
|
|
||||||
|
|
||||||
public MediaDetailAdapter(MediaDetailPagerFragment mediaDetailPagerFragment,
|
|
||||||
FragmentManager fm) {
|
|
||||||
super(fm);
|
|
||||||
this.mediaDetailPagerFragment = mediaDetailPagerFragment;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Fragment getItem(int i) {
|
|
||||||
if (i == 0) {
|
|
||||||
// See bug https://code.google.com/p/android/issues/detail?id=27526
|
|
||||||
if (mediaDetailPagerFragment.getActivity() == null) {
|
|
||||||
Timber.d("Skipping getItem. Returning as activity is destroyed!");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
mediaDetailPagerFragment.binding.mediaDetailsPager.postDelayed(
|
|
||||||
() -> mediaDetailPagerFragment.getActivity().invalidateOptionsMenu(), 5);
|
|
||||||
}
|
|
||||||
if (mediaDetailPagerFragment.isFromFeaturedRootFragment) {
|
|
||||||
return MediaDetailFragment.forMedia(mediaDetailPagerFragment.position + i,
|
|
||||||
mediaDetailPagerFragment.editable, mediaDetailPagerFragment.isFeaturedImage,
|
|
||||||
mediaDetailPagerFragment.isWikipediaButtonDisplayed);
|
|
||||||
} else {
|
|
||||||
return MediaDetailFragment.forMedia(i, mediaDetailPagerFragment.editable,
|
|
||||||
mediaDetailPagerFragment.isFeaturedImage,
|
|
||||||
mediaDetailPagerFragment.isWikipediaButtonDisplayed);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getCount() {
|
|
||||||
if (mediaDetailPagerFragment.getActivity() == null) {
|
|
||||||
Timber.d("Skipping getCount. Returning as activity is destroyed!");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return mediaDetailPagerFragment.provider.getTotalMediaCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the currently displayed fragment.
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Fragment getCurrentFragment() {
|
|
||||||
return mCurrentFragment;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If current fragment is of type MediaDetailFragment, return it, otherwise return null.
|
|
||||||
*
|
|
||||||
* @return MediaDetailFragment
|
|
||||||
*/
|
|
||||||
public MediaDetailFragment getCurrentMediaDetailFragment() {
|
|
||||||
if (mCurrentFragment instanceof MediaDetailFragment) {
|
|
||||||
return (MediaDetailFragment) mCurrentFragment;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called to inform the adapter of which item is currently considered to be the "primary", that
|
|
||||||
* is the one show to the user as the current page.
|
|
||||||
*
|
|
||||||
* @param container
|
|
||||||
* @param position
|
|
||||||
* @param object
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void setPrimaryItem(@NonNull final ViewGroup container, final int position,
|
|
||||||
@NonNull final Object object) {
|
|
||||||
// Update the current fragment if changed
|
|
||||||
if (getCurrentFragment() != object) {
|
|
||||||
mCurrentFragment = ((Fragment) object);
|
|
||||||
}
|
|
||||||
super.setPrimaryItem(container, position, object);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
package fr.free.nrw.commons.media
|
||||||
|
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.fragment.app.FragmentManager
|
||||||
|
import androidx.fragment.app.FragmentStatePagerAdapter
|
||||||
|
import fr.free.nrw.commons.media.MediaDetailFragment.Companion.forMedia
|
||||||
|
import timber.log.Timber
|
||||||
|
|
||||||
|
// FragmentStatePagerAdapter allows user to swipe across collection of images (no. of images undetermined)
|
||||||
|
internal class MediaDetailAdapter(
|
||||||
|
val mediaDetailPagerFragment: MediaDetailPagerFragment,
|
||||||
|
fm: FragmentManager
|
||||||
|
) : FragmentStatePagerAdapter(fm) {
|
||||||
|
/**
|
||||||
|
* Keeps track of the current displayed fragment.
|
||||||
|
*/
|
||||||
|
private var currentFragment: Fragment? = null
|
||||||
|
|
||||||
|
override fun getItem(i: Int): Fragment {
|
||||||
|
if (i == 0) {
|
||||||
|
// See bug https://code.google.com/p/android/issues/detail?id=27526
|
||||||
|
if (mediaDetailPagerFragment.activity == null) {
|
||||||
|
Timber.d("Skipping getItem. Returning as activity is destroyed!")
|
||||||
|
return Fragment()
|
||||||
|
}
|
||||||
|
mediaDetailPagerFragment.binding.mediaDetailsPager.postDelayed(
|
||||||
|
{ mediaDetailPagerFragment.requireActivity().invalidateOptionsMenu() }, 5
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return if (mediaDetailPagerFragment.isFromFeaturedRootFragment) {
|
||||||
|
forMedia(
|
||||||
|
mediaDetailPagerFragment.position + i,
|
||||||
|
mediaDetailPagerFragment.editable, mediaDetailPagerFragment.isFeaturedImage,
|
||||||
|
mediaDetailPagerFragment.isWikipediaButtonDisplayed
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
forMedia(
|
||||||
|
i, mediaDetailPagerFragment.editable,
|
||||||
|
mediaDetailPagerFragment.isFeaturedImage,
|
||||||
|
mediaDetailPagerFragment.isWikipediaButtonDisplayed
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getCount(): Int {
|
||||||
|
if (mediaDetailPagerFragment.activity == null) {
|
||||||
|
Timber.d("Skipping getCount. Returning as activity is destroyed!")
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return mediaDetailPagerFragment.provider.getTotalMediaCount()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If current fragment is of type MediaDetailFragment, return it, otherwise return null.
|
||||||
|
*
|
||||||
|
* @return MediaDetailFragment
|
||||||
|
*/
|
||||||
|
val currentMediaDetailFragment: MediaDetailFragment?
|
||||||
|
get() = currentFragment as? MediaDetailFragment
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called to inform the adapter of which item is currently considered to be the "primary", that
|
||||||
|
* is the one show to the user as the current page.
|
||||||
|
*/
|
||||||
|
override fun setPrimaryItem(
|
||||||
|
container: ViewGroup, position: Int,
|
||||||
|
obj: Any
|
||||||
|
) {
|
||||||
|
// Update the current fragment if changed
|
||||||
|
if (currentFragment !== obj) {
|
||||||
|
currentFragment = (obj as Fragment)
|
||||||
|
}
|
||||||
|
super.setPrimaryItem(container, position, obj)
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue