From 318d271127be441ada22cff9d96ec74fcaa3d873 Mon Sep 17 00:00:00 2001 From: sk Date: Mon, 2 May 2022 18:31:29 +0200 Subject: [PATCH] add federation tab and change tab order --- .../fragments/discover/DiscoverFragment.java | 46 +++++++++++-------- .../discover/FederatedTimelineFragment.java | 41 +++++++++++++++++ .../ui/utils/DiscoverInfoBannerHelper.java | 2 + mastodon/src/main/res/values/ids.xml | 1 + mastodon/src/main/res/values/strings.xml | 3 ++ 5 files changed, 74 insertions(+), 19 deletions(-) create mode 100644 mastodon/src/main/java/org/joinmastodon/android/fragments/discover/FederatedTimelineFragment.java diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverFragment.java index 60e29d7d9..5d64ea17b 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverFragment.java @@ -51,6 +51,7 @@ public class DiscoverFragment extends AppKitFragment implements ScrollableToTop, private DiscoverAccountsFragment accountsFragment; private SearchFragment searchFragment; private LocalTimelineFragment localTimelineFragment; + private FederatedTimelineFragment federatedTimelineFragment; private String accountID; private Runnable searchDebouncer=this::onSearchChangedDebounced; @@ -72,15 +73,16 @@ public class DiscoverFragment extends AppKitFragment implements ScrollableToTop, tabLayout=view.findViewById(R.id.tabbar); pager=view.findViewById(R.id.pager); - tabViews=new FrameLayout[5]; + tabViews=new FrameLayout[6]; for(int i=0;i R.id.discover_posts; - case 1 -> R.id.discover_hashtags; - case 2 -> R.id.discover_news; - case 3 -> R.id.discover_local_timeline; - case 4 -> R.id.discover_users; + case 0 -> R.id.discover_local_timeline; + case 1 -> R.id.discover_federated_timeline; + case 2 -> R.id.discover_hashtags; + case 3 -> R.id.discover_posts; + case 4 -> R.id.discover_news; + case 5 -> R.id.discover_users; default -> throw new IllegalStateException("Unexpected value: "+i); }); tabView.setVisibility(View.GONE); @@ -106,7 +108,7 @@ public class DiscoverFragment extends AppKitFragment implements ScrollableToTop, } }); - if(postsFragment==null){ + if(localTimelineFragment==null){ Bundle args=new Bundle(); args.putString("account", accountID); args.putBoolean("__is_tab", true); @@ -126,9 +128,13 @@ public class DiscoverFragment extends AppKitFragment implements ScrollableToTop, localTimelineFragment=new LocalTimelineFragment(); localTimelineFragment.setArguments(args); + federatedTimelineFragment=new FederatedTimelineFragment(); + federatedTimelineFragment.setArguments(args); + getChildFragmentManager().beginTransaction() .add(R.id.discover_posts, postsFragment) .add(R.id.discover_local_timeline, localTimelineFragment) + .add(R.id.discover_federated_timeline, federatedTimelineFragment) .add(R.id.discover_hashtags, hashtagsFragment) .add(R.id.discover_news, newsFragment) .add(R.id.discover_users, accountsFragment) @@ -139,11 +145,12 @@ public class DiscoverFragment extends AppKitFragment implements ScrollableToTop, @Override public void onConfigureTab(@NonNull TabLayout.Tab tab, int position){ tab.setText(switch(position){ - case 0 -> R.string.posts; - case 1 -> R.string.hashtags; - case 2 -> R.string.news; - case 3 -> R.string.local_timeline; - case 4 -> R.string.for_you; + case 0 -> R.string.local_timeline; + case 1 -> R.string.federated_timeline; + case 2 -> R.string.hashtags; + case 3 -> R.string.posts; + case 4 -> R.string.news; + case 5 -> R.string.for_you; default -> throw new IllegalStateException("Unexpected value: "+position); }); tab.view.textView.setAllCaps(true); @@ -217,8 +224,8 @@ public class DiscoverFragment extends AppKitFragment implements ScrollableToTop, } public void loadData(){ - if(postsFragment!=null && !postsFragment.loaded && !postsFragment.dataLoading) - postsFragment.loadData(); + if(localTimelineFragment!=null && !localTimelineFragment.loaded && !localTimelineFragment.dataLoading) + localTimelineFragment.loadData(); } private void onSearchEditFocusChanged(View v, boolean hasFocus){ @@ -254,11 +261,12 @@ public class DiscoverFragment extends AppKitFragment implements ScrollableToTop, private Fragment getFragmentForPage(int page){ return switch(page){ - case 0 -> postsFragment; - case 1 -> hashtagsFragment; - case 2 -> newsFragment; - case 3 -> localTimelineFragment; - case 4 -> accountsFragment; + case 0 -> localTimelineFragment; + case 1 -> federatedTimelineFragment; + case 2 -> hashtagsFragment; + case 3 -> postsFragment; + case 4 -> newsFragment; + case 5 -> accountsFragment; default -> throw new IllegalStateException("Unexpected value: "+page); }; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/FederatedTimelineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/FederatedTimelineFragment.java new file mode 100644 index 000000000..0943ddbff --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/FederatedTimelineFragment.java @@ -0,0 +1,41 @@ +package org.joinmastodon.android.fragments.discover; + +import android.os.Bundle; +import android.view.View; + +import org.joinmastodon.android.api.requests.timelines.GetPublicTimeline; +import org.joinmastodon.android.fragments.StatusListFragment; +import org.joinmastodon.android.model.Filter; +import org.joinmastodon.android.model.Status; +import org.joinmastodon.android.ui.utils.DiscoverInfoBannerHelper; +import org.joinmastodon.android.utils.StatusFilterPredicate; + +import java.util.List; +import java.util.stream.Collectors; + +import me.grishka.appkit.api.SimpleCallback; + +public class FederatedTimelineFragment extends StatusListFragment{ + private DiscoverInfoBannerHelper bannerHelper=new DiscoverInfoBannerHelper(DiscoverInfoBannerHelper.BannerType.FEDERATED_TIMELINE); + private String maxID; + + @Override + protected void doLoadData(int offset, int count){ + currentRequest=new GetPublicTimeline(false, false, refreshing ? null : maxID, count) + .setCallback(new SimpleCallback<>(this){ + @Override + public void onSuccess(List result){ + if(!result.isEmpty()) + maxID=result.get(result.size()-1).id; + onDataLoaded(result.stream().filter(new StatusFilterPredicate(accountID, Filter.FilterContext.PUBLIC)).collect(Collectors.toList()), !result.isEmpty()); + } + }) + .exec(accountID); + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState){ + super.onViewCreated(view, savedInstanceState); + bannerHelper.maybeAddBanner(contentWrap); + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/DiscoverInfoBannerHelper.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/DiscoverInfoBannerHelper.java index 60b222171..baf87a674 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/DiscoverInfoBannerHelper.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/DiscoverInfoBannerHelper.java @@ -36,6 +36,7 @@ public class DiscoverInfoBannerHelper{ case TRENDING_HASHTAGS -> R.string.trending_hashtags_info_banner; case TRENDING_LINKS -> R.string.trending_links_info_banner; case LOCAL_TIMELINE -> R.string.local_timeline_info_banner; + case FEDERATED_TIMELINE -> R.string.federated_timeline_info_banner; }); } } @@ -59,6 +60,7 @@ public class DiscoverInfoBannerHelper{ TRENDING_HASHTAGS, TRENDING_LINKS, LOCAL_TIMELINE, + FEDERATED_TIMELINE, // ACCOUNTS } } diff --git a/mastodon/src/main/res/values/ids.xml b/mastodon/src/main/res/values/ids.xml index 6545f9cad..f3d022516 100644 --- a/mastodon/src/main/res/values/ids.xml +++ b/mastodon/src/main/res/values/ids.xml @@ -12,6 +12,7 @@ + diff --git a/mastodon/src/main/res/values/strings.xml b/mastodon/src/main/res/values/strings.xml index da200da66..e292d7bd7 100644 --- a/mastodon/src/main/res/values/strings.xml +++ b/mastodon/src/main/res/values/strings.xml @@ -218,6 +218,7 @@ Alt text describes your photos for people with low or no vision. Try to only include enough detail to understand the context. e.g. A dog looking around suspiciously with narrowed eyes at the camera. Public + Unlisted Followers only Only people I mention All @@ -307,10 +308,12 @@ Downloading… There\'s no app to handle this action Community + Federation These are the posts gaining traction in your corner of Mastodon. These are the hashtags gaining traction in your corner of Mastodon. These are the news stories being shared the most in your corner of Mastodon. These are the most recent posts by the people who use the same Mastodon server as you. + These are the most recent posts by the people in your federation. Dismiss See new posts Load missing posts