diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/requests/notifications/PleromaMarkNotificationsRead.java b/mastodon/src/main/java/org/joinmastodon/android/api/requests/notifications/PleromaMarkNotificationsRead.java index 6e9fe23e7..384843b99 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/requests/notifications/PleromaMarkNotificationsRead.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/requests/notifications/PleromaMarkNotificationsRead.java @@ -13,7 +13,7 @@ import okhttp3.MultipartBody; import okhttp3.RequestBody; public class PleromaMarkNotificationsRead extends MastodonAPIRequest> { - private String maxID; + private final String maxID; public PleromaMarkNotificationsRead(String maxID) { super(HttpMethod.POST, "/pleroma/notifications/read", new TypeToken<>(){}); this.maxID = maxID; diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSession.java b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSession.java index 4b2d75bec..225e6bc4c 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSession.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSession.java @@ -295,7 +295,7 @@ public class AccountSession{ // don't hide own posts in own profile if(statusIsOnOwnProfile(s, profile)) return false; - if(isFilteredType(s)) + if(isFilteredType(s) && (context == FilterContext.HOME || context == FilterContext.PUBLIC)) return true; // Even with server-side filters, clients are expected to remove statuses that match a filter that hides them if(localPreferences.serverSideFiltersSupported){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/AccountTimelineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/AccountTimelineFragment.java index 815a2bf68..333e385ad 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/AccountTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/AccountTimelineFragment.java @@ -52,14 +52,14 @@ public class AccountTimelineFragment extends StatusListFragment{ @Override protected void doLoadData(int offset, int count){ - currentRequest=new GetAccountStatuses(user.id, offset>0 ? getMaxID() : null, null, count, filter) + currentRequest=new GetAccountStatuses(user.id, getMaxID(), null, count, filter) .setCallback(new SimpleCallback<>(this){ @Override public void onSuccess(List result){ if(getActivity()==null) return; - boolean empty=result.isEmpty(); + boolean more=applyMaxID(result); AccountSessionManager.get(accountID).filterStatuses(result, getFilterContext(), user); - onDataLoaded(result, !empty); + onDataLoaded(result, more); } }) .exec(accountID); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/AnnouncementsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/AnnouncementsFragment.java index ad9f48781..b376f24dc 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/AnnouncementsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/AnnouncementsFragment.java @@ -97,7 +97,7 @@ public class AnnouncementsFragment extends BaseStatusListFragment .setCallback(new SimpleCallback<>(this){ @Override public void onSuccess(List result){ - if (getActivity() == null) return; + if(getActivity()==null) return; // get unread items first List data = result.stream().filter(a -> !a.read).collect(toList()); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index fea8a3d29..fda8c6463 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -89,6 +89,7 @@ public abstract class BaseStatusListFragment exten protected Rect tmpRect=new Rect(); protected TypedObjectPool attachmentViewsPool=new TypedObjectPool<>(this::makeNewMediaAttachmentView); protected boolean currentlyScrolling; + protected String maxID; public BaseStatusListFragment(){ super(20); @@ -155,6 +156,8 @@ public abstract class BaseStatusListFragment exten } protected String getMaxID(){ + if(refreshing) return null; + if(maxID!=null) return maxID; if(!preloadedData.isEmpty()) return preloadedData.get(preloadedData.size()-1).getID(); else if(!data.isEmpty()) @@ -163,6 +166,12 @@ public abstract class BaseStatusListFragment exten return null; } + protected boolean applyMaxID(List result){ + boolean empty=result.isEmpty(); + if(!empty) maxID=result.get(result.size()-1).id; + return !empty; + } + protected abstract List buildDisplayItems(T s); protected abstract void addAccountToKnown(T s); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BookmarkedStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BookmarkedStatusListFragment.java index 9c2f37980..3831bb4e4 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BookmarkedStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BookmarkedStatusListFragment.java @@ -28,7 +28,7 @@ public class BookmarkedStatusListFragment extends StatusListFragment{ .setCallback(new SimpleCallback<>(this){ @Override public void onSuccess(HeaderPaginationList result){ - if (getActivity() == null) return; + if(getActivity()==null) return; if(result.nextPageUri!=null) nextMaxID=result.nextPageUri.getQueryParameter("max_id"); else diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/EditTimelinesFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/EditTimelinesFragment.java index 3debf9536..9524aa7eb 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/EditTimelinesFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/EditTimelinesFragment.java @@ -169,7 +169,7 @@ public class EditTimelinesFragment extends MastodonRecyclerFragment(this){ @Override public void onSuccess(HeaderPaginationList result){ - if (getActivity() == null) return; + if(getActivity()==null) return; if(result.nextPageUri!=null) nextMaxID=result.nextPageUri.getQueryParameter("max_id"); else diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowRequestsListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowRequestsListFragment.java index d93c19fb3..2a443e436 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowRequestsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowRequestsListFragment.java @@ -83,7 +83,7 @@ public class FollowRequestsListFragment extends MastodonRecyclerFragment(this){ @Override public void onSuccess(HeaderPaginationList result){ - if (getActivity() == null) return; + if(getActivity()==null) return; if(result.nextPageUri!=null) nextMaxID=result.nextPageUri.getQueryParameter("max_id"); else diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowedHashtagsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowedHashtagsFragment.java index 600791142..ccb86fdc5 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowedHashtagsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowedHashtagsFragment.java @@ -56,7 +56,7 @@ public class FollowedHashtagsFragment extends MastodonRecyclerFragment .setCallback(new SimpleCallback<>(this){ @Override public void onSuccess(HeaderPaginationList result){ - if (getActivity() == null) return; + if(getActivity()==null) return; if(result.nextPageUri!=null) nextMaxID=result.nextPageUri.getQueryParameter("max_id"); else diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/HashtagTimelineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/HashtagTimelineFragment.java index 0db3110dc..5a23e2a44 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HashtagTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HashtagTimelineFragment.java @@ -91,14 +91,14 @@ public class HashtagTimelineFragment extends PinnableStatusListFragment{ @Override protected void doLoadData(int offset, int count){ - currentRequest=new GetHashtagTimeline(hashtagName, offset==0 ? null : getMaxID(), null, count, any, all, none, localOnly, getLocalPrefs().timelineReplyVisibility) + currentRequest=new GetHashtagTimeline(hashtagName, getMaxID(), null, count, any, all, none, localOnly, getLocalPrefs().timelineReplyVisibility) .setCallback(new SimpleCallback<>(this){ @Override public void onSuccess(List result){ if(getActivity()==null) return; - boolean empty=result.isEmpty(); + boolean more=applyMaxID(result); AccountSessionManager.get(accountID).filterStatuses(result, getFilterContext()); - onDataLoaded(result, !empty); + onDataLoaded(result, more); } }) .exec(accountID); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTabFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTabFragment.java index 72155601f..41ab1046c 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTabFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTabFragment.java @@ -287,7 +287,7 @@ public class HomeTabFragment extends MastodonToolbarFragment implements Scrollab new GetAnnouncements(false).setCallback(new Callback<>() { @Override public void onSuccess(List result) { - if (getActivity() == null) return; + if(getActivity()==null) return; if (result.stream().anyMatch(a -> !a.read)) { announcementsBadged = true; announcements.setVisible(false); @@ -381,7 +381,7 @@ public class HomeTabFragment extends MastodonToolbarFragment implements Scrollab } private void updateOverflowMenu() { - if (getActivity() == null) return; + if(getActivity()==null) return; Menu m = overflowPopup.getMenu(); m.clear(); overflowPopup.inflate(R.menu.home_overflow); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelineFragment.java index 5e45fb977..fb357d991 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelineFragment.java @@ -62,7 +62,7 @@ public class ListTimelineFragment extends PinnableStatusListFragment { new GetList(listID).setCallback(new Callback<>() { @Override public void onSuccess(ListTimeline listTimeline) { - if (getActivity() == null) return; + if(getActivity()==null) return; // TODO: save updated info if (!listTimeline.title.equals(listTitle)) setTitle(listTimeline.title); if (listTimeline.repliesPolicy != null && !listTimeline.repliesPolicy.equals(repliesPolicy)) { @@ -100,7 +100,7 @@ public class ListTimelineFragment extends PinnableStatusListFragment { new UpdateList(listID, newTitle, editor.isExclusive(), editor.getRepliesPolicy()).setCallback(new Callback<>() { @Override public void onSuccess(ListTimeline list) { - if (getActivity() == null) return; + if(getActivity()==null) return; setTitle(list.title); listTitle = list.title; repliesPolicy = list.repliesPolicy; @@ -133,14 +133,14 @@ public class ListTimelineFragment extends PinnableStatusListFragment { @Override protected void doLoadData(int offset, int count) { - currentRequest=new GetListTimeline(listID, offset==0 ? null : getMaxID(), null, count, null, getLocalPrefs().timelineReplyVisibility) + currentRequest=new GetListTimeline(listID, getMaxID(), null, count, null, getLocalPrefs().timelineReplyVisibility) .setCallback(new SimpleCallback<>(this) { @Override public void onSuccess(List result) { if(getActivity()==null) return; - boolean empty=result.isEmpty(); + boolean more=applyMaxID(result); AccountSessionManager.get(accountID).filterStatuses(result, getFilterContext()); - onDataLoaded(result, !empty); + onDataLoaded(result, more); } }) .exec(accountID); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ListsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ListsFragment.java index 15aba415a..8e92bb5ea 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ListsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ListsFragment.java @@ -140,7 +140,7 @@ public class ListsFragment extends MastodonRecyclerFragment implem .setCallback(new SimpleCallback<>(this) { @Override public void onSuccess(List lists) { - if (getActivity() == null) return; + if(getActivity()==null) return; for (ListTimeline l : lists) userInListBefore.put(l.id, true); userInList.putAll(userInListBefore); if (profileAccountId == null || !lists.isEmpty()) onDataLoaded(lists, false); @@ -149,7 +149,7 @@ public class ListsFragment extends MastodonRecyclerFragment implem currentRequest=new GetLists().setCallback(new SimpleCallback<>(ListsFragment.this) { @Override public void onSuccess(List allLists) { - if (getActivity() == null) return; + if(getActivity()==null) return; List newLists = new ArrayList<>(); for (ListTimeline l : allLists) { if (lists.stream().noneMatch(e -> e.id.equals(l.id))) newLists.add(l); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsFragment.java index b40565d1d..6ce55442d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsFragment.java @@ -254,7 +254,7 @@ public class NotificationsFragment extends MastodonToolbarFragment implements Sc new GetFollowRequests(null, 1).setCallback(new Callback<>() { @Override public void onSuccess(HeaderPaginationList accounts) { - if (getActivity() == null) return; + if(getActivity()==null) return; getToolbar().getMenu().findItem(R.id.follow_requests).setVisible(!accounts.isEmpty()); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java index 30b314c37..ea4164c6f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -482,7 +482,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList .setCallback(new SimpleCallback<>(this){ @Override public void onSuccess(Account result){ - if (getActivity() == null) return; + if(getActivity()==null) return; onAccountLoaded(result); } }) @@ -894,7 +894,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList } private void updateRelationship(){ - if (getActivity() == null) return; + if(getActivity()==null) return; invalidateOptionsMenu(); actionButton.setVisibility(View.VISIBLE); notifyButton.setVisibility(relationship.following ? View.VISIBLE : View.GONE); @@ -1191,7 +1191,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList savingEdits=false; account=result; AccountSessionManager.getInstance().updateAccountInfo(accountID, account); - if (getActivity() == null) return; + if(getActivity()==null) return; exitEditMode(); setActionProgressVisible(false); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ScheduledStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ScheduledStatusListFragment.java index 00d4e5112..3132cecd9 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ScheduledStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ScheduledStatusListFragment.java @@ -129,7 +129,7 @@ public class ScheduledStatusListFragment extends BaseStatusListFragment extends BaseAccountListFra nextMaxID=result.nextPageUri.getQueryParameter("max_id"); else nextMaxID=null; - if (getActivity() == null) return; + if(getActivity()==null) return; List items = result.stream() .filter(a -> d.size() > 1000 || d.stream() .noneMatch(i -> i.account.url.equals(a.url))) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/BubbleTimelineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/BubbleTimelineFragment.java index efae99c81..e0cc248f6 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/BubbleTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/BubbleTimelineFragment.java @@ -19,7 +19,6 @@ import me.grishka.appkit.utils.MergeRecyclerAdapter; public class BubbleTimelineFragment extends StatusListFragment { private DiscoverInfoBannerHelper bannerHelper; - private String maxID; @Override public void onCreate(Bundle savedInstanceState){ @@ -35,15 +34,14 @@ public class BubbleTimelineFragment extends StatusListFragment { @Override protected void doLoadData(int offset, int count){ - currentRequest=new GetBubbleTimeline(refreshing ? null : maxID, count, getLocalPrefs().timelineReplyVisibility) + currentRequest=new GetBubbleTimeline(getMaxID(), count, getLocalPrefs().timelineReplyVisibility) .setCallback(new SimpleCallback<>(this){ @Override public void onSuccess(List result){ if(getActivity()==null) return; - boolean empty=result.isEmpty(); - if(!empty) maxID=result.get(result.size()-1).id; + boolean more=applyMaxID(result); AccountSessionManager.get(accountID).filterStatuses(result, getFilterContext()); - onDataLoaded(result, !empty); + onDataLoaded(result, more); bannerHelper.onBannerBecameVisible(); } }) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverAccountsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverAccountsFragment.java index c58e3d5db..94e9599dc 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverAccountsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverAccountsFragment.java @@ -77,7 +77,7 @@ public class DiscoverAccountsFragment extends MastodonRecyclerFragment(this){ @Override public void onSuccess(List result){ - if (getActivity() == null) return; + if(getActivity()==null) return; onDataLoaded(result.stream().map(fs->new AccountWrapper(fs.account)).collect(Collectors.toList()), false); loadRelationships(); } @@ -112,7 +112,7 @@ public class DiscoverAccountsFragment extends MastodonRecyclerFragment result){ relationshipsRequest=null; relationships=result.stream().collect(Collectors.toMap(rel->rel.id, Function.identity())); - if (getActivity() == null) return; + if(getActivity()==null) return; if(list==null) return; for(int i=0;i0 ? getMaxID() : null, null, count, GetAccountStatuses.Filter.OWN_POSTS_AND_REPLIES) + currentRequest=new GetAccountStatuses(reportAccount.id, getMaxID(), null, count, GetAccountStatuses.Filter.OWN_POSTS_AND_REPLIES) .setCallback(new SimpleCallback<>(this){ @Override public void onSuccess(List result){