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..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,9 +477,19 @@ 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(); } + @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..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,9 +202,19 @@ 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(); } + @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);