Skip to content

Commit 7d1521b

Browse files
author
Victor
committed
Fix bug for deeply nested fragments.
1 parent 17fc5a5 commit 7d1521b

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Add RxGcm dependency and Google Services plugin to project level build.gradle.
1515
apply plugin: 'com.google.gms.google-services'
1616
1717
dependencies {
18-
compile 'com.github.VictorAlbertos:RxGcm:0.2.4'
18+
compile 'com.github.VictorAlbertos:RxGcm:0.2.5'
1919
compile 'io.reactivex:rxjava:1.1.5'
2020
}
2121
```

rx_gcm/src/main/java/rx_gcm/internal/GetGcmReceiversUIForeground.java

+27-9
Original file line numberDiff line numberDiff line change
@@ -63,30 +63,48 @@ Wrapper retrieve(String screenName, Activity activity){
6363
}
6464
}
6565

66-
@Nullable private Fragment getGcmReceiverUIForeground(List<Fragment> fragments, String screenName) {
66+
@Nullable
67+
private Fragment getGcmReceiverUIForeground(List<Fragment> fragments, String screenName) {
6768
if (fragments == null) return null;
6869

6970
for (Fragment fragment : fragments) {
7071
if (fragment != null && isVisible(fragment) && fragment instanceof GcmReceiverUIForeground) {
7172
GcmReceiverUIForeground gcmReceiverUIForeground = (GcmReceiverUIForeground) fragment;
7273
boolean isTargetScreen = gcmReceiverUIForeground.matchesTarget(screenName);
7374

74-
if (isTargetScreen) {
75-
return fragment;
76-
} else {
77-
gcmReceiversUIForegroundNotTargetScreen.add(fragment);
78-
continue;
75+
if (isTargetScreen) return fragment;
76+
77+
gcmReceiversUIForegroundNotTargetScreen.add(fragment);
78+
79+
if (fragment.getChildFragmentManager() != null) {
80+
Fragment candidate = getGcmReceiverUIForegroundFromChild(fragment, screenName);
81+
if (candidate != null) return candidate;
7982
}
80-
} else if (fragment != null && fragment.getChildFragmentManager() != null) {
81-
List<Fragment> childFragments = fragment.getChildFragmentManager().getFragments();
82-
return getGcmReceiverUIForeground(childFragments, screenName);
83+
} else if (fragment != null && isVisible(fragment) && fragment.getChildFragmentManager() != null) {
84+
Fragment candidate = getGcmReceiverUIForegroundFromChild(fragment, screenName);
85+
if (candidate != null) return candidate;
8386
}
8487
}
8588

8689
if (!gcmReceiversUIForegroundNotTargetScreen.isEmpty()) return gcmReceiversUIForegroundNotTargetScreen.get(0);
8790
else return null;
8891
}
8992

93+
private Fragment getGcmReceiverUIForegroundFromChild(Fragment fragment, String screenName) {
94+
List<Fragment> childFragments = fragment.getChildFragmentManager().getFragments();
95+
Fragment candidate = getGcmReceiverUIForeground(childFragments, screenName);
96+
97+
if (candidate == null) return null;
98+
99+
GcmReceiverUIForeground gcmReceiverUIForeground = (GcmReceiverUIForeground) candidate;
100+
boolean isTargetScreen = gcmReceiverUIForeground.matchesTarget(screenName);
101+
if (isTargetScreen) return candidate;
102+
103+
gcmReceiversUIForegroundNotTargetScreen.add(candidate);
104+
105+
return null;
106+
}
107+
90108
static class Wrapper {
91109
private final GcmReceiverUIForeground gcmReceiverUIForeground;
92110
private final boolean targetScreen;

0 commit comments

Comments
 (0)