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 10cbfee43..6d6389236 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -62,7 +62,6 @@ import androidx.recyclerview.widget.RecyclerView; import me.grishka.appkit.Nav; import me.grishka.appkit.api.Callback; import me.grishka.appkit.api.ErrorResponse; -import me.grishka.appkit.fragments.BaseRecyclerFragment; import me.grishka.appkit.imageloader.ImageLoaderRecyclerAdapter; import me.grishka.appkit.imageloader.ImageLoaderViewHolder; import me.grishka.appkit.imageloader.requests.ImageLoaderRequest; @@ -70,7 +69,7 @@ import me.grishka.appkit.utils.BindableViewHolder; import me.grishka.appkit.utils.V; import me.grishka.appkit.views.UsableRecyclerView; -public abstract class BaseStatusListFragment extends BaseRecyclerFragment implements PhotoViewerHost, ScrollableToTop{ +public abstract class BaseStatusListFragment extends RecyclerFragment implements PhotoViewerHost, ScrollableToTop{ protected ArrayList displayItems=new ArrayList<>(); protected DisplayItemsAdapter adapter; protected String accountID; 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 c947b0fa9..3dbf2f2c9 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/EditTimelinesFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/EditTimelinesFragment.java @@ -47,11 +47,10 @@ import java.util.Map; import me.grishka.appkit.api.Callback; import me.grishka.appkit.api.ErrorResponse; -import me.grishka.appkit.fragments.BaseRecyclerFragment; import me.grishka.appkit.utils.BindableViewHolder; import me.grishka.appkit.views.UsableRecyclerView; -public class EditTimelinesFragment extends BaseRecyclerFragment implements ScrollableToTop { +public class EditTimelinesFragment extends RecyclerFragment implements ScrollableToTop { private String accountID; private TimelinesAdapter adapter; private final ItemTouchHelper itemTouchHelper; diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowRequestsListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowRequestsListFragment.java index 76b28334f..385a64084 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowRequestsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowRequestsListFragment.java @@ -38,7 +38,6 @@ import me.grishka.appkit.Nav; import me.grishka.appkit.api.Callback; import me.grishka.appkit.api.ErrorResponse; import me.grishka.appkit.api.SimpleCallback; -import me.grishka.appkit.fragments.BaseRecyclerFragment; import me.grishka.appkit.imageloader.ImageLoaderRecyclerAdapter; import me.grishka.appkit.imageloader.ImageLoaderViewHolder; import me.grishka.appkit.imageloader.requests.ImageLoaderRequest; @@ -47,7 +46,7 @@ import me.grishka.appkit.utils.BindableViewHolder; import me.grishka.appkit.utils.V; import me.grishka.appkit.views.UsableRecyclerView; -public class FollowRequestsListFragment extends BaseRecyclerFragment implements ScrollableToTop{ +public class FollowRequestsListFragment extends RecyclerFragment implements ScrollableToTop{ private String accountID; private Map relationships=Collections.emptyMap(); private GetAccountRelationships relationshipsRequest; 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..297d6427a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowedHashtagsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowedHashtagsFragment.java @@ -16,11 +16,10 @@ import org.joinmastodon.android.ui.DividerItemDecoration; import org.joinmastodon.android.ui.utils.UiUtils; import me.grishka.appkit.api.SimpleCallback; -import me.grishka.appkit.fragments.BaseRecyclerFragment; import me.grishka.appkit.utils.BindableViewHolder; import me.grishka.appkit.views.UsableRecyclerView; -public class FollowedHashtagsFragment extends BaseRecyclerFragment implements ScrollableToTop { +public class FollowedHashtagsFragment extends RecyclerFragment implements ScrollableToTop { private String nextMaxID; private String accountId; 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..301b61a93 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelinesFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelinesFragment.java @@ -37,11 +37,10 @@ import me.grishka.appkit.Nav; import me.grishka.appkit.api.Callback; import me.grishka.appkit.api.ErrorResponse; import me.grishka.appkit.api.SimpleCallback; -import me.grishka.appkit.fragments.BaseRecyclerFragment; import me.grishka.appkit.utils.BindableViewHolder; import me.grishka.appkit.views.UsableRecyclerView; -public class ListTimelinesFragment extends BaseRecyclerFragment implements ScrollableToTop { +public class ListTimelinesFragment extends RecyclerFragment implements ScrollableToTop { private String accountId; private String profileAccountId; private final HashMap userInListBefore = new HashMap<>(); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/RecyclerFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/RecyclerFragment.java new file mode 100644 index 000000000..b5e0923af --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/RecyclerFragment.java @@ -0,0 +1,45 @@ +package org.joinmastodon.android.fragments; + +import android.content.Context; +import android.os.Bundle; +import android.view.View; + +import org.joinmastodon.android.R; +import org.joinmastodon.android.ui.utils.UiUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import me.grishka.appkit.fragments.BaseRecyclerFragment; + + +public abstract class RecyclerFragment extends BaseRecyclerFragment { + public RecyclerFragment(int perPage) { + super(perPage); + } + + public RecyclerFragment(int layout, int perPage) { + super(layout, perPage); + } + + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + Context ctx = getContext(); + List colors = new ArrayList<>(Arrays.asList( + R.color.primary_600, + R.color.red_primary_600, + R.color.green_primary_600, + R.color.blue_primary_600, + R.color.purple_600 + )); + int primary = UiUtils.getThemeColorRes(ctx, R.attr.colorPrimary600); + if (!colors.contains(primary)) colors.add(0, primary); + int offset = colors.indexOf(primary); + int[] sorted = new int[colors.size()]; + for (int i = 0; i < colors.size(); i++) { + sorted[i] = colors.get((i + offset) % colors.size()); + } + refreshLayout.setColorSchemeResources(sorted); + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/BaseAccountListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/BaseAccountListFragment.java index 6a7fb48b6..4a247b0bf 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/BaseAccountListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/BaseAccountListFragment.java @@ -25,6 +25,7 @@ import org.joinmastodon.android.api.requests.accounts.SetAccountFollowed; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.fragments.ListTimelinesFragment; import org.joinmastodon.android.fragments.ProfileFragment; +import org.joinmastodon.android.fragments.RecyclerFragment; import org.joinmastodon.android.fragments.report.ReportReasonChoiceFragment; import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Relationship; @@ -48,7 +49,6 @@ import me.grishka.appkit.Nav; import me.grishka.appkit.api.APIRequest; import me.grishka.appkit.api.Callback; import me.grishka.appkit.api.ErrorResponse; -import me.grishka.appkit.fragments.BaseRecyclerFragment; import me.grishka.appkit.imageloader.ImageLoaderRecyclerAdapter; import me.grishka.appkit.imageloader.ImageLoaderViewHolder; import me.grishka.appkit.imageloader.requests.ImageLoaderRequest; @@ -57,7 +57,7 @@ import me.grishka.appkit.utils.BindableViewHolder; import me.grishka.appkit.utils.V; import me.grishka.appkit.views.UsableRecyclerView; -public abstract class BaseAccountListFragment extends BaseRecyclerFragment{ +public abstract class BaseAccountListFragment extends RecyclerFragment { protected HashMap relationships=new HashMap<>(); protected String accountID; protected ArrayList> relationshipsRequests=new ArrayList<>(); 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 c89c5c0b1..ae26e50e3 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 @@ -17,6 +17,7 @@ import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships; import org.joinmastodon.android.api.requests.accounts.GetFollowSuggestions; import org.joinmastodon.android.fragments.IsOnTop; import org.joinmastodon.android.fragments.ProfileFragment; +import org.joinmastodon.android.fragments.RecyclerFragment; import org.joinmastodon.android.fragments.ScrollableToTop; import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.FollowSuggestion; @@ -40,7 +41,6 @@ import me.grishka.appkit.Nav; import me.grishka.appkit.api.Callback; import me.grishka.appkit.api.ErrorResponse; import me.grishka.appkit.api.SimpleCallback; -import me.grishka.appkit.fragments.BaseRecyclerFragment; import me.grishka.appkit.imageloader.ImageLoaderRecyclerAdapter; import me.grishka.appkit.imageloader.ImageLoaderViewHolder; import me.grishka.appkit.imageloader.requests.ImageLoaderRequest; @@ -49,7 +49,7 @@ import me.grishka.appkit.utils.BindableViewHolder; import me.grishka.appkit.utils.V; import me.grishka.appkit.views.UsableRecyclerView; -public class DiscoverAccountsFragment extends BaseRecyclerFragment implements ScrollableToTop, IsOnTop { +public class DiscoverAccountsFragment extends RecyclerFragment implements ScrollableToTop, IsOnTop { private String accountID; private Map relationships=Collections.emptyMap(); private GetAccountRelationships relationshipsRequest; diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverNewsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverNewsFragment.java index 10a3a77dd..c0e66d312 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverNewsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverNewsFragment.java @@ -11,6 +11,7 @@ import android.widget.TextView; import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.trends.GetTrendingLinks; import org.joinmastodon.android.fragments.IsOnTop; +import org.joinmastodon.android.fragments.RecyclerFragment; import org.joinmastodon.android.fragments.ScrollableToTop; import org.joinmastodon.android.model.Card; import org.joinmastodon.android.ui.DividerItemDecoration; @@ -26,7 +27,6 @@ import java.util.stream.Collectors; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import me.grishka.appkit.api.SimpleCallback; -import me.grishka.appkit.fragments.BaseRecyclerFragment; import me.grishka.appkit.imageloader.ImageLoaderRecyclerAdapter; import me.grishka.appkit.imageloader.ImageLoaderViewHolder; import me.grishka.appkit.imageloader.requests.ImageLoaderRequest; @@ -35,7 +35,7 @@ import me.grishka.appkit.utils.BindableViewHolder; import me.grishka.appkit.utils.V; import me.grishka.appkit.views.UsableRecyclerView; -public class DiscoverNewsFragment extends BaseRecyclerFragment implements ScrollableToTop, IsOnTop { +public class DiscoverNewsFragment extends RecyclerFragment implements ScrollableToTop, IsOnTop { private String accountID; private List imageRequests=Collections.emptyList(); private DiscoverInfoBannerHelper bannerHelper=new DiscoverInfoBannerHelper(DiscoverInfoBannerHelper.BannerType.TRENDING_LINKS); 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 01c98c615..80ae96697 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 @@ -8,6 +8,7 @@ import android.widget.TextView; import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.trends.GetTrendingHashtags; import org.joinmastodon.android.fragments.IsOnTop; +import org.joinmastodon.android.fragments.RecyclerFragment; import org.joinmastodon.android.fragments.ScrollableToTop; import org.joinmastodon.android.model.Hashtag; import org.joinmastodon.android.ui.DividerItemDecoration; @@ -20,11 +21,10 @@ import java.util.List; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import me.grishka.appkit.api.SimpleCallback; -import me.grishka.appkit.fragments.BaseRecyclerFragment; import me.grishka.appkit.utils.BindableViewHolder; import me.grishka.appkit.views.UsableRecyclerView; -public class TrendingHashtagsFragment extends BaseRecyclerFragment implements ScrollableToTop, IsOnTop { +public class TrendingHashtagsFragment extends RecyclerFragment implements ScrollableToTop, IsOnTop { private String accountID; private DiscoverInfoBannerHelper bannerHelper=new DiscoverInfoBannerHelper(DiscoverInfoBannerHelper.BannerType.TRENDING_HASHTAGS); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/InstanceCatalogFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/InstanceCatalogFragment.java index 99c9a7478..ed7981c15 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/InstanceCatalogFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/InstanceCatalogFragment.java @@ -17,6 +17,7 @@ import org.joinmastodon.android.R; import org.joinmastodon.android.api.MastodonAPIController; import org.joinmastodon.android.api.MastodonErrorResponse; import org.joinmastodon.android.api.requests.instance.GetInstance; +import org.joinmastodon.android.fragments.RecyclerFragment; import org.joinmastodon.android.model.Instance; import org.joinmastodon.android.model.catalog.CatalogInstance; import org.joinmastodon.android.ui.M3AlertDialogBuilder; @@ -44,7 +45,6 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import me.grishka.appkit.api.Callback; import me.grishka.appkit.api.ErrorResponse; -import me.grishka.appkit.fragments.BaseRecyclerFragment; import me.grishka.appkit.utils.BindableViewHolder; import me.grishka.appkit.utils.MergeRecyclerAdapter; import me.grishka.appkit.utils.V; @@ -52,7 +52,7 @@ import okhttp3.Call; import okhttp3.Request; import okhttp3.Response; -abstract class InstanceCatalogFragment extends BaseRecyclerFragment{ +abstract class InstanceCatalogFragment extends RecyclerFragment { protected RecyclerView.Adapter adapter; protected MergeRecyclerAdapter mergeAdapter; protected CatalogInstance chosenInstance; @@ -75,7 +75,7 @@ abstract class InstanceCatalogFragment extends BaseRecyclerFragment{ +public class OnboardingFollowSuggestionsFragment extends RecyclerFragment { private String accountID; private Map relationships=Collections.emptyMap(); private GetAccountRelationships relationshipsRequest; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java index 9662ace45..975fef86e 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java @@ -338,12 +338,21 @@ public class UiUtils { } public static int getThemeColor(Context context, @AttrRes int attr) { + if (context == null) return 0xff00ff00; TypedArray ta = context.obtainStyledAttributes(new int[]{attr}); int color = ta.getColor(0, 0xff00ff00); ta.recycle(); return color; } + public static int getThemeColorRes(Context context, @AttrRes int attr) { + if (context == null) return 0xff00ff00; + TypedArray ta = context.obtainStyledAttributes(new int[]{attr}); + int color = ta.getResourceId(0, R.color.black); + ta.recycle(); + return color; + } + public static void openProfileByID(Context context, String selfID, String id) { Bundle args = new Bundle(); args.putString("account", selfID);