From be91775f4b8720f79ffc9dc4f9e4e4113282e38d Mon Sep 17 00:00:00 2001 From: sk Date: Mon, 12 Jun 2023 17:29:00 +0200 Subject: [PATCH] fix pinned posts showing post multiple times --- .../fragments/PinnedPostsListFragment.java | 52 +++++++++++++++++++ .../android/fragments/ProfileFragment.java | 11 +++- 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 mastodon/src/main/java/org/joinmastodon/android/fragments/PinnedPostsListFragment.java diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/PinnedPostsListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/PinnedPostsListFragment.java new file mode 100644 index 000000000..a091e5d42 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/PinnedPostsListFragment.java @@ -0,0 +1,52 @@ +package org.joinmastodon.android.fragments; + +import android.net.Uri; +import android.os.Bundle; + +import org.joinmastodon.android.R; +import org.joinmastodon.android.api.requests.accounts.GetAccountStatuses; +import org.joinmastodon.android.model.Account; +import org.joinmastodon.android.model.Filter; +import org.joinmastodon.android.model.Status; +import org.parceler.Parcels; + +import java.util.List; + +import me.grishka.appkit.api.SimpleCallback; + +public class PinnedPostsListFragment extends StatusListFragment{ + private Account account; + + public PinnedPostsListFragment() { + setListLayoutId(R.layout.recycler_fragment_no_refresh); + } + + @Override + public void onCreate(Bundle savedInstanceState){ + super.onCreate(savedInstanceState); + account=Parcels.unwrap(getArguments().getParcelable("profileAccount")); + setTitle(R.string.posts); + loadData(); + } + + @Override + protected void doLoadData(int offset, int count){ + new GetAccountStatuses(account.id, null, null, 100, GetAccountStatuses.Filter.PINNED) + .setCallback(new SimpleCallback<>(this){ + @Override + public void onSuccess(List result){ + onDataLoaded(result, false); + } + }).exec(accountID); + } + + @Override + protected Filter.FilterContext getFilterContext() { + return Filter.FilterContext.ACCOUNT; + } + + @Override + public Uri getWebUri(Uri.Builder base) { + return Uri.parse(account.url); + } +} 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 7ca2d96c3..a72eb02ac 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -124,7 +124,8 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList private ProgressBarButton actionButton, notifyButton; private ViewPager2 pager; private NestedRecyclerScrollView scrollView; - private AccountTimelineFragment postsFragment, postsWithRepliesFragment, pinnedPostsFragment, mediaFragment; + private AccountTimelineFragment postsFragment, postsWithRepliesFragment, mediaFragment; + private PinnedPostsListFragment pinnedPostsFragment; // private ProfileAboutFragment aboutFragment; private TabLayout tabbar; private SwipeRefreshLayout refreshLayout; @@ -421,8 +422,14 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList if(postsFragment==null){ postsFragment=AccountTimelineFragment.newInstance(accountID, account, GetAccountStatuses.Filter.DEFAULT, true); postsWithRepliesFragment=AccountTimelineFragment.newInstance(accountID, account, GetAccountStatuses.Filter.INCLUDE_REPLIES, false); - pinnedPostsFragment=AccountTimelineFragment.newInstance(accountID, account, GetAccountStatuses.Filter.PINNED, false); mediaFragment=AccountTimelineFragment.newInstance(accountID, account, GetAccountStatuses.Filter.MEDIA, false); + + Bundle args=new Bundle(); + args.putString("account", accountID); + args.putParcelable("profileAccount", Parcels.wrap(account)); + args.putBoolean("__is_tab", true); + pinnedPostsFragment=new PinnedPostsListFragment(); + pinnedPostsFragment.setArguments(args); // aboutFragment=new ProfileAboutFragment(); setFields(fields); }