Skip to content

Commit 48812c7

Browse files
ashishkumar468neslihanturan
authored andcommitted
* Initialise MediaDetailProvider in based on its type as in activity or fragment
1 parent a248e61 commit 48812c7

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed

app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java

+11-3
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,11 @@ private void getScrollPosition() {
146146

147147
@Override
148148
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
149-
detailProvider = (MediaDetailPagerFragment.MediaDetailProvider) (getParentFragment().getParentFragment());
150-
149+
if (getParentFragment() != null
150+
&& getParentFragment() instanceof MediaDetailPagerFragment) {
151+
detailProvider =
152+
((MediaDetailPagerFragment) getParentFragment()).getMediaDetailProvider();
153+
}
151154
if (savedInstanceState != null) {
152155
editable = savedInstanceState.getBoolean("editable");
153156
isCategoryImage = savedInstanceState.getBoolean("isCategoryImage");
@@ -212,7 +215,12 @@ public void onGlobalLayout() {
212215
@Override
213216
public void onResume() {
214217
super.onResume();
215-
((ContributionsFragment)(getParentFragment().getParentFragment())).nearbyNoificationCardView.setVisibility(View.GONE);
218+
if(getParentFragment()!=null && getParentFragment().getParentFragment()!=null) {
219+
//Added a check because, not necessarily, the parent fragment will have a parent fragment, say
220+
// in the case when MediaDetailPagerFragment is directly started by the CategoryImagesActivity
221+
((ContributionsFragment) (getParentFragment().getParentFragment())).nearbyNoificationCardView
222+
.setVisibility(View.GONE);
223+
}
216224
media = detailProvider.getMediaAtPosition(index);
217225
if (media == null) {
218226
// Ask the detail provider to ping us when we're ready

app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java

+24-6
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
6969
private boolean isFeaturedImage;
7070
MediaDetailAdapter adapter;
7171
private Bookmark bookmark;
72+
private MediaDetailProvider provider;
7273

7374
public MediaDetailPagerFragment() {
7475
this(false, false);
@@ -128,6 +129,23 @@ public void onCreate(Bundle savedInstanceState) {
128129
isFeaturedImage = savedInstanceState.getBoolean("isFeaturedImage");
129130
}
130131
setHasOptionsMenu(true);
132+
initProvider();
133+
}
134+
135+
/**
136+
* initialise the provider, based on from where the fragment was started, as in from an activity
137+
* or a fragment
138+
*/
139+
private void initProvider() {
140+
if (getParentFragment() != null) {
141+
provider = (MediaDetailProvider) getParentFragment();
142+
} else {
143+
provider = (MediaDetailProvider) getActivity();
144+
}
145+
}
146+
147+
public MediaDetailProvider getMediaDetailProvider() {
148+
return provider;
131149
}
132150

133151
@Override
@@ -136,7 +154,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
136154
Timber.d("Returning as activity is destroyed!");
137155
return true;
138156
}
139-
MediaDetailProvider provider = (MediaDetailProvider) getParentFragment();
157+
140158
Media m = provider.getMediaAtPosition(pager.getCurrentItem());
141159
switch (item.getItemId()) {
142160
case R.id.menu_bookmark_current_image:
@@ -325,7 +343,7 @@ public void notifyDataSetChanged(){
325343

326344
@Override
327345
public void onPageScrolled(int i, float v, int i2) {
328-
if(getParentFragment().getActivity() == null) {
346+
if (getActivity() == null) {
329347
Timber.d("Returning as activity is destroyed!");
330348
return;
331349
}
@@ -346,7 +364,7 @@ public void onPageScrolled(int i, float v, int i2) {
346364
e.printStackTrace();
347365
}
348366
}
349-
getParentFragment().getActivity().supportInvalidateOptionsMenu();
367+
getActivity().invalidateOptionsMenu();
350368
}
351369

352370
@Override
@@ -380,11 +398,11 @@ public MediaDetailAdapter(FragmentManager fm) {
380398
public Fragment getItem(int i) {
381399
if (i == 0) {
382400
// See bug https://code.google.com/p/android/issues/detail?id=27526
383-
if(getParentFragment().getActivity() == null) {
401+
if (getActivity() == null) {
384402
Timber.d("Skipping getItem. Returning as activity is destroyed!");
385403
return null;
386404
}
387-
pager.postDelayed(() -> getParentFragment().getActivity().supportInvalidateOptionsMenu(), 5);
405+
pager.postDelayed(() -> getActivity().invalidateOptionsMenu(), 5);
388406
}
389407
return MediaDetailFragment.forMedia(i, editable, isFeaturedImage);
390408
}
@@ -395,7 +413,7 @@ public int getCount() {
395413
Timber.d("Skipping getCount. Returning as activity is destroyed!");
396414
return 0;
397415
}
398-
return ((MediaDetailProvider) getParentFragment()).getTotalMediaCount();
416+
return provider.getTotalMediaCount();
399417
}
400418
}
401419
}

0 commit comments

Comments
 (0)