mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +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