From 74f2bb47070a1c08950a54a8af642eed63229b16 Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Thu, 13 Apr 2023 16:08:26 -0300 Subject: [PATCH 01/12] feat: add remote lookups to the PaginatedAccountListFragment --- .../account_list/FollowerListFragment.java | 15 +++ .../account_list/FollowingListFragment.java | 14 +++ .../PaginatedAccountListFragment.java | 97 ++++++++++++++++--- .../StatusFavoritesListFragment.java | 15 +++ .../StatusReblogsListFragment.java | 14 +++ 5 files changed, 143 insertions(+), 12 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowerListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowerListFragment.java index 1a7b3c8e2..f35c8a337 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowerListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowerListFragment.java @@ -6,6 +6,7 @@ import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.HeaderPaginationRequest; import org.joinmastodon.android.api.requests.accounts.GetAccountFollowers; import org.joinmastodon.android.model.Account; +import org.joinmastodon.android.model.Status; public class FollowerListFragment extends AccountRelatedAccountListFragment{ @@ -15,8 +16,22 @@ public class FollowerListFragment extends AccountRelatedAccountListFragment{ setSubtitle(getResources().getQuantityString(R.plurals.x_followers, (int)(account.followersCount%1000), account.followersCount)); } + @Override + public Account getTargetAccount(){ + return account; + } + @Override + public Status getTargetStatus(){ + return null; + } + @Override public HeaderPaginationRequest onCreateRequest(String maxID, int count){ return new GetAccountFollowers(account.id, maxID, count); } + + @Override + public HeaderPaginationRequest onCreateRemoteRequest(String id, String maxID, int count){ + return new GetAccountFollowers(id, maxID, count); + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowingListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowingListFragment.java index 83351e751..e4339e1f1 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowingListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowingListFragment.java @@ -6,6 +6,7 @@ import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.HeaderPaginationRequest; import org.joinmastodon.android.api.requests.accounts.GetAccountFollowing; import org.joinmastodon.android.model.Account; +import org.joinmastodon.android.model.Status; public class FollowingListFragment extends AccountRelatedAccountListFragment{ @@ -14,9 +15,22 @@ public class FollowingListFragment extends AccountRelatedAccountListFragment{ super.onCreate(savedInstanceState); setSubtitle(getResources().getQuantityString(R.plurals.x_following, (int)(account.followingCount%1000), account.followingCount)); } + @Override + public Account getTargetAccount(){ + return account; + } + @Override + public Status getTargetStatus(){ + return null; + } @Override public HeaderPaginationRequest onCreateRequest(String maxID, int count){ return new GetAccountFollowing(account.id, maxID, count); } + + @Override + public HeaderPaginationRequest onCreateRemoteRequest(String id, String maxID, int count){ + return new GetAccountFollowing(id, maxID, count); + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java index 5b34019f1..7195981df 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java @@ -1,33 +1,106 @@ package org.joinmastodon.android.fragments.account_list; +import android.app.Activity; +import android.widget.Toast; + +import org.joinmastodon.android.GlobalUserPreferences; +import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.HeaderPaginationRequest; +import org.joinmastodon.android.api.requests.search.GetSearchResults; import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.HeaderPaginationList; +import org.joinmastodon.android.model.SearchResults; +import org.joinmastodon.android.model.Status; +import org.joinmastodon.android.ui.utils.UiUtils; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; +import me.grishka.appkit.api.Callback; +import me.grishka.appkit.api.ErrorResponse; import me.grishka.appkit.api.SimpleCallback; public abstract class PaginatedAccountListFragment extends BaseAccountListFragment{ private String nextMaxID; + public abstract Status getTargetStatus(); + + public abstract Account getTargetAccount(); + + public abstract HeaderPaginationRequest onCreateRemoteRequest(String id, String maxID, int count); + public abstract HeaderPaginationRequest onCreateRequest(String maxID, int count); @Override protected void doLoadData(int offset, int count){ - currentRequest=onCreateRequest(offset==0 ? null : nextMaxID, count) - .setCallback(new SimpleCallback<>(this){ - @Override - public void onSuccess(HeaderPaginationList result){ - if(result.nextPageUri!=null) - nextMaxID=result.nextPageUri.getQueryParameter("max_id"); - else - nextMaxID=null; - if (getActivity() == null) return; - onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); + if(!GlobalUserPreferences.relocatePublishButton){ + currentRequest=onCreateRequest(offset==0 ? null : nextMaxID, count) + .setCallback(new SimpleCallback<>(this){ + @Override + public void onSuccess(HeaderPaginationList result){ + if(result.nextPageUri!=null) + nextMaxID=result.nextPageUri.getQueryParameter("max_id"); + else + nextMaxID=null; + if (getActivity() == null) return; + onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); + } + }) + .exec(accountID); + } else { + Status targetStatus = getTargetStatus(); + Account targetAccount = getTargetAccount(); + + if(targetAccount != null){ + UiUtils.lookupRemoteAccount(getContext(), targetAccount, accountID, null, account -> { + Pattern pattern = Pattern.compile("(?<=\\/\\/)([^\\/]+)(?=\\/@)"); + Matcher matcher = pattern.matcher(account.url); + String domain = null; + if(matcher.find()){ + domain = matcher.group(1); } - }) - .exec(accountID); + currentRequest=onCreateRemoteRequest(account.id, offset==0 ? null : nextMaxID, count) + .setCallback(new SimpleCallback<>(this) { + @Override + public void onSuccess(HeaderPaginationList result) { + if(result.nextPageUri!=null) + nextMaxID=result.nextPageUri.getQueryParameter("max_id"); + else + nextMaxID=null; + if (getActivity() == null) return; + onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); + } + }).execNoAuth(domain); + }); + return; + } + + if(targetStatus != null){ + UiUtils.lookupRemoteStatus(getContext(), targetStatus, accountID, null, status -> { + Pattern pattern = Pattern.compile("(?<=\\/\\/)([^\\/]+)(?=\\/@)"); + Matcher matcher = pattern.matcher(status.url); + String domain = null; + if(matcher.find()){ + domain = matcher.group(1); + } + currentRequest=onCreateRemoteRequest(status.id, offset==0 ? null : nextMaxID, count) + .setCallback(new SimpleCallback<>(this) { + @Override + public void onSuccess(HeaderPaginationList result) { + if(result.nextPageUri!=null) + nextMaxID=result.nextPageUri.getQueryParameter("max_id"); + else + nextMaxID=null; + if (getActivity() == null) return; + onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); + } + }).execNoAuth(domain); + }); + } + } + } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusFavoritesListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusFavoritesListFragment.java index f62e40ac5..4c7db70a7 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusFavoritesListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusFavoritesListFragment.java @@ -6,6 +6,7 @@ import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.HeaderPaginationRequest; import org.joinmastodon.android.api.requests.statuses.GetStatusFavorites; import org.joinmastodon.android.model.Account; +import org.joinmastodon.android.model.Status; public class StatusFavoritesListFragment extends StatusRelatedAccountListFragment{ @Override @@ -14,8 +15,22 @@ public class StatusFavoritesListFragment extends StatusRelatedAccountListFragmen setTitle(getResources().getQuantityString(R.plurals.x_favorites, (int)(status.favouritesCount%1000), status.favouritesCount)); } + @Override + public Account getTargetAccount(){ + return null; + } + @Override + public Status getTargetStatus(){ + return status; + } + @Override public HeaderPaginationRequest onCreateRequest(String maxID, int count){ return new GetStatusFavorites(status.id, maxID, count); } + + @Override + public HeaderPaginationRequest onCreateRemoteRequest(String id, String maxID, int count){ + return new GetStatusFavorites(id, maxID, count); + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusReblogsListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusReblogsListFragment.java index 6d494e198..7a11d8667 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusReblogsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusReblogsListFragment.java @@ -6,6 +6,7 @@ import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.HeaderPaginationRequest; import org.joinmastodon.android.api.requests.statuses.GetStatusReblogs; import org.joinmastodon.android.model.Account; +import org.joinmastodon.android.model.Status; public class StatusReblogsListFragment extends StatusRelatedAccountListFragment{ @Override @@ -14,8 +15,21 @@ public class StatusReblogsListFragment extends StatusRelatedAccountListFragment{ setTitle(getResources().getQuantityString(R.plurals.x_reblogs, (int)(status.reblogsCount%1000), status.reblogsCount)); } + @Override + public Account getTargetAccount(){ + return null; + } + @Override + public Status getTargetStatus(){ + return status; + } @Override public HeaderPaginationRequest onCreateRequest(String maxID, int count){ return new GetStatusReblogs(status.id, maxID, count); } + + @Override + public HeaderPaginationRequest onCreateRemoteRequest(String id, String maxID, int count){ + return new GetStatusReblogs(id, maxID, count); + } } From fb02689c302972f516e286e6fd1fd1dcaff0c3b3 Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Sun, 16 Apr 2023 14:13:25 -0300 Subject: [PATCH 02/12] Revert "feat: add remote lookups to the PaginatedAccountListFragment" This reverts commit 74f2bb47070a1c08950a54a8af642eed63229b16. --- .../account_list/FollowerListFragment.java | 15 --- .../account_list/FollowingListFragment.java | 14 --- .../PaginatedAccountListFragment.java | 97 +++---------------- .../StatusFavoritesListFragment.java | 15 --- .../StatusReblogsListFragment.java | 14 --- 5 files changed, 12 insertions(+), 143 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowerListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowerListFragment.java index f35c8a337..1a7b3c8e2 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowerListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowerListFragment.java @@ -6,7 +6,6 @@ import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.HeaderPaginationRequest; import org.joinmastodon.android.api.requests.accounts.GetAccountFollowers; import org.joinmastodon.android.model.Account; -import org.joinmastodon.android.model.Status; public class FollowerListFragment extends AccountRelatedAccountListFragment{ @@ -16,22 +15,8 @@ public class FollowerListFragment extends AccountRelatedAccountListFragment{ setSubtitle(getResources().getQuantityString(R.plurals.x_followers, (int)(account.followersCount%1000), account.followersCount)); } - @Override - public Account getTargetAccount(){ - return account; - } - @Override - public Status getTargetStatus(){ - return null; - } - @Override public HeaderPaginationRequest onCreateRequest(String maxID, int count){ return new GetAccountFollowers(account.id, maxID, count); } - - @Override - public HeaderPaginationRequest onCreateRemoteRequest(String id, String maxID, int count){ - return new GetAccountFollowers(id, maxID, count); - } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowingListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowingListFragment.java index e4339e1f1..83351e751 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowingListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowingListFragment.java @@ -6,7 +6,6 @@ import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.HeaderPaginationRequest; import org.joinmastodon.android.api.requests.accounts.GetAccountFollowing; import org.joinmastodon.android.model.Account; -import org.joinmastodon.android.model.Status; public class FollowingListFragment extends AccountRelatedAccountListFragment{ @@ -15,22 +14,9 @@ public class FollowingListFragment extends AccountRelatedAccountListFragment{ super.onCreate(savedInstanceState); setSubtitle(getResources().getQuantityString(R.plurals.x_following, (int)(account.followingCount%1000), account.followingCount)); } - @Override - public Account getTargetAccount(){ - return account; - } - @Override - public Status getTargetStatus(){ - return null; - } @Override public HeaderPaginationRequest onCreateRequest(String maxID, int count){ return new GetAccountFollowing(account.id, maxID, count); } - - @Override - public HeaderPaginationRequest onCreateRemoteRequest(String id, String maxID, int count){ - return new GetAccountFollowing(id, maxID, count); - } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java index 7195981df..5b34019f1 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java @@ -1,106 +1,33 @@ package org.joinmastodon.android.fragments.account_list; -import android.app.Activity; -import android.widget.Toast; - -import org.joinmastodon.android.GlobalUserPreferences; -import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.HeaderPaginationRequest; -import org.joinmastodon.android.api.requests.search.GetSearchResults; import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.HeaderPaginationList; -import org.joinmastodon.android.model.SearchResults; -import org.joinmastodon.android.model.Status; -import org.joinmastodon.android.ui.utils.UiUtils; -import java.util.Optional; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import java.util.stream.Collectors; -import me.grishka.appkit.api.Callback; -import me.grishka.appkit.api.ErrorResponse; import me.grishka.appkit.api.SimpleCallback; public abstract class PaginatedAccountListFragment extends BaseAccountListFragment{ private String nextMaxID; - public abstract Status getTargetStatus(); - - public abstract Account getTargetAccount(); - - public abstract HeaderPaginationRequest onCreateRemoteRequest(String id, String maxID, int count); - public abstract HeaderPaginationRequest onCreateRequest(String maxID, int count); @Override protected void doLoadData(int offset, int count){ - if(!GlobalUserPreferences.relocatePublishButton){ - currentRequest=onCreateRequest(offset==0 ? null : nextMaxID, count) - .setCallback(new SimpleCallback<>(this){ - @Override - public void onSuccess(HeaderPaginationList result){ - if(result.nextPageUri!=null) - nextMaxID=result.nextPageUri.getQueryParameter("max_id"); - else - nextMaxID=null; - if (getActivity() == null) return; - onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); - } - }) - .exec(accountID); - } else { - Status targetStatus = getTargetStatus(); - Account targetAccount = getTargetAccount(); - - if(targetAccount != null){ - UiUtils.lookupRemoteAccount(getContext(), targetAccount, accountID, null, account -> { - Pattern pattern = Pattern.compile("(?<=\\/\\/)([^\\/]+)(?=\\/@)"); - Matcher matcher = pattern.matcher(account.url); - String domain = null; - if(matcher.find()){ - domain = matcher.group(1); + currentRequest=onCreateRequest(offset==0 ? null : nextMaxID, count) + .setCallback(new SimpleCallback<>(this){ + @Override + public void onSuccess(HeaderPaginationList result){ + if(result.nextPageUri!=null) + nextMaxID=result.nextPageUri.getQueryParameter("max_id"); + else + nextMaxID=null; + if (getActivity() == null) return; + onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); } - currentRequest=onCreateRemoteRequest(account.id, offset==0 ? null : nextMaxID, count) - .setCallback(new SimpleCallback<>(this) { - @Override - public void onSuccess(HeaderPaginationList result) { - if(result.nextPageUri!=null) - nextMaxID=result.nextPageUri.getQueryParameter("max_id"); - else - nextMaxID=null; - if (getActivity() == null) return; - onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); - } - }).execNoAuth(domain); - }); - return; - } - - if(targetStatus != null){ - UiUtils.lookupRemoteStatus(getContext(), targetStatus, accountID, null, status -> { - Pattern pattern = Pattern.compile("(?<=\\/\\/)([^\\/]+)(?=\\/@)"); - Matcher matcher = pattern.matcher(status.url); - String domain = null; - if(matcher.find()){ - domain = matcher.group(1); - } - currentRequest=onCreateRemoteRequest(status.id, offset==0 ? null : nextMaxID, count) - .setCallback(new SimpleCallback<>(this) { - @Override - public void onSuccess(HeaderPaginationList result) { - if(result.nextPageUri!=null) - nextMaxID=result.nextPageUri.getQueryParameter("max_id"); - else - nextMaxID=null; - if (getActivity() == null) return; - onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); - } - }).execNoAuth(domain); - }); - } - } - + }) + .exec(accountID); } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusFavoritesListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusFavoritesListFragment.java index 4c7db70a7..f62e40ac5 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusFavoritesListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusFavoritesListFragment.java @@ -6,7 +6,6 @@ import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.HeaderPaginationRequest; import org.joinmastodon.android.api.requests.statuses.GetStatusFavorites; import org.joinmastodon.android.model.Account; -import org.joinmastodon.android.model.Status; public class StatusFavoritesListFragment extends StatusRelatedAccountListFragment{ @Override @@ -15,22 +14,8 @@ public class StatusFavoritesListFragment extends StatusRelatedAccountListFragmen setTitle(getResources().getQuantityString(R.plurals.x_favorites, (int)(status.favouritesCount%1000), status.favouritesCount)); } - @Override - public Account getTargetAccount(){ - return null; - } - @Override - public Status getTargetStatus(){ - return status; - } - @Override public HeaderPaginationRequest onCreateRequest(String maxID, int count){ return new GetStatusFavorites(status.id, maxID, count); } - - @Override - public HeaderPaginationRequest onCreateRemoteRequest(String id, String maxID, int count){ - return new GetStatusFavorites(id, maxID, count); - } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusReblogsListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusReblogsListFragment.java index 7a11d8667..6d494e198 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusReblogsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusReblogsListFragment.java @@ -6,7 +6,6 @@ import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.HeaderPaginationRequest; import org.joinmastodon.android.api.requests.statuses.GetStatusReblogs; import org.joinmastodon.android.model.Account; -import org.joinmastodon.android.model.Status; public class StatusReblogsListFragment extends StatusRelatedAccountListFragment{ @Override @@ -15,21 +14,8 @@ public class StatusReblogsListFragment extends StatusRelatedAccountListFragment{ setTitle(getResources().getQuantityString(R.plurals.x_reblogs, (int)(status.reblogsCount%1000), status.reblogsCount)); } - @Override - public Account getTargetAccount(){ - return null; - } - @Override - public Status getTargetStatus(){ - return status; - } @Override public HeaderPaginationRequest onCreateRequest(String maxID, int count){ return new GetStatusReblogs(status.id, maxID, count); } - - @Override - public HeaderPaginationRequest onCreateRemoteRequest(String id, String maxID, int count){ - return new GetStatusReblogs(id, maxID, count); - } } From 7c8698521d0b685f797c32b9d42cdd2645cc62bb Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Sun, 16 Apr 2023 15:25:55 -0300 Subject: [PATCH 03/12] feat: add remote follower and following lookup Clicking the regenerated accounts wont do anything for now though --- .../android/GlobalUserPreferences.java | 3 + .../account_list/FollowerListFragment.java | 6 ++ .../account_list/FollowingListFragment.java | 6 ++ .../PaginatedAccountListFragment.java | 73 ++++++++++++++++--- .../StatusFavoritesListFragment.java | 5 ++ .../StatusReblogsListFragment.java | 5 ++ .../joinmastodon/android/model/Account.java | 3 +- .../android/ui/utils/UiUtils.java | 14 +++- 8 files changed, 101 insertions(+), 14 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java index 40c61e4b4..6f9d4a83b 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java +++ b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java @@ -53,6 +53,7 @@ public class GlobalUserPreferences{ public static boolean confirmBeforeReblog; public static boolean replyLineAboveHeader; public static boolean swapBookmarkWithBoostAction; + public static boolean loadRemoteAccountFollowers; public static String publishButtonText; public static ThemePreference theme; public static ColorPreference color; @@ -120,6 +121,7 @@ public class GlobalUserPreferences{ compactReblogReplyLine=prefs.getBoolean("compactReblogReplyLine", true); confirmBeforeReblog=prefs.getBoolean("confirmBeforeReblog", false); swapBookmarkWithBoostAction=prefs.getBoolean("swapBookmarkWithBoostAction", false); + loadRemoteAccountFollowers=prefs.getBoolean("loadRemoteAccountFollowers", true); publishButtonText=prefs.getString("publishButtonText", ""); theme=ThemePreference.values()[prefs.getInt("theme", 0)]; recentLanguages=fromJson(prefs.getString("recentLanguages", "{}"), recentLanguagesType, new HashMap<>()); @@ -178,6 +180,7 @@ public class GlobalUserPreferences{ .putBoolean("replyLineAboveHeader", replyLineAboveHeader) .putBoolean("confirmBeforeReblog", confirmBeforeReblog) .putBoolean("swapBookmarkWithBoostAction", swapBookmarkWithBoostAction) + .putBoolean("loadRemoteAccountFollowers", loadRemoteAccountFollowers) .putInt("theme", theme.ordinal()) .putString("color", color.name()) .putString("recentLanguages", gson.toJson(recentLanguages)) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowerListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowerListFragment.java index 1a7b3c8e2..9914af9c5 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowerListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowerListFragment.java @@ -12,6 +12,7 @@ public class FollowerListFragment extends AccountRelatedAccountListFragment{ @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); + targetAccount = account; setSubtitle(getResources().getQuantityString(R.plurals.x_followers, (int)(account.followersCount%1000), account.followersCount)); } @@ -19,4 +20,9 @@ public class FollowerListFragment extends AccountRelatedAccountListFragment{ public HeaderPaginationRequest onCreateRequest(String maxID, int count){ return new GetAccountFollowers(account.id, maxID, count); } + + @Override + public HeaderPaginationRequest onCreateRemoteRequest(String id, String maxID, int count){ + return new GetAccountFollowers(id, maxID, count); + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowingListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowingListFragment.java index 83351e751..33ca43734 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowingListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/FollowingListFragment.java @@ -12,6 +12,7 @@ public class FollowingListFragment extends AccountRelatedAccountListFragment{ @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); + targetAccount = account; setSubtitle(getResources().getQuantityString(R.plurals.x_following, (int)(account.followingCount%1000), account.followingCount)); } @@ -19,4 +20,9 @@ public class FollowingListFragment extends AccountRelatedAccountListFragment{ public HeaderPaginationRequest onCreateRequest(String maxID, int count){ return new GetAccountFollowing(account.id, maxID, count); } + + @Override + public HeaderPaginationRequest onCreateRemoteRequest(String id, String maxID, int count){ + return new GetAccountFollowing(id, maxID, count); + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java index 5b34019f1..1aacb4bb4 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java @@ -1,9 +1,15 @@ package org.joinmastodon.android.fragments.account_list; +import android.app.VoiceInteractor; + +import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.api.requests.HeaderPaginationRequest; import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.HeaderPaginationList; +import org.joinmastodon.android.ui.utils.UiUtils; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; import me.grishka.appkit.api.SimpleCallback; @@ -11,23 +17,66 @@ import me.grishka.appkit.api.SimpleCallback; public abstract class PaginatedAccountListFragment extends BaseAccountListFragment{ private String nextMaxID; + protected Account targetAccount; + public abstract HeaderPaginationRequest onCreateRequest(String maxID, int count); + public abstract HeaderPaginationRequest onCreateRemoteRequest(String id, String maxID, int count); + @Override protected void doLoadData(int offset, int count){ - currentRequest=onCreateRequest(offset==0 ? null : nextMaxID, count) - .setCallback(new SimpleCallback<>(this){ - @Override - public void onSuccess(HeaderPaginationList result){ - if(result.nextPageUri!=null) - nextMaxID=result.nextPageUri.getQueryParameter("max_id"); - else - nextMaxID=null; - if (getActivity() == null) return; - onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); + if(GlobalUserPreferences.loadRemoteAccountFollowers){ + if ((this instanceof FollowingListFragment || this instanceof FollowerListFragment) && targetAccount != null){ + UiUtils.lookupRemoteAccount(getContext(), targetAccount, accountID, null, account -> { + if(account != null){ + currentRequest=onCreateRemoteRequest(account.id, offset==0 ? null : nextMaxID, count) + .setCallback(new SimpleCallback<>(this){ + @Override + public void onSuccess(HeaderPaginationList result){ + if(result.nextPageUri!=null) + nextMaxID=result.nextPageUri.getQueryParameter("max_id"); + else + nextMaxID=null; + result.stream().forEach(account1 -> { + account1.reloadWhenClicked = true; + }); + if (getActivity() == null) return; + onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), false); + } + }) + .execNoAuth(targetAccount.getDomain()); + } else { + currentRequest=onCreateRequest(offset==0 ? null : nextMaxID, count) + .setCallback(new SimpleCallback<>(this){ + @Override + public void onSuccess(HeaderPaginationList result){ + if(result.nextPageUri!=null) + nextMaxID=result.nextPageUri.getQueryParameter("max_id"); + else + nextMaxID=null; + if (getActivity() == null) return; + onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); + } + }) + .exec(accountID); } - }) - .exec(accountID); + }); + } + } else { + currentRequest=onCreateRequest(offset==0 ? null : nextMaxID, count) + .setCallback(new SimpleCallback<>(this){ + @Override + public void onSuccess(HeaderPaginationList result){ + if(result.nextPageUri!=null) + nextMaxID=result.nextPageUri.getQueryParameter("max_id"); + else + nextMaxID=null; + if (getActivity() == null) return; + onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); + } + }) + .exec(accountID); + } } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusFavoritesListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusFavoritesListFragment.java index f62e40ac5..9e8f16430 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusFavoritesListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusFavoritesListFragment.java @@ -18,4 +18,9 @@ public class StatusFavoritesListFragment extends StatusRelatedAccountListFragmen public HeaderPaginationRequest onCreateRequest(String maxID, int count){ return new GetStatusFavorites(status.id, maxID, count); } + + @Override + public HeaderPaginationRequest onCreateRemoteRequest(String id, String maxID, int count) { + return null; + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusReblogsListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusReblogsListFragment.java index 6d494e198..229e64a13 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusReblogsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/StatusReblogsListFragment.java @@ -18,4 +18,9 @@ public class StatusReblogsListFragment extends StatusRelatedAccountListFragment{ public HeaderPaginationRequest onCreateRequest(String maxID, int count){ return new GetStatusReblogs(status.id, maxID, count); } + + @Override + public HeaderPaginationRequest onCreateRemoteRequest(String id, String maxID, int count) { + return null; + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Account.java b/mastodon/src/main/java/org/joinmastodon/android/model/Account.java index b4424e0a6..61db2914e 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Account.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Account.java @@ -134,8 +134,9 @@ public class Account extends BaseModel implements Searchable{ public Instant muteExpiresAt; public List roles; + public boolean reloadWhenClicked; - @Override + @Override public String getQuery() { return url; } 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 55aaaccc6..33a0a3184 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 @@ -1127,7 +1127,19 @@ public class UiUtils { return; } - new GetSearchResults(query.getQuery(), type, false).setCallback(new Callback<>() { + Pattern patternForQuery = Pattern.compile("https?:\\/\\/[^\\/]+\\/@(\\w+)"); + Matcher matcherForQuery = patternForQuery.matcher(query.getQuery()); + String trimmedQuery = null; + + if(matcherForQuery.find()){ + trimmedQuery = matcherForQuery.group(1); + } + + if(trimmedQuery == null){ + return; + } + + new GetSearchResults(trimmedQuery, type, false).setCallback(new Callback<>() { @Override public void onSuccess(SearchResults results) { Optional result = extractResult.apply(results); From 29267dacb4baa6c18f0ebbee8d4b274f8166a640 Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Sun, 16 Apr 2023 15:31:47 -0300 Subject: [PATCH 04/12] feat: add onClick lookup for remote accounts --- .../fragments/account_list/BaseAccountListFragment.java | 9 +++++++++ 1 file changed, 9 insertions(+) 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 4a247b0bf..bf8dd4c5b 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 @@ -267,6 +267,15 @@ public abstract class BaseAccountListFragment extends RecyclerFragment { + Bundle args=new Bundle(); + args.putString("account", accountID); + args.putParcelable("profileAccount", Parcels.wrap(account)); + Nav.go(getActivity(), ProfileFragment.class, args); + }); + return; + } Bundle args=new Bundle(); args.putString("account", accountID); args.putParcelable("profileAccount", Parcels.wrap(item.account)); From e1acfef1bf93ec7949259eea14748b03deb400bf Mon Sep 17 00:00:00 2001 From: FineFindus Date: Sun, 16 Apr 2023 21:00:07 +0200 Subject: [PATCH 05/12] refactor: use useful variable names --- .../account_list/PaginatedAccountListFragment.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java index 1aacb4bb4..a3bb0586d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java @@ -1,15 +1,11 @@ package org.joinmastodon.android.fragments.account_list; -import android.app.VoiceInteractor; - import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.api.requests.HeaderPaginationRequest; import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.HeaderPaginationList; import org.joinmastodon.android.ui.utils.UiUtils; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import java.util.stream.Collectors; import me.grishka.appkit.api.SimpleCallback; @@ -37,8 +33,8 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme nextMaxID=result.nextPageUri.getQueryParameter("max_id"); else nextMaxID=null; - result.stream().forEach(account1 -> { - account1.reloadWhenClicked = true; + result.stream().forEach(remoteAccount -> { + remoteAccount.reloadWhenClicked = true; }); if (getActivity() == null) return; onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), false); From 9d690e7670a82d4c1f5de19a030e23d3dd8125ad Mon Sep 17 00:00:00 2001 From: FineFindus Date: Sun, 16 Apr 2023 21:07:22 +0200 Subject: [PATCH 06/12] fix: own instance accounts not loading --- .../account_list/PaginatedAccountListFragment.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java index a3bb0586d..97da06083 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java @@ -1,5 +1,7 @@ package org.joinmastodon.android.fragments.account_list; +import android.net.Uri; + import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.api.requests.HeaderPaginationRequest; import org.joinmastodon.android.model.Account; @@ -24,7 +26,7 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme if(GlobalUserPreferences.loadRemoteAccountFollowers){ if ((this instanceof FollowingListFragment || this instanceof FollowerListFragment) && targetAccount != null){ UiUtils.lookupRemoteAccount(getContext(), targetAccount, accountID, null, account -> { - if(account != null){ + if(account != null && account.getDomain() != null){ currentRequest=onCreateRemoteRequest(account.id, offset==0 ? null : nextMaxID, count) .setCallback(new SimpleCallback<>(this){ @Override @@ -35,6 +37,9 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme nextMaxID=null; result.stream().forEach(remoteAccount -> { remoteAccount.reloadWhenClicked = true; + if (remoteAccount.getDomain() == null) { + remoteAccount.acct += "@" + Uri.parse(remoteAccount.url).getHost(); + } }); if (getActivity() == null) return; onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), false); From e4f4ca5392fe4b841769b30c0fc3676538d8e5ab Mon Sep 17 00:00:00 2001 From: FineFindus Date: Sun, 16 Apr 2023 21:13:20 +0200 Subject: [PATCH 07/12] refactor: move request to their own methods --- .../PaginatedAccountListFragment.java | 86 +++++++++---------- 1 file changed, 41 insertions(+), 45 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java index 97da06083..49cc5c6a8 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java @@ -27,59 +27,55 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme if ((this instanceof FollowingListFragment || this instanceof FollowerListFragment) && targetAccount != null){ UiUtils.lookupRemoteAccount(getContext(), targetAccount, accountID, null, account -> { if(account != null && account.getDomain() != null){ - currentRequest=onCreateRemoteRequest(account.id, offset==0 ? null : nextMaxID, count) - .setCallback(new SimpleCallback<>(this){ - @Override - public void onSuccess(HeaderPaginationList result){ - if(result.nextPageUri!=null) - nextMaxID=result.nextPageUri.getQueryParameter("max_id"); - else - nextMaxID=null; - result.stream().forEach(remoteAccount -> { - remoteAccount.reloadWhenClicked = true; - if (remoteAccount.getDomain() == null) { - remoteAccount.acct += "@" + Uri.parse(remoteAccount.url).getHost(); - } - }); - if (getActivity() == null) return; - onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), false); - } - }) - .execNoAuth(targetAccount.getDomain()); + loadRemoteFollower(offset, count, account); } else { - currentRequest=onCreateRequest(offset==0 ? null : nextMaxID, count) - .setCallback(new SimpleCallback<>(this){ - @Override - public void onSuccess(HeaderPaginationList result){ - if(result.nextPageUri!=null) - nextMaxID=result.nextPageUri.getQueryParameter("max_id"); - else - nextMaxID=null; - if (getActivity() == null) return; - onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); - } - }) - .exec(accountID); + loadFollower(offset, count); } }); } } else { - currentRequest=onCreateRequest(offset==0 ? null : nextMaxID, count) - .setCallback(new SimpleCallback<>(this){ - @Override - public void onSuccess(HeaderPaginationList result){ - if(result.nextPageUri!=null) - nextMaxID=result.nextPageUri.getQueryParameter("max_id"); - else - nextMaxID=null; - if (getActivity() == null) return; - onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); - } - }) - .exec(accountID); + loadFollower(offset, count); } } + void loadFollower(int offset, int count) { + currentRequest=onCreateRequest(offset==0 ? null : nextMaxID, count) + .setCallback(new SimpleCallback<>(this){ + @Override + public void onSuccess(HeaderPaginationList result){ + if(result.nextPageUri!=null) + nextMaxID=result.nextPageUri.getQueryParameter("max_id"); + else + nextMaxID=null; + if (getActivity() == null) return; + onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); + } + }) + .exec(accountID); + } + + private void loadRemoteFollower(int offset, int count, Account account) { + currentRequest=onCreateRemoteRequest(account.id, offset==0 ? null : nextMaxID, count) + .setCallback(new SimpleCallback<>(this){ + @Override + public void onSuccess(HeaderPaginationList result){ + if(result.nextPageUri!=null) + nextMaxID=result.nextPageUri.getQueryParameter("max_id"); + else + nextMaxID=null; + result.stream().forEach(remoteAccount -> { + remoteAccount.reloadWhenClicked = true; + if (remoteAccount.getDomain() == null) { + remoteAccount.acct += "@" + Uri.parse(remoteAccount.url).getHost(); + } + }); + if (getActivity() == null) return; + onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), false); + } + }) + .execNoAuth(targetAccount.getDomain()); + } + @Override public void onResume(){ super.onResume(); From 4da6016e06fcd2d0a146b0d94ba808b67dc9b3e6 Mon Sep 17 00:00:00 2001 From: FineFindus Date: Sun, 16 Apr 2023 21:19:24 +0200 Subject: [PATCH 08/12] refactor(follower): move null check in called method --- .../android/fragments/account_list/BaseAccountListFragment.java | 2 ++ .../fragments/account_list/PaginatedAccountListFragment.java | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) 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 bf8dd4c5b..357540ab5 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 @@ -74,6 +74,8 @@ public abstract class BaseAccountListFragment extends RecyclerFragment d, boolean more){ + if (getActivity() == null) + return; if(refreshing){ relationships.clear(); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java index 49cc5c6a8..10b265190 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java @@ -47,7 +47,6 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme nextMaxID=result.nextPageUri.getQueryParameter("max_id"); else nextMaxID=null; - if (getActivity() == null) return; onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); } }) @@ -69,7 +68,6 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme remoteAccount.acct += "@" + Uri.parse(remoteAccount.url).getHost(); } }); - if (getActivity() == null) return; onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), false); } }) From c3c76126a388e2e110a0d42c318629dfc4d4761d Mon Sep 17 00:00:00 2001 From: FineFindus Date: Sun, 16 Apr 2023 21:32:26 +0200 Subject: [PATCH 09/12] feat(follower): show own domain accounts as username --- .../PaginatedAccountListFragment.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java index 10b265190..67df4cef4 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java @@ -4,12 +4,16 @@ import android.net.Uri; import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.api.requests.HeaderPaginationRequest; +import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.HeaderPaginationList; import org.joinmastodon.android.ui.utils.UiUtils; +import java.util.Objects; import java.util.stream.Collectors; +import me.grishka.appkit.api.Callback; +import me.grishka.appkit.api.ErrorResponse; import me.grishka.appkit.api.SimpleCallback; public abstract class PaginatedAccountListFragment extends BaseAccountListFragment{ @@ -23,10 +27,10 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme @Override protected void doLoadData(int offset, int count){ - if(GlobalUserPreferences.loadRemoteAccountFollowers){ + if(GlobalUserPreferences.loadRemoteAccountFollowers && targetAccount.getDomain() != null){ if ((this instanceof FollowingListFragment || this instanceof FollowerListFragment) && targetAccount != null){ UiUtils.lookupRemoteAccount(getContext(), targetAccount, accountID, null, account -> { - if(account != null && account.getDomain() != null){ + if(account != null){ loadRemoteFollower(offset, count, account); } else { loadFollower(offset, count); @@ -54,8 +58,9 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme } private void loadRemoteFollower(int offset, int count, Account account) { + String ownDomain = AccountSessionManager.getInstance().getLastActiveAccount().domain; currentRequest=onCreateRemoteRequest(account.id, offset==0 ? null : nextMaxID, count) - .setCallback(new SimpleCallback<>(this){ + .setCallback(new Callback<>(){ @Override public void onSuccess(HeaderPaginationList result){ if(result.nextPageUri!=null) @@ -66,10 +71,18 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme remoteAccount.reloadWhenClicked = true; if (remoteAccount.getDomain() == null) { remoteAccount.acct += "@" + Uri.parse(remoteAccount.url).getHost(); + } else if (remoteAccount.getDomain().equals(ownDomain)) { + remoteAccount.acct = remoteAccount.username; } }); onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), false); } + + @Override + public void onError(ErrorResponse error) { + error.showToast(getContext()); + loadFollower(offset, count); + } }) .execNoAuth(targetAccount.getDomain()); } From ed75a6222845a84d09e4a0f0242b81b93fc5213f Mon Sep 17 00:00:00 2001 From: FineFindus Date: Sun, 16 Apr 2023 21:44:05 +0200 Subject: [PATCH 10/12] refactor(follower): move remote check to own method --- .../account_list/PaginatedAccountListFragment.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java index 67df4cef4..66566fc87 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java @@ -9,7 +9,6 @@ import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.HeaderPaginationList; import org.joinmastodon.android.ui.utils.UiUtils; -import java.util.Objects; import java.util.stream.Collectors; import me.grishka.appkit.api.Callback; @@ -27,8 +26,7 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme @Override protected void doLoadData(int offset, int count){ - if(GlobalUserPreferences.loadRemoteAccountFollowers && targetAccount.getDomain() != null){ - if ((this instanceof FollowingListFragment || this instanceof FollowerListFragment) && targetAccount != null){ + if (shouldLoadRemote()) { UiUtils.lookupRemoteAccount(getContext(), targetAccount, accountID, null, account -> { if(account != null){ loadRemoteFollower(offset, count, account); @@ -36,12 +34,18 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme loadFollower(offset, count); } }); - } } else { loadFollower(offset, count); } } + private boolean shouldLoadRemote() { + if (!GlobalUserPreferences.loadRemoteAccountFollowers && (this instanceof FollowingListFragment || this instanceof FollowerListFragment)) { + return false; + } + return targetAccount != null && targetAccount.getDomain() != null; + } + void loadFollower(int offset, int count) { currentRequest=onCreateRequest(offset==0 ? null : nextMaxID, count) .setCallback(new SimpleCallback<>(this){ From 1098c855c4d45135e022d7f11de1fd69433c5e74 Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Sun, 16 Apr 2023 18:07:49 -0300 Subject: [PATCH 11/12] fix: this fixes the bug where the app would only load 10-20 remote followers --- .../fragments/account_list/PaginatedAccountListFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java index 66566fc87..76ec7e7d1 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/account_list/PaginatedAccountListFragment.java @@ -79,7 +79,7 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme remoteAccount.acct = remoteAccount.username; } }); - onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), false); + onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); } @Override From 32da4f8e09292575ad3e7839119f39ad7a1cc838 Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Sun, 16 Apr 2023 18:27:29 -0300 Subject: [PATCH 12/12] feat: use targetAccount domain name in lookup dialog --- .../org/joinmastodon/android/ui/utils/UiUtils.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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 33a0a3184..e7e367379 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 @@ -1139,6 +1139,7 @@ public class UiUtils { return; } + String finalDomain = domain; new GetSearchResults(trimmedQuery, type, false).setCallback(new Callback<>() { @Override public void onSuccess(SearchResults results) { @@ -1156,7 +1157,7 @@ public class UiUtils { } }) .wrapProgress((Activity)context, R.string.loading, true, - d -> transformDialogForLookup(context, targetAccountID, null, d)) + d -> transformDialogForLookup(context, targetAccountID, null, d, finalDomain)) .execNoAuth(domain); } @@ -1164,9 +1165,13 @@ public class UiUtils { openURL(context, accountID, url, true); } - private static void transformDialogForLookup(Context context, String accountID, @Nullable String url, ProgressDialog dialog) { + private static void transformDialogForLookup(Context context, String accountID, @Nullable String url, ProgressDialog dialog){ + transformDialogForLookup(context, accountID, url, dialog, null); + } + + private static void transformDialogForLookup(Context context, String accountID, @Nullable String url, ProgressDialog dialog, @Nullable String instanceName) { if (accountID != null) { - dialog.setTitle(context.getString(R.string.sk_loading_resource_on_instance_title, getInstanceName(accountID))); + dialog.setTitle(context.getString(R.string.sk_loading_resource_on_instance_title, instanceName != null ? instanceName : getInstanceName(accountID))); } else { dialog.setTitle(R.string.sk_loading_fediverse_resource_title); }