From 01461d2508a1957dca23df5578ee9b65c9060741 Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Sun, 9 Sep 2018 17:34:57 +0300 Subject: [PATCH] GetPagerFragment instead of getActivity since currently ContributionsFragment take over responsibility from ContributionsActivity --- .../commons/media/MediaDetailFragment.java | 2 +- .../media/MediaDetailPagerFragment.java | 98 ++++++++++++++----- 2 files changed, 72 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java index b46789ba0..1bedeb475 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java @@ -146,7 +146,7 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - detailProvider = (MediaDetailPagerFragment.MediaDetailProvider) getActivity(); + detailProvider = (MediaDetailPagerFragment.MediaDetailProvider) (getParentFragment().getParentFragment()); if (savedInstanceState != null) { editable = savedInstanceState.getBoolean("editable"); diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java index 5a7e0658f..db6118c27 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java @@ -9,6 +9,7 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; +import android.os.Handler; import android.support.design.widget.Snackbar; import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; @@ -18,7 +19,6 @@ import android.support.v4.content.ContextCompat; import android.support.v4.view.MenuItemCompat; import android.support.v4.view.ViewPager; import android.support.v7.widget.ShareActionProvider; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -35,9 +35,12 @@ import javax.inject.Named; import fr.free.nrw.commons.Media; import fr.free.nrw.commons.R; import fr.free.nrw.commons.auth.SessionManager; +import fr.free.nrw.commons.category.CategoryDetailsActivity; +import fr.free.nrw.commons.category.CategoryImagesActivity; import fr.free.nrw.commons.contributions.Contribution; import fr.free.nrw.commons.contributions.ContributionsActivity; import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; +import fr.free.nrw.commons.explore.SearchActivity; import fr.free.nrw.commons.mwapi.MediaWikiApi; import fr.free.nrw.commons.utils.ImageUtils; import timber.log.Timber; @@ -62,6 +65,7 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple ViewPager pager; private Boolean editable; private boolean isFeaturedImage; + MediaDetailAdapter adapter; public MediaDetailPagerFragment() { this(false, false); @@ -77,13 +81,11 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - Log.d("deneme","onCreateView MediaDetailFragment"); View view = inflater.inflate(R.layout.fragment_media_detail_pager, container, false); ButterKnife.bind(this,view); pager.addOnPageChangeListener(this); - final MediaDetailAdapter adapter = new MediaDetailAdapter(getChildFragmentManager()); - Log.d("deneme","getActivity returns:"+getActivity()); + adapter = new MediaDetailAdapter(getChildFragmentManager()); if (savedInstanceState != null) { final int pageNumber = savedInstanceState.getInt("current-page"); @@ -92,7 +94,12 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple view.postDelayed(() -> { pager.setAdapter(adapter); pager.setCurrentItem(pageNumber, false); - Log.d("deneme","getActivity returns:"+getActivity()); + + if(getActivity() == null) { + Timber.d("Returning as activity is destroyed!"); + return; + } + getActivity().supportInvalidateOptionsMenu(); adapter.notifyDataSetChanged(); }, 100); @@ -122,11 +129,18 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple @Override public boolean onOptionsItemSelected(MenuItem item) { + if(getActivity() == null) { + Timber.d("Returning as activity is destroyed!"); + return true; + } MediaDetailProvider provider = (MediaDetailProvider) getParentFragment(); Media m = provider.getMediaAtPosition(pager.getCurrentItem()); switch (item.getItemId()) { case R.id.menu_share_current_image: - // Share - intent set in onCreateOptionsMenu, around line 252 + Intent shareIntent = new Intent(Intent.ACTION_SEND); + shareIntent.setType("text/plain"); + shareIntent.putExtra(Intent.EXTRA_TEXT, m.getDisplayTitle() + " \n" + m.getFilePageTitle().getCanonicalUri()); + startActivity(Intent.createChooser(shareIntent, "Share image via...")); return true; case R.id.menu_browser_current_image: // View in browser @@ -152,12 +166,12 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple return true; case R.id.menu_retry_current_image: // Retry - ((ContributionsActivity) getActivity()).retryUpload(pager.getCurrentItem()); + //((ContributionsActivity) getActivity()).retryUpload(pager.getCurrentItem()); getActivity().getSupportFragmentManager().popBackStack(); return true; case R.id.menu_cancel_current_image: // todo: delete image - ((ContributionsActivity) getActivity()).deleteUpload(pager.getCurrentItem()); + //((ContributionsActivity) getActivity()).deleteUpload(pager.getCurrentItem()); getActivity().getSupportFragmentManager().popBackStack(); return true; default: @@ -185,10 +199,13 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple * @param m Media file to download */ private void downloadMedia(Media m) { - String imageUrl = m.getImageUrl(), - fileName = m.getFilename(); + String imageUrl = m.getImageUrl(), fileName = m.getFilename(); - if (imageUrl == null || fileName == null) { + if (imageUrl == null + || fileName == null + || getContext() == null + || getActivity() == null) { + Timber.d("Skipping download media as either imageUrl %s or filename %s activity is null", imageUrl, fileName); return; } @@ -229,8 +246,11 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple menu.clear(); // see http://stackoverflow.com/a/8495697/17865 inflater.inflate(R.menu.fragment_image_detail, menu); if (pager != null) { - //MediaDetailProvider provider = (MediaDetailProvider) getActivity(); MediaDetailProvider provider = (MediaDetailProvider) getParentFragment(); + if(provider == null) { + return; + } + Media m = provider.getMediaAtPosition(pager.getCurrentItem()); if (m != null) { // Enable default set of actions, then re-enable different set of actions only if it is a failed contrib @@ -240,19 +260,7 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple menu.findItem(R.id.menu_share_current_image).setEnabled(true).setVisible(true); menu.findItem(R.id.menu_download_current_image).setEnabled(true).setVisible(true); - // Set ShareActionProvider Intent - ShareActionProvider mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menu.findItem(R.id.menu_share_current_image)); - // On some phones null is returned for some reason: - // https://github.com/commons-app/apps-android-commons/issues/413 - if (mShareActionProvider != null) { - Intent shareIntent = new Intent(Intent.ACTION_SEND); - shareIntent.setType("text/plain"); - shareIntent.putExtra(Intent.EXTRA_TEXT, - m.getDisplayTitle() + " \n" + m.getFilePageTitle().getCanonicalUri()); - mShareActionProvider.setShareIntent(shareIntent); - } - - if (m instanceof Contribution) { + if (m instanceof Contribution ) { Contribution c = (Contribution) m; switch (c.getState()) { case Contribution.STATE_FAILED: @@ -281,12 +289,40 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple } public void showImage(int i) { - Log.d("deneme","pager is:"+pager); - pager.setCurrentItem(i); + Handler handler = new Handler(); + handler.postDelayed(() -> pager.setCurrentItem(i), 5); + } + + /** + * The method notify the viewpager that number of items have changed. + */ + public void notifyDataSetChanged(){ + adapter.notifyDataSetChanged(); } @Override public void onPageScrolled(int i, float v, int i2) { + if(getParentFragment().getActivity() == null) { + Timber.d("Returning as activity is destroyed!"); + return; + } + if (i+1 >= adapter.getCount()){ + try{ + ((CategoryImagesActivity) getContext()).requestMoreImages(); + }catch (Exception e){ + e.printStackTrace(); + } + try{ + ((CategoryDetailsActivity) getContext()).requestMoreImages(); + }catch (Exception e){ + e.printStackTrace(); + } + try{ + ((SearchActivity) getContext()).requestMoreImages(); + }catch (Exception e){ + e.printStackTrace(); + } + } getParentFragment().getActivity().supportInvalidateOptionsMenu(); } @@ -321,6 +357,10 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple public Fragment getItem(int i) { if (i == 0) { // See bug https://code.google.com/p/android/issues/detail?id=27526 + if(getParentFragment().getActivity() == null) { + Timber.d("Skipping getItem. Returning as activity is destroyed!"); + return null; + } pager.postDelayed(() -> getParentFragment().getActivity().supportInvalidateOptionsMenu(), 5); } return MediaDetailFragment.forMedia(i, editable, isFeaturedImage); @@ -328,6 +368,10 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple @Override public int getCount() { + if(getActivity() == null) { + Timber.d("Skipping getCount. Returning as activity is destroyed!"); + return 0; + } return ((MediaDetailProvider) getParentFragment()).getTotalMediaCount(); } }