diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/requests/accounts/GetAccountStatuses.java b/mastodon/src/main/java/org/joinmastodon/android/api/requests/accounts/GetAccountStatuses.java index 1668ef9d0..60e1ce439 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/requests/accounts/GetAccountStatuses.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/requests/accounts/GetAccountStatuses.java @@ -21,6 +21,7 @@ public class GetAccountStatuses extends MastodonAPIRequest>{ switch(filter){ case DEFAULT -> addQueryParameter("exclude_replies", "true"); case INCLUDE_REPLIES -> {} + case PINNED -> addQueryParameter("pinned", "true"); case MEDIA -> addQueryParameter("only_media", "true"); case NO_REBLOGS -> { addQueryParameter("exclude_replies", "true"); @@ -32,6 +33,7 @@ public class GetAccountStatuses extends MastodonAPIRequest>{ public enum Filter{ DEFAULT, INCLUDE_REPLIES, + PINNED, MEDIA, NO_REBLOGS } 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 4f0907e31..345861191 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -101,7 +101,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList private ProgressBarButton actionButton; private ViewPager2 pager; private NestedRecyclerScrollView scrollView; - private AccountTimelineFragment postsFragment, postsWithRepliesFragment, mediaFragment; + private AccountTimelineFragment postsFragment, postsWithRepliesFragment, pinnedPostsFragment, mediaFragment; private ProfileAboutFragment aboutFragment; private TabLayout tabbar; private SwipeRefreshLayout refreshLayout; @@ -215,8 +215,9 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList tabView.setId(switch(i){ case 0 -> R.id.profile_posts; case 1 -> R.id.profile_posts_with_replies; - case 2 -> R.id.profile_media; - case 3 -> R.id.profile_about; + case 2 -> R.id.profile_pinned_posts; + case 3 -> R.id.profile_media; + case 4 -> R.id.profile_about; default -> throw new IllegalStateException("Unexpected value: "+i); }); tabView.setVisibility(View.GONE); @@ -240,8 +241,9 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList tab.setText(switch(position){ case 0 -> R.string.posts; case 1 -> R.string.posts_and_replies; - case 2 -> R.string.media; - case 3 -> R.string.profile_about; + case 2 -> R.string.pinned_posts; + case 3 -> R.string.media; + case 4 -> R.string.profile_about; default -> throw new IllegalStateException(); }); } @@ -298,6 +300,8 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList postsFragment.onRefresh(); if(postsWithRepliesFragment.loaded) postsWithRepliesFragment.onRefresh(); + if(pinnedPostsFragment.loaded) + pinnedPostsFragment.onRefresh(); if(mediaFragment.loaded) mediaFragment.onRefresh(); } @@ -322,6 +326,7 @@ 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); aboutFragment=new ProfileAboutFragment(); aboutFragment.setFields(fields); @@ -402,6 +407,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList if(postsFragment!=null && postsFragment.isAdded() && childInsets!=null){ postsFragment.onApplyWindowInsets(childInsets); postsWithRepliesFragment.onApplyWindowInsets(childInsets); + pinnedPostsFragment.onApplyWindowInsets(childInsets); mediaFragment.onApplyWindowInsets(childInsets); } } @@ -637,8 +643,9 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList return switch(page){ case 0 -> postsFragment; case 1 -> postsWithRepliesFragment; - case 2 -> mediaFragment; - case 3 -> aboutFragment; + case 2 -> pinnedPostsFragment; + case 3 -> mediaFragment; + case 4 -> aboutFragment; default -> throw new IllegalStateException(); }; } diff --git a/mastodon/src/main/res/values-de-rDE/strings.xml b/mastodon/src/main/res/values-de-rDE/strings.xml index 4d3fd1493..5c91cd685 100644 --- a/mastodon/src/main/res/values-de-rDE/strings.xml +++ b/mastodon/src/main/res/values-de-rDE/strings.xml @@ -42,6 +42,7 @@ Beiträge Beiträge und Antworten + Angepinnt Medien Über Folgen diff --git a/mastodon/src/main/res/values/ids.xml b/mastodon/src/main/res/values/ids.xml index 6545f9cad..87c310305 100644 --- a/mastodon/src/main/res/values/ids.xml +++ b/mastodon/src/main/res/values/ids.xml @@ -4,6 +4,7 @@ + diff --git a/mastodon/src/main/res/values/strings.xml b/mastodon/src/main/res/values/strings.xml index 939ac102c..809990425 100644 --- a/mastodon/src/main/res/values/strings.xml +++ b/mastodon/src/main/res/values/strings.xml @@ -47,6 +47,7 @@ Posts Posts and Replies + Pinned Media About Follow