Skip to content

Commit a3b6de7

Browse files
author
Thomas Horta
authored
Merge pull request #20216 from wordpress-mobile/issue/20010-reader-ia-subscription-infinite-loading
[Reader][0 blogs/0 tags] Fix Subscription feed infinite loading and fetch when tapping filters
2 parents ab225e5 + c702921 commit a3b6de7

File tree

15 files changed

+76
-54
lines changed

15 files changed

+76
-54
lines changed

WordPress/src/main/java/org/wordpress/android/datasets/ReaderTagTable.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,10 @@ public static ReaderTagList getBookmarkTags() {
232232
return getTagsOfType(ReaderTagType.BOOKMARKED);
233233
}
234234

235+
public static ReaderTagList getDiscoverPostCardsTags() {
236+
return getTagsOfType(ReaderTagType.DISCOVER_POST_CARDS);
237+
}
238+
235239
private static ReaderTagList getTagsOfType(ReaderTagType tagType) {
236240
String[] args = {Integer.toString(tagType.toInt())};
237241
Cursor c = ReaderDatabase.getReadableDb()

WordPress/src/main/java/org/wordpress/android/models/ReaderTagList.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public boolean isSameList(ReaderTagList otherList) {
4444
return false;
4545
} else if (!otherTag.getTagTitle().equals(this.get(i).getTagTitle())) {
4646
return false;
47+
} else if (!otherTag.getTagDisplayName().equals(this.get(i).getTagDisplayName())) {
48+
return false;
4749
}
4850
}
4951

WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderEvents.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,27 @@ private ReaderEvents() {
2626
throw new AssertionError();
2727
}
2828

29-
public static class FollowedTagsChanged {
29+
public static class FollowedTagsFetched {
3030
private final boolean mDidSucceed;
31+
private final boolean mDidChange;
3132

32-
public FollowedTagsChanged(boolean didSucceed) {
33+
public FollowedTagsFetched(boolean didSucceed) {
3334
mDidSucceed = didSucceed;
35+
mDidChange = true;
36+
}
37+
38+
public FollowedTagsFetched(boolean didSucceed, boolean didChange) {
39+
mDidSucceed = didSucceed;
40+
mDidChange = didChange;
3441
}
3542

3643
public boolean didSucceed() {
3744
return mDidSucceed;
3845
}
46+
47+
public boolean didChange() {
48+
return mDidChange;
49+
}
3950
}
4051

4152
public static class TagAdded {

WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment;
8585
import org.wordpress.android.ui.pages.SnackbarMessageHolder;
8686
import org.wordpress.android.ui.prefs.AppPrefs;
87+
import org.wordpress.android.ui.reader.ReaderEvents.FollowedTagsFetched;
8788
import org.wordpress.android.ui.reader.ReaderEvents.TagAdded;
8889
import org.wordpress.android.ui.reader.ReaderTypes.ReaderPostListType;
8990
import org.wordpress.android.ui.reader.actions.ReaderActions;
@@ -934,14 +935,16 @@ private void resetPostAdapter(ReaderPostListType postListType) {
934935

935936
@SuppressWarnings("unused")
936937
@Subscribe(threadMode = ThreadMode.MAIN)
937-
public void onEventMainThread(ReaderEvents.FollowedTagsChanged event) {
938+
public void onEventMainThread(FollowedTagsFetched event) {
938939
if (getPostListType() == ReaderPostListType.TAG_FOLLOWED) {
939-
// reload the tag filter since tags have changed
940-
reloadTags();
940+
if (event.didChange()) {
941+
// reload the tag filter since tags have changed or we just opened the fragment
942+
reloadTags();
943+
}
941944

942945
// update the current tag if the list fragment is empty - this will happen if
943946
// the tag table was previously empty (ie: first run)
944-
if (isPostAdapterEmpty()) {
947+
if (isPostAdapterEmpty() && (ReaderBlogTable.hasFollowedBlogs() || !mHasUpdatedPosts)) {
945948
updateCurrentTag();
946949
}
947950
}
@@ -1724,9 +1727,6 @@ private void setEmptyTitleDescriptionAndButton(boolean requestFailed) {
17241727
// Ensure the default image is reset for empty views before applying logic
17251728
mActionableEmptyView.image.setImageResource(R.drawable.illustration_reader_empty);
17261729

1727-
// TODO thomashortadev
1728-
// try to quickly hack some way of making the button black
1729-
17301730
if (shouldShowEmptyViewForSelfHostedCta()) {
17311731
setEmptyTitleAndDescriptionForSelfHostedCta();
17321732
return;
@@ -1940,7 +1940,9 @@ private void showBookmarksSavedLocallyDialog(ShowBookmarkedSavedOnlyLocallyDialo
19401940
.setCancelable(false)
19411941
.create();
19421942
mBookmarksSavedLocallyDialog.show();
1943-
} /*
1943+
}
1944+
1945+
/*
19441946
* called by post adapter when data has been loaded
19451947
*/
19461948
private final ReaderInterfaces.DataLoadedListener mDataLoadedListener = new ReaderInterfaces.DataLoadedListener() {
@@ -2333,7 +2335,7 @@ public void run() {
23332335
mActionableEmptyView.button.setVisibility(View.GONE);
23342336
mActionableEmptyView.subtitle.setVisibility(View.GONE);
23352337
showEmptyView();
2336-
} else {
2338+
} else if (!isPostAdapterEmpty()) {
23372339
hideEmptyView();
23382340
}
23392341
});

WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderSubsActivity.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.wordpress.android.ui.LocaleAwareActivity;
4242
import org.wordpress.android.ui.RequestCodes;
4343
import org.wordpress.android.ui.prefs.AppPrefs;
44+
import org.wordpress.android.ui.reader.ReaderEvents.FollowedTagsFetched;
4445
import org.wordpress.android.ui.reader.actions.ReaderActions;
4546
import org.wordpress.android.ui.reader.actions.ReaderBlogActions;
4647
import org.wordpress.android.ui.reader.actions.ReaderTagActions;
@@ -203,7 +204,7 @@ protected void onResume() {
203204

204205
@SuppressWarnings("unused")
205206
@Subscribe(threadMode = ThreadMode.MAIN)
206-
public void onEventMainThread(ReaderEvents.FollowedTagsChanged event) {
207+
public void onEventMainThread(FollowedTagsFetched event) {
207208
AppLog.d(AppLog.T.READER, "reader subs > followed tags changed");
208209
getPageAdapter().refreshFollowedTagFragment();
209210
}

WordPress/src/main/java/org/wordpress/android/ui/reader/actions/ReaderTagActions.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import org.wordpress.android.models.ReaderTagList;
1414
import org.wordpress.android.models.ReaderTagType;
1515
import org.wordpress.android.ui.reader.ReaderConstants;
16-
import org.wordpress.android.ui.reader.ReaderEvents;
16+
import org.wordpress.android.ui.reader.ReaderEvents.FollowedTagsFetched;
1717
import org.wordpress.android.ui.reader.actions.ReaderActions.ActionListener;
1818
import org.wordpress.android.ui.reader.utils.ReaderUtils;
1919
import org.wordpress.android.util.AppLog;
@@ -51,7 +51,7 @@ public static boolean deleteTag(final ReaderTag tag,
5151
private static boolean deleteTagsLocallyOnly(ActionListener actionListener, ReaderTag tag) {
5252
ReaderTagTable.deleteTag(tag);
5353
ReaderActions.callActionListener(actionListener, true);
54-
EventBus.getDefault().post(new ReaderEvents.FollowedTagsChanged(true));
54+
EventBus.getDefault().post(new FollowedTagsFetched(true));
5555

5656
return true;
5757
}
@@ -130,7 +130,7 @@ public static boolean addTags(@NonNull final List<ReaderTag> tags,
130130
private static boolean saveTagsLocallyOnly(ActionListener actionListener, ReaderTagList newTags) {
131131
ReaderTagTable.addOrUpdateTags(newTags);
132132
ReaderActions.callActionListener(actionListener, true);
133-
EventBus.getDefault().post(new ReaderEvents.FollowedTagsChanged(true));
133+
EventBus.getDefault().post(new FollowedTagsFetched(true));
134134

135135
return true;
136136
}
@@ -147,7 +147,7 @@ private static boolean saveTagsLocallyAndRemotely(ActionListener actionListener,
147147
if (actionListener != null) {
148148
ReaderActions.callActionListener(actionListener, true);
149149
}
150-
EventBus.getDefault().post(new ReaderEvents.FollowedTagsChanged(true));
150+
EventBus.getDefault().post(new FollowedTagsFetched(true));
151151
};
152152

153153
RestRequest.ErrorListener errorListener = volleyError -> {
@@ -159,7 +159,7 @@ private static boolean saveTagsLocallyAndRemotely(ActionListener actionListener,
159159
if (actionListener != null) {
160160
ReaderActions.callActionListener(actionListener, true);
161161
}
162-
EventBus.getDefault().post(new ReaderEvents.FollowedTagsChanged(true));
162+
EventBus.getDefault().post(new FollowedTagsFetched(true));
163163
return;
164164
}
165165

@@ -171,7 +171,7 @@ private static boolean saveTagsLocallyAndRemotely(ActionListener actionListener,
171171
if (actionListener != null) {
172172
ReaderActions.callActionListener(actionListener, false);
173173
}
174-
EventBus.getDefault().post(new ReaderEvents.FollowedTagsChanged(false));
174+
EventBus.getDefault().post(new FollowedTagsFetched(false));
175175
};
176176

177177
ReaderTagTable.addOrUpdateTags(newTags);

WordPress/src/main/java/org/wordpress/android/ui/reader/repository/ReaderDiscoverDataProvider.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import org.wordpress.android.models.discover.ReaderDiscoverCards
1414
import org.wordpress.android.modules.IO_THREAD
1515
import org.wordpress.android.modules.UI_THREAD
1616
import org.wordpress.android.ui.reader.ReaderEvents.FetchDiscoverCardsEnded
17-
import org.wordpress.android.ui.reader.ReaderEvents.FollowedTagsChanged
17+
import org.wordpress.android.ui.reader.ReaderEvents.FollowedTagsFetched
1818
import org.wordpress.android.ui.reader.actions.ReaderActions.UpdateResult.CHANGED
1919
import org.wordpress.android.ui.reader.actions.ReaderActions.UpdateResult.FAILED
2020
import org.wordpress.android.ui.reader.actions.ReaderActions.UpdateResult.HAS_NEW
@@ -211,7 +211,7 @@ class ReaderDiscoverDataProvider @Inject constructor(
211211

212212
@Suppress("unused", "UNUSED_PARAMETER")
213213
@Subscribe(threadMode = BACKGROUND)
214-
fun onFollowedTagsChanged(event: FollowedTagsChanged) {
214+
fun onFollowedTagsFetched(event: FollowedTagsFetched) {
215215
launch {
216216
refreshCards()
217217
}

WordPress/src/main/java/org/wordpress/android/ui/reader/repository/usecases/tags/FetchFollowedTagsUseCase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package org.wordpress.android.ui.reader.repository.usecases.tags
22

33
import org.greenrobot.eventbus.Subscribe
44
import org.greenrobot.eventbus.ThreadMode
5-
import org.wordpress.android.ui.reader.ReaderEvents.FollowedTagsChanged
5+
import org.wordpress.android.ui.reader.ReaderEvents.FollowedTagsFetched
66
import org.wordpress.android.ui.reader.repository.ReaderRepositoryCommunication
77
import org.wordpress.android.ui.reader.repository.ReaderRepositoryCommunication.Error.NetworkUnavailable
88
import org.wordpress.android.ui.reader.repository.ReaderRepositoryCommunication.Error.RemoteRequestFailure
@@ -48,7 +48,7 @@ class FetchFollowedTagsUseCase @Inject constructor(
4848

4949
@Suppress("unused")
5050
@Subscribe(threadMode = ThreadMode.BACKGROUND)
51-
fun onFollowedTagsChanged(event: FollowedTagsChanged) {
51+
fun onFollowedTagsFetched(event: FollowedTagsFetched) {
5252
val result = if (event.didSucceed()) {
5353
Success
5454
} else {

WordPress/src/main/java/org/wordpress/android/ui/reader/repository/usecases/tags/FollowInterestTagsUseCase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import org.greenrobot.eventbus.Subscribe
44
import org.greenrobot.eventbus.ThreadMode
55
import org.wordpress.android.fluxc.store.AccountStore
66
import org.wordpress.android.models.ReaderTag
7-
import org.wordpress.android.ui.reader.ReaderEvents.FollowedTagsChanged
7+
import org.wordpress.android.ui.reader.ReaderEvents.FollowedTagsFetched
88
import org.wordpress.android.ui.reader.actions.ReaderTagActions
99
import org.wordpress.android.ui.reader.repository.ReaderRepositoryCommunication
1010
import org.wordpress.android.ui.reader.repository.ReaderRepositoryCommunication.Error.NetworkUnavailable
@@ -43,7 +43,7 @@ class FollowInterestTagsUseCase @Inject constructor(
4343

4444
@Suppress("unused")
4545
@Subscribe(threadMode = ThreadMode.BACKGROUND)
46-
fun onFollowedTagsChanged(event: FollowedTagsChanged) {
46+
fun onFollowedTagsFetched(event: FollowedTagsFetched) {
4747
val result = if (event.didSucceed()) {
4848
Success
4949
} else {

WordPress/src/main/java/org/wordpress/android/ui/reader/services/update/ReaderUpdateLogic.java

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.wordpress.android.ui.prefs.AppPrefs;
2525
import org.wordpress.android.ui.reader.ReaderConstants;
2626
import org.wordpress.android.ui.reader.ReaderEvents;
27+
import org.wordpress.android.ui.reader.ReaderEvents.FollowedTagsFetched;
2728
import org.wordpress.android.ui.reader.ReaderEvents.InterestTagsFetchEnded;
2829
import org.wordpress.android.ui.reader.services.ServiceCompletionListener;
2930
import org.wordpress.android.util.AppLog;
@@ -122,24 +123,21 @@ public void onErrorResponse(VolleyError volleyError) {
122123
.get("read/menu", params, null, listener, errorListener);
123124
}
124125

125-
private boolean displayNameUpdateWasNeeded(ReaderTagList serverTopics) {
126-
boolean updateDone = false;
127-
126+
/**
127+
* Update the display names of the default tags (such as Subscribed and Discover) in the serverTopics list.
128+
*
129+
* @param serverTopics The list of default tags.
130+
*/
131+
private void updateDisplayNamesIfNeeded(@NonNull ReaderTagList serverTopics) {
128132
for (ReaderTag tag : serverTopics) {
129-
String tagNameBefore = tag.getTagDisplayName();
130133
if (tag.isFollowedSites()) {
131134
tag.setTagDisplayName(mContext.getString(R.string.reader_subscribed_display_name));
132-
if (!tagNameBefore.equals(tag.getTagDisplayName())) updateDone = true;
133135
} else if (tag.isDiscover()) {
134136
tag.setTagDisplayName(mContext.getString(R.string.reader_discover_display_name));
135-
if (!tagNameBefore.equals(tag.getTagDisplayName())) updateDone = true;
136137
} else if (tag.isPostsILike()) {
137138
tag.setTagDisplayName(mContext.getString(R.string.reader_my_likes_display_name));
138-
if (!tagNameBefore.equals(tag.getTagDisplayName())) updateDone = true;
139139
}
140140
}
141-
142-
return updateDone;
143141
}
144142

145143
private void handleUpdateTagsResponse(final JSONObject jsonObject) {
@@ -151,7 +149,7 @@ public void run() {
151149
ReaderTagList serverTopics = new ReaderTagList();
152150
serverTopics.addAll(parseTags(jsonObject, "default", ReaderTagType.DEFAULT));
153151

154-
boolean displayNameUpdateWasNeeded = displayNameUpdateWasNeeded(serverTopics);
152+
updateDisplayNamesIfNeeded(serverTopics);
155153

156154
serverTopics.addAll(parseTags(jsonObject, "subscribed", ReaderTagType.FOLLOWED));
157155

@@ -176,13 +174,11 @@ public void run() {
176174
localTopics.addAll(ReaderTagTable.getFollowedTags());
177175
localTopics.addAll(ReaderTagTable.getBookmarkTags());
178176
localTopics.addAll(ReaderTagTable.getCustomListTags());
177+
localTopics.addAll(ReaderTagTable.getDiscoverPostCardsTags());
179178

180-
if (
181-
!localTopics.isSameList(serverTopics)
182-
|| displayNameUpdateWasNeeded
183-
) {
184-
AppLog.d(AppLog.T.READER, "reader service > followed topics changed "
185-
+ "updatedDisplayNames [" + displayNameUpdateWasNeeded + "]");
179+
boolean didChangeFollowedTags = false;
180+
if (!localTopics.isSameList(serverTopics)) {
181+
AppLog.d(AppLog.T.READER, "reader service > followed topics changed");
186182

187183
if (!mAccountStore.hasAccessToken()) {
188184
// Do not delete locally saved tags for logged out user
@@ -195,8 +191,9 @@ public void run() {
195191
ReaderTagTable.replaceTags(serverTopics);
196192
}
197193
// broadcast the fact that there are changes
198-
EventBus.getDefault().post(new ReaderEvents.FollowedTagsChanged(true));
194+
didChangeFollowedTags = true;
199195
}
196+
EventBus.getDefault().post(new FollowedTagsFetched(true, didChangeFollowedTags));
200197
AppPrefs.setReaderTagsUpdatedTimestamp(new Date().getTime());
201198

202199
taskCompleted(UpdateTask.TAGS);

0 commit comments

Comments
 (0)