From 461eac8932c63c92debb3d37a97225ac2f3c9594 Mon Sep 17 00:00:00 2001 From: Grishka Date: Wed, 26 Jun 2024 20:24:32 +0300 Subject: [PATCH 1/4] Support multiple authors in link cards (mastodon/mastodon#30846) --- .../org/joinmastodon/android/model/Card.java | 21 +++++++++++++++++++ .../model/viewmodel/CardViewModel.java | 15 +++++++++---- .../ui/viewholders/LinkCardHolder.java | 11 ++++++---- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Card.java b/mastodon/src/main/java/org/joinmastodon/android/model/Card.java index cda53f477..6e111b928 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Card.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Card.java @@ -37,6 +37,7 @@ public class Card extends BaseModel{ public List history; public Instant publishedAt; public Account authorAccount; + public List authors; public transient Drawable blurhashPlaceholder; @@ -52,6 +53,11 @@ public class Card extends BaseModel{ } if(authorAccount!=null) authorAccount.postprocess(); + if(authors!=null){ + for(Author a:authors){ + a.postprocess(); + } + } } @Override @@ -85,4 +91,19 @@ public class Card extends BaseModel{ @SerializedName("rich") RICH } + + @Parcel + public static class Author extends BaseModel{ + @RequiredField + public String name; + public String url; + public Account account; + + @Override + public void postprocess() throws ObjectValidationException{ + super.postprocess(); + if(account!=null) + account.postprocess(); + } + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/viewmodel/CardViewModel.java b/mastodon/src/main/java/org/joinmastodon/android/model/viewmodel/CardViewModel.java index ba2db9e3e..c1db2c1e6 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/viewmodel/CardViewModel.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/viewmodel/CardViewModel.java @@ -5,6 +5,7 @@ import android.text.TextUtils; import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.api.session.AccountSessionManager; +import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Card; import org.joinmastodon.android.ui.text.HtmlParser; import org.joinmastodon.android.ui.utils.CustomEmojiHelper; @@ -26,12 +27,18 @@ public class CardViewModel{ this.parentObject=parentObject; this.imageRequest=TextUtils.isEmpty(card.image) ? null : new UrlImageLoaderRequest(card.image, V.dp(width), V.dp(height)); - if(card.authorAccount!=null){ - parsedAuthorName=new SpannableStringBuilder(card.authorAccount.displayName); + Account authorAccount; + if(card.authors!=null && !card.authors.isEmpty() && card.authors.get(0).account!=null) + authorAccount=card.authors.get(0).account; + else + authorAccount=card.authorAccount; + + if(authorAccount!=null){ + parsedAuthorName=new SpannableStringBuilder(authorAccount.displayName); if(AccountSessionManager.get(accountID).getLocalPreferences().customEmojiInNames) - HtmlParser.parseCustomEmoji(parsedAuthorName, card.authorAccount.emojis); + HtmlParser.parseCustomEmoji(parsedAuthorName, authorAccount.emojis); authorNameEmojiHelper.setText(parsedAuthorName); - authorAvaRequest=new UrlImageLoaderRequest(GlobalUserPreferences.playGifs ? card.authorAccount.avatar : card.authorAccount.avatarStatic, V.dp(50), V.dp(50)); + authorAvaRequest=new UrlImageLoaderRequest(GlobalUserPreferences.playGifs ? authorAccount.avatar : authorAccount.avatarStatic, V.dp(50), V.dp(50)); }else{ parsedAuthorName=null; authorAvaRequest=null; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/viewholders/LinkCardHolder.java b/mastodon/src/main/java/org/joinmastodon/android/ui/viewholders/LinkCardHolder.java index ece3255e8..84479410b 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/viewholders/LinkCardHolder.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/viewholders/LinkCardHolder.java @@ -14,6 +14,7 @@ import android.widget.TextView; import org.joinmastodon.android.R; import org.joinmastodon.android.fragments.ProfileFragment; +import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Card; import org.joinmastodon.android.model.viewmodel.CardViewModel; import org.joinmastodon.android.ui.OutlineProviders; @@ -86,7 +87,9 @@ public class LinkCardHolder extends S } String cardDomain=HtmlParser.normalizeDomain(Objects.requireNonNull(Uri.parse(card.url).getHost())); domain.setText(TextUtils.isEmpty(card.providerName) ? cardDomain : card.providerName); - if(card.authorAccount!=null){ + String authorName=card.authors!=null && !card.authors.isEmpty() ? card.authors.get(0).name : null; + + if(cardVM.parsedAuthorName!=null){ authorFooter.setVisibility(View.VISIBLE); authorChip.setVisibility(View.VISIBLE); authorBefore.setVisibility(View.VISIBLE); @@ -102,15 +105,15 @@ public class LinkCardHolder extends S authorAfter.setVisibility(View.VISIBLE); authorAfter.setText(after); } - authorName.setText(cardVM.parsedAuthorName); + this.authorName.setText(cardVM.parsedAuthorName); authorBefore.setCompoundDrawablesRelative(logoIcon, null, null, null); - }else if(!TextUtils.isEmpty(card.authorName)){ + }else if(!TextUtils.isEmpty(authorName)){ authorFooter.setVisibility(View.VISIBLE); authorBefore.setVisibility(View.VISIBLE); authorBefore.setCompoundDrawables(null, null, null, null); authorChip.setVisibility(View.GONE); authorAfter.setVisibility(View.GONE); - authorBefore.setText(itemView.getContext().getString(R.string.article_by_author, card.authorName)); + authorBefore.setText(itemView.getContext().getString(R.string.article_by_author, authorName)); }else{ authorFooter.setVisibility(View.GONE); } From 65c1b4def088ba001934e5f66bcfb78b87045050 Mon Sep 17 00:00:00 2001 From: Grishka Date: Wed, 26 Jun 2024 20:27:10 +0300 Subject: [PATCH 2/4] oops --- .../org/joinmastodon/android/ui/viewholders/LinkCardHolder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/viewholders/LinkCardHolder.java b/mastodon/src/main/java/org/joinmastodon/android/ui/viewholders/LinkCardHolder.java index 84479410b..12b801c73 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/viewholders/LinkCardHolder.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/viewholders/LinkCardHolder.java @@ -87,7 +87,7 @@ public class LinkCardHolder extends S } String cardDomain=HtmlParser.normalizeDomain(Objects.requireNonNull(Uri.parse(card.url).getHost())); domain.setText(TextUtils.isEmpty(card.providerName) ? cardDomain : card.providerName); - String authorName=card.authors!=null && !card.authors.isEmpty() ? card.authors.get(0).name : null; + String authorName=card.authors!=null && !card.authors.isEmpty() ? card.authors.get(0).name : card.authorName; if(cardVM.parsedAuthorName!=null){ authorFooter.setVisibility(View.VISIBLE); From 1e729d97a02ba7710dd48865cb130dc8cabb658a Mon Sep 17 00:00:00 2001 From: Grishka Date: Sat, 29 Jun 2024 09:11:03 +0300 Subject: [PATCH 3/4] Crash fixes --- .../java/org/joinmastodon/android/GlobalUserPreferences.java | 2 +- .../joinmastodon/android/api/session/AccountSessionManager.java | 2 +- .../org/joinmastodon/android/fragments/ComposeFragment.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java index 7be513f96..7f204b6e2 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java +++ b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java @@ -10,7 +10,7 @@ public class GlobalUserPreferences{ public static boolean playGifs; public static boolean useCustomTabs; public static boolean altTextReminders, confirmUnfollow, confirmBoost, confirmDeletePost; - public static ThemePreference theme; + public static ThemePreference theme=ThemePreference.AUTO; private static SharedPreferences getPrefs(){ return MastodonApp.context.getSharedPreferences("global", Context.MODE_PRIVATE); diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSessionManager.java b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSessionManager.java index bdcd58c55..b108baa72 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSessionManager.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSessionManager.java @@ -94,7 +94,7 @@ public class AccountSessionManager{ Log.e(TAG, "Error loading accounts", x); } lastActiveAccountID=prefs.getString("lastActiveAccount", null); - MastodonAPIController.runInBackground(()->readInstanceInfo(domains)); + readInstanceInfo(domains); maybeUpdateShortcuts(); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java index b05ecc094..8a12b5f17 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -544,7 +544,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements ComposeE ignoreSelectionChanges=true; mainEditText.setSelection(mainEditText.length()); ignoreSelectionChanges=false; - mediaViewController.onViewCreated(savedInstanceState);; + mediaViewController.onViewCreated(savedInstanceState); }else{ String prefilledText=getArguments().getString("prefilledText"); if(!TextUtils.isEmpty(prefilledText)){ From 482b7d5e7deb71613d62852fc3ed819540070ed4 Mon Sep 17 00:00:00 2001 From: Grishka Date: Sat, 29 Jun 2024 09:13:05 +0300 Subject: [PATCH 4/4] Don't show "this post is old" for own posts --- .../joinmastodon/android/fragments/BaseStatusListFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 aa30c27a0..2fa2c3a1f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -666,7 +666,7 @@ public abstract class BaseStatusListFragment exten proceed.run(); }, status.account, accountID).show(); }else if(!GlobalUserPreferences.isOptedOutOfPreReplySheet(GlobalUserPreferences.PreReplySheetType.OLD_POST, null, null) && - status.createdAt.isBefore(Instant.now().minus(90, ChronoUnit.DAYS))){ + status.createdAt.isBefore(Instant.now().minus(90, ChronoUnit.DAYS)) && !status.account.id.equals(AccountSessionManager.get(accountID).self.id)){ new OldPostPreReplySheet(getActivity(), notAgain->{ if(notAgain) GlobalUserPreferences.optOutOfPreReplySheet(GlobalUserPreferences.PreReplySheetType.OLD_POST, null, null);