From 287e75e54a41cb3e02cab25f17ec0af6d6fcd72a Mon Sep 17 00:00:00 2001 From: FineFindus <63370021+FineFindus@users.noreply.github.com> Date: Sat, 18 Mar 2023 15:43:14 +0100 Subject: [PATCH 1/3] feat(Scrollable): add isScrolledToTop Checks if the list is already scrolled to the top. Can be used to change the interaction depending on it. --- .../android/fragments/BaseStatusListFragment.java | 5 +++++ .../android/fragments/EditTimelinesFragment.java | 5 +++++ .../android/fragments/FollowRequestsListFragment.java | 5 +++++ .../android/fragments/FollowedHashtagsFragment.java | 5 +++++ .../joinmastodon/android/fragments/HomeTabFragment.java | 5 +++++ .../android/fragments/ListTimelinesFragment.java | 5 +++++ .../android/fragments/NotificationsFragment.java | 5 +++++ .../joinmastodon/android/fragments/ProfileFragment.java | 5 +++++ .../joinmastodon/android/fragments/ScrollableToTop.java | 2 ++ .../fragments/discover/DiscoverAccountsFragment.java | 5 +++++ .../android/fragments/discover/DiscoverFragment.java | 9 +++++++++ .../android/fragments/discover/DiscoverNewsFragment.java | 5 +++++ .../fragments/discover/TrendingHashtagsFragment.java | 5 +++++ 13 files changed, 66 insertions(+) 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 ec9c470ef..b36f86925 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -631,6 +631,11 @@ public abstract class BaseStatusListFragment exten smoothScrollRecyclerViewToTop(list); } + @Override + public boolean isScrolledToTop() { + return list.getChildAt(0).getTop() == 0; + } + protected int getListWidthForMediaLayout(){ return list.getWidth(); } 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 3d60bcc4d..d08e9ee7d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/EditTimelinesFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/EditTimelinesFragment.java @@ -237,6 +237,11 @@ public class EditTimelinesFragment extends BaseRecyclerFragment implements ImageLoaderRecyclerAdapter{ public AccountsAdapter(){ 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 cdb729841..a10af2f99 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowedHashtagsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowedHashtagsFragment.java @@ -76,6 +76,11 @@ public class FollowedHashtagsFragment extends BaseRecyclerFragment impl smoothScrollRecyclerViewToTop(list); } + @Override + public boolean isScrolledToTop() { + return list.getChildAt(0).getTop() == 0; + } + private class HashtagsAdapter extends RecyclerView.Adapter{ @NonNull @Override 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 b83b27ec0..0d44d6601 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTabFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTabFragment.java @@ -480,6 +480,11 @@ public class HomeTabFragment extends MastodonToolbarFragment implements Scrollab ((ScrollableToTop) fragments[pager.getCurrentItem()]).scrollToTop(); } + @Override + public boolean isScrolledToTop() { + return ((ScrollableToTop) fragments[pager.getCurrentItem()]).isScrolledToTop(); + } + public void hideNewPostsButton(){ if(!newPostsBtnShown) return; diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelinesFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelinesFragment.java index 2b7c6a874..344430f17 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelinesFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelinesFragment.java @@ -200,6 +200,11 @@ public class ListTimelinesFragment extends BaseRecyclerFragment im smoothScrollRecyclerViewToTop(list); } + @Override + public boolean isScrolledToTop() { + return list.getChildAt(0).getTop() == 0; + } + private class ListsAdapter extends RecyclerView.Adapter{ @NonNull @Override 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 12a14512e..82bf153d8 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsFragment.java @@ -205,6 +205,11 @@ public class NotificationsFragment extends MastodonToolbarFragment implements Sc getFragmentForPage(pager.getCurrentItem()).scrollToTop(); } + @Override + public boolean isScrolledToTop() { + return getFragmentForPage(pager.getCurrentItem()).isScrolledToTop(); + } + public void loadData(){ refreshFollowRequestsBadge(); if(allNotificationsFragment!=null && !allNotificationsFragment.loaded && !allNotificationsFragment.dataLoading) 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 c173f3064..de299db84 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -1229,6 +1229,11 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList scrollView.smoothScrollTo(0, 0); } + @Override + public boolean isScrolledToTop() { + return list.getChildAt(0).getTop() == 0; + } + private void onFollowersOrFollowingClick(View v){ Bundle args=new Bundle(); args.putString("account", accountID); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ScrollableToTop.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ScrollableToTop.java index d6a28ae6c..6d4598738 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ScrollableToTop.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ScrollableToTop.java @@ -6,6 +6,8 @@ import androidx.recyclerview.widget.RecyclerView; import me.grishka.appkit.utils.V; public interface ScrollableToTop{ + boolean isScrolledToTop(); + void scrollToTop(); /** 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 7eed94236..30f3f65fa 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 @@ -146,6 +146,11 @@ public class DiscoverAccountsFragment extends BaseRecyclerFragment implements smoothScrollRecyclerViewToTop(list); } + @Override + public boolean isScrolledToTop() { + return list.getChildAt(0).getTop() == 0; + } + @Override public boolean isOnTop() { return isRecyclerViewOnTop(list); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/TrendingHashtagsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/TrendingHashtagsFragment.java index 675118851..ec4d0af6d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/TrendingHashtagsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/TrendingHashtagsFragment.java @@ -74,6 +74,11 @@ public class TrendingHashtagsFragment extends BaseRecyclerFragment impl smoothScrollRecyclerViewToTop(list); } + @Override + public boolean isScrolledToTop() { + return list.getChildAt(0).getTop() == 0; + } + @Override public boolean isOnTop() { return isRecyclerViewOnTop(list); From 62d5c7a49241987661ca73ec41129b7fb108a9f0 Mon Sep 17 00:00:00 2001 From: FineFindus <63370021+FineFindus@users.noreply.github.com> Date: Sat, 18 Mar 2023 15:57:13 +0100 Subject: [PATCH 2/3] feat(HomeTabFragment): switch timeline when triple clicking Closes #83. When clicking the HomeTab and the timeline is already scrolled up, the timeline is cycled. --- .../org/joinmastodon/android/fragments/HomeTabFragment.java | 5 +++++ 1 file changed, 5 insertions(+) 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 0d44d6601..79c209b5c 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTabFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTabFragment.java @@ -477,6 +477,11 @@ public class HomeTabFragment extends MastodonToolbarFragment implements Scrollab @Override public void scrollToTop(){ + if (((ScrollableToTop) fragments[pager.getCurrentItem()]).isScrolledToTop()) { + int nextPage = (pager.getCurrentItem() + 1) % count; + navigateTo(nextPage); + return; + } ((ScrollableToTop) fragments[pager.getCurrentItem()]).scrollToTop(); } From ea823ef0cf11544df18349d2f4f35b481533c045 Mon Sep 17 00:00:00 2001 From: FineFindus <63370021+FineFindus@users.noreply.github.com> Date: Sat, 18 Mar 2023 16:03:54 +0100 Subject: [PATCH 3/3] feat(NotificationsFragment): switch tab when triple clicking --- .../android/fragments/NotificationsFragment.java | 5 +++++ 1 file changed, 5 insertions(+) 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 82bf153d8..4cf60a893 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsFragment.java @@ -202,6 +202,11 @@ public class NotificationsFragment extends MastodonToolbarFragment implements Sc @Override public void scrollToTop(){ + if (getFragmentForPage(pager.getCurrentItem()).isScrolledToTop()) { + int nextPage = (pager.getCurrentItem() + 1) % tabViews.length; + pager.setCurrentItem(nextPage, true); + return; + } getFragmentForPage(pager.getCurrentItem()).scrollToTop(); }