Return parent fragment instead of parent activity

This commit is contained in:
neslihanturan 2018-09-07 21:24:04 +03:00
parent 9707b4310b
commit 94201aa930

View file

@ -9,7 +9,6 @@ import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.os.Handler;
import android.support.design.widget.Snackbar; import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
@ -19,6 +18,7 @@ import android.support.v4.content.ContextCompat;
import android.support.v4.view.MenuItemCompat; import android.support.v4.view.MenuItemCompat;
import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager;
import android.support.v7.widget.ShareActionProvider; import android.support.v7.widget.ShareActionProvider;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
@ -35,12 +35,9 @@ import javax.inject.Named;
import fr.free.nrw.commons.Media; import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.auth.SessionManager; 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.Contribution;
import fr.free.nrw.commons.contributions.ContributionsActivity; import fr.free.nrw.commons.contributions.ContributionsActivity;
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; 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.mwapi.MediaWikiApi;
import fr.free.nrw.commons.utils.ImageUtils; import fr.free.nrw.commons.utils.ImageUtils;
import timber.log.Timber; import timber.log.Timber;
@ -65,7 +62,6 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
ViewPager pager; ViewPager pager;
private Boolean editable; private Boolean editable;
private boolean isFeaturedImage; private boolean isFeaturedImage;
MediaDetailAdapter adapter;
public MediaDetailPagerFragment() { public MediaDetailPagerFragment() {
this(false, false); this(false, false);
@ -81,11 +77,13 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
public View onCreateView(LayoutInflater inflater, public View onCreateView(LayoutInflater inflater,
ViewGroup container, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
Log.d("deneme","onCreateView MediaDetailFragment");
View view = inflater.inflate(R.layout.fragment_media_detail_pager, container, false); View view = inflater.inflate(R.layout.fragment_media_detail_pager, container, false);
ButterKnife.bind(this,view); ButterKnife.bind(this,view);
pager.addOnPageChangeListener(this); pager.addOnPageChangeListener(this);
adapter = new MediaDetailAdapter(getChildFragmentManager()); final MediaDetailAdapter adapter = new MediaDetailAdapter(getChildFragmentManager());
Log.d("deneme","getActivity returns:"+getActivity());
if (savedInstanceState != null) { if (savedInstanceState != null) {
final int pageNumber = savedInstanceState.getInt("current-page"); final int pageNumber = savedInstanceState.getInt("current-page");
@ -94,12 +92,7 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
view.postDelayed(() -> { view.postDelayed(() -> {
pager.setAdapter(adapter); pager.setAdapter(adapter);
pager.setCurrentItem(pageNumber, false); pager.setCurrentItem(pageNumber, false);
Log.d("deneme","getActivity returns:"+getActivity());
if(getActivity() == null) {
Timber.d("Returning as activity is destroyed!");
return;
}
getActivity().supportInvalidateOptionsMenu(); getActivity().supportInvalidateOptionsMenu();
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
}, 100); }, 100);
@ -129,18 +122,11 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
if(getActivity() == null) { MediaDetailProvider provider = (MediaDetailProvider) getParentFragment();
Timber.d("Returning as activity is destroyed!");
return true;
}
MediaDetailProvider provider = (MediaDetailProvider) getActivity();
Media m = provider.getMediaAtPosition(pager.getCurrentItem()); Media m = provider.getMediaAtPosition(pager.getCurrentItem());
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.menu_share_current_image: case R.id.menu_share_current_image:
Intent shareIntent = new Intent(Intent.ACTION_SEND); // Share - intent set in onCreateOptionsMenu, around line 252
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, m.getDisplayTitle() + " \n" + m.getFilePageTitle().getCanonicalUri());
startActivity(Intent.createChooser(shareIntent, "Share image via..."));
return true; return true;
case R.id.menu_browser_current_image: case R.id.menu_browser_current_image:
// View in browser // View in browser
@ -166,12 +152,12 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
return true; return true;
case R.id.menu_retry_current_image: case R.id.menu_retry_current_image:
// Retry // Retry
// TODO: Neslihan open later ((ContributionsActivity) getActivity()).retryUpload(pager.getCurrentItem()); ((ContributionsActivity) getActivity()).retryUpload(pager.getCurrentItem());
getActivity().getSupportFragmentManager().popBackStack(); getActivity().getSupportFragmentManager().popBackStack();
return true; return true;
case R.id.menu_cancel_current_image: case R.id.menu_cancel_current_image:
// todo: delete image // todo: delete image
// TODO: Neslihan open later ((ContributionsActivity) getActivity()).deleteUpload(pager.getCurrentItem()); ((ContributionsActivity) getActivity()).deleteUpload(pager.getCurrentItem());
getActivity().getSupportFragmentManager().popBackStack(); getActivity().getSupportFragmentManager().popBackStack();
return true; return true;
default: default:
@ -199,13 +185,10 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
* @param m Media file to download * @param m Media file to download
*/ */
private void downloadMedia(Media m) { private void downloadMedia(Media m) {
String imageUrl = m.getImageUrl(), fileName = m.getFilename(); String imageUrl = m.getImageUrl(),
fileName = m.getFilename();
if (imageUrl == null if (imageUrl == null || fileName == 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; return;
} }
@ -246,11 +229,8 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
menu.clear(); // see http://stackoverflow.com/a/8495697/17865 menu.clear(); // see http://stackoverflow.com/a/8495697/17865
inflater.inflate(R.menu.fragment_image_detail, menu); inflater.inflate(R.menu.fragment_image_detail, menu);
if (pager != null) { if (pager != null) {
MediaDetailProvider provider = (MediaDetailProvider) getActivity(); //MediaDetailProvider provider = (MediaDetailProvider) getActivity();
if(provider == null) { MediaDetailProvider provider = (MediaDetailProvider) getParentFragment();
return;
}
Media m = provider.getMediaAtPosition(pager.getCurrentItem()); Media m = provider.getMediaAtPosition(pager.getCurrentItem());
if (m != null) { if (m != null) {
// Enable default set of actions, then re-enable different set of actions only if it is a failed contrib // Enable default set of actions, then re-enable different set of actions only if it is a failed contrib
@ -260,7 +240,19 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
menu.findItem(R.id.menu_share_current_image).setEnabled(true).setVisible(true); menu.findItem(R.id.menu_share_current_image).setEnabled(true).setVisible(true);
menu.findItem(R.id.menu_download_current_image).setEnabled(true).setVisible(true); menu.findItem(R.id.menu_download_current_image).setEnabled(true).setVisible(true);
if (m instanceof Contribution ) { // 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) {
Contribution c = (Contribution) m; Contribution c = (Contribution) m;
switch (c.getState()) { switch (c.getState()) {
case Contribution.STATE_FAILED: case Contribution.STATE_FAILED:
@ -289,41 +281,13 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
} }
public void showImage(int i) { public void showImage(int i) {
Handler handler = new Handler(); Log.d("deneme","pager is:"+pager);
handler.postDelayed(() -> pager.setCurrentItem(i), 5); pager.setCurrentItem(i);
}
/**
* The method notify the viewpager that number of items have changed.
*/
public void notifyDataSetChanged(){
adapter.notifyDataSetChanged();
} }
@Override @Override
public void onPageScrolled(int i, float v, int i2) { public void onPageScrolled(int i, float v, int i2) {
if(getActivity() == null) { getParentFragment().getActivity().supportInvalidateOptionsMenu();
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();
}
}
getActivity().supportInvalidateOptionsMenu();
} }
@Override @Override
@ -357,22 +321,14 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
public Fragment getItem(int i) { public Fragment getItem(int i) {
if (i == 0) { if (i == 0) {
// See bug https://code.google.com/p/android/issues/detail?id=27526 // See bug https://code.google.com/p/android/issues/detail?id=27526
if(getActivity() == null) { pager.postDelayed(() -> getParentFragment().getActivity().supportInvalidateOptionsMenu(), 5);
Timber.d("Skipping getItem. Returning as activity is destroyed!");
return null;
}
pager.postDelayed(() -> getActivity().supportInvalidateOptionsMenu(), 5);
} }
return MediaDetailFragment.forMedia(i, editable, isFeaturedImage); return MediaDetailFragment.forMedia(i, editable, isFeaturedImage);
} }
@Override @Override
public int getCount() { public int getCount() {
if(getActivity() == null) { return ((MediaDetailProvider) getParentFragment()).getTotalMediaCount();
Timber.d("Skipping getCount. Returning as activity is destroyed!");
return 0;
}
return ((MediaDetailProvider) getActivity()).getTotalMediaCount();
} }
} }
} }