From 454ec6b4c0b29aca251c229a679c6206adf7bd31 Mon Sep 17 00:00:00 2001 From: Jacoco <63549689+Jacocococo@users.noreply.github.com> Date: Mon, 4 Sep 2023 22:24:17 +0200 Subject: [PATCH] Fix errors when some entries were missing when retrieving account information (#757) * Handle null avatar * Handle empty account --- .../android/api/session/AccountSession.java | 6 ++++ .../fragments/FollowRequestsListFragment.java | 7 ++-- .../fragments/NotificationsListFragment.java | 2 +- .../android/fragments/ProfileFragment.java | 7 ++-- .../discover/DiscoverAccountsFragment.java | 6 ++-- .../joinmastodon/android/model/Account.java | 33 ++++++++++++++----- .../model/viewmodel/AccountViewModel.java | 10 ++++-- .../AccountCardStatusDisplayItem.java | 8 +++-- .../displayitems/HeaderStatusDisplayItem.java | 10 ++++-- .../NotificationHeaderStatusDisplayItem.java | 8 ++++- 10 files changed, 74 insertions(+), 23 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSession.java b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSession.java index fa7a85eb1..c94c87c1a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSession.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSession.java @@ -313,4 +313,10 @@ public class AccountSession{ .authority(getInstance().map(i -> i.normalizedUri).orElse(domain)) .build(); } + + public String getDefaultAvatarUrl() { + return getInstance() + .map(instance->"https://"+domain+(instance.isAkkoma() ? "/images/avi.png" : "/avatars/original/missing.png")) + .orElse(""); + } } 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 87e9d28d8..d93c19fb3 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowRequestsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowRequestsListFragment.java @@ -17,8 +17,10 @@ import android.widget.TextView; import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships; import org.joinmastodon.android.api.requests.accounts.GetFollowRequests; +import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.HeaderPaginationList; +import org.joinmastodon.android.model.Instance; import org.joinmastodon.android.model.Relationship; import org.joinmastodon.android.ui.OutlineProviders; import org.joinmastodon.android.ui.text.HtmlParser; @@ -357,8 +359,9 @@ public class FollowRequestsListFragment extends MastodonRecyclerFragment items = new ArrayList<>(); items.add(titleItem); - items.add(new AccountCardStatusDisplayItem(n.id, this, n.account, n)); + items.add(new AccountCardStatusDisplayItem(n.id, this, accountID, n.account, n)); return items; } if(n.status!=null){ 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 3173ec0ab..951bd14c6 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -601,7 +601,10 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList private void bindHeaderView(){ setTitle(account.displayName); setSubtitle(getResources().getQuantityString(R.plurals.x_posts, (int)(account.statusesCount%1000), account.statusesCount)); - ViewImageLoader.load(avatar, null, new UrlImageLoaderRequest(GlobalUserPreferences.playGifs ? account.avatar : account.avatarStatic, V.dp(100), V.dp(100))); + ViewImageLoader.load(avatar, null, new UrlImageLoaderRequest( + TextUtils.isEmpty(account.avatar) ? getSession().getDefaultAvatarUrl() : + GlobalUserPreferences.playGifs ? account.avatar : account.avatarStatic, + V.dp(100), V.dp(100))); ViewImageLoader.load(cover, null, new UrlImageLoaderRequest(GlobalUserPreferences.playGifs ? account.header : account.headerStatic, 1000, 1000)); SpannableStringBuilder ssb=new SpannableStringBuilder(account.displayName); if(AccountSessionManager.get(accountID).getLocalPreferences().customEmojiInNames) @@ -1229,7 +1232,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList if(ava==null) return; int radius=V.dp(25); - currentPhotoViewer=new PhotoViewer(getActivity(), createFakeAttachments(account.avatar, ava), 0, + currentPhotoViewer=new PhotoViewer(getActivity(), createFakeAttachments(TextUtils.isEmpty(account.avatar) ? getSession().getDefaultAvatarUrl() : account.avatar, ava), 0, new SingleImagePhotoViewerListener(avatar, avatarBorder, new int[]{radius, radius, radius, radius}, this, ()->currentPhotoViewer=null, ()->ava, null, null)); } } 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 dff5d11e1..c58e3d5db 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 @@ -16,6 +16,7 @@ import android.widget.TextView; import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships; import org.joinmastodon.android.api.requests.accounts.GetFollowSuggestions; +import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.fragments.IsOnTop; import org.joinmastodon.android.fragments.MastodonRecyclerFragment; import org.joinmastodon.android.fragments.ProfileFragment; @@ -319,8 +320,9 @@ public class DiscoverAccountsFragment extends MastodonRecyclerFragment