From d121f14d30d5f620628a6ec6810a643caadecd84 Mon Sep 17 00:00:00 2001 From: Jacocococo Date: Mon, 12 Feb 2024 20:51:06 +0100 Subject: [PATCH] Non-square emoji in text views --- .../android/fragments/FollowRequestsListFragment.java | 4 ++-- .../joinmastodon/android/fragments/ProfileFragment.java | 5 +++-- .../fragments/discover/DiscoverAccountsFragment.java | 4 ++-- .../ui/displayitems/AccountCardStatusDisplayItem.java | 4 ++-- .../android/ui/displayitems/HeaderStatusDisplayItem.java | 2 +- .../NotificationHeaderStatusDisplayItem.java | 2 +- .../ui/displayitems/PollOptionStatusDisplayItem.java | 4 ++-- .../displayitems/ReblogOrReplyLineStatusDisplayItem.java | 4 ++-- .../ui/displayitems/SpoilerStatusDisplayItem.java | 2 +- .../android/ui/displayitems/TextStatusDisplayItem.java | 4 ++-- .../joinmastodon/android/ui/text/CustomEmojiSpan.java | 9 +++++---- .../java/org/joinmastodon/android/ui/utils/UiUtils.java | 5 ++--- .../android/ui/viewholders/AccountViewHolder.java | 4 ++-- 13 files changed, 27 insertions(+), 26 deletions(-) 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 52bdbf2b3..68804b4ad 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowRequestsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/FollowRequestsListFragment.java @@ -297,8 +297,8 @@ public class FollowRequestsListFragment extends MastodonRecyclerFragment=item.nameEmojis.length ? item.valueEmojis[index-item.nameEmojis.length] : item.nameEmojis[index]; span.setDrawable(image); - title.invalidate(); - value.invalidate(); + title.setText(title.getText()); + value.setText(value.getText()); + toolbarTitleView.setText(toolbarTitleView.getText()); } @Override 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 8c0192343..51a9e320c 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 @@ -279,8 +279,8 @@ public class DiscoverAccountsFragment extends MastodonRecyclerFragment0){ item.emojiHelper.setImageDrawable(index-1, drawable); - name.invalidate(); + name.setText(name.getText()); }else{ avatar.setImageDrawable(drawable); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java index 1f8e79fc7..bb90911fd 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java @@ -141,7 +141,7 @@ public class NotificationHeaderStatusDisplayItem extends StatusDisplayItem{ avatar.setImageDrawable(image); }else{ item.emojiHelper.setImageDrawable(index-1, image); - text.invalidate(); + text.setText(text.getText()); } if(image instanceof Animatable) ((Animatable) image).start(); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java index ee06e111f..1966c0fed 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java @@ -136,7 +136,7 @@ public class PollOptionStatusDisplayItem extends StatusDisplayItem{ @Override public void setImage(int index, Drawable image){ item.emojiHelper.setImageDrawable(index, image); - text.invalidate(); + text.setText(text.getText()); if(image instanceof Animatable){ ((Animatable) image).start(); } @@ -145,7 +145,7 @@ public class PollOptionStatusDisplayItem extends StatusDisplayItem{ @Override public void clearImage(int index){ item.emojiHelper.setImageDrawable(index, null); - text.invalidate(); + text.setText(text.getText()); } private void onButtonClick(View v){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ReblogOrReplyLineStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ReblogOrReplyLineStatusDisplayItem.java index 26779c663..d6d4eefb3 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ReblogOrReplyLineStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ReblogOrReplyLineStatusDisplayItem.java @@ -152,8 +152,8 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{ int firstHelperCount=item.emojiHelper.getImageCount(); CustomEmojiHelper helper=index0 ? index%firstHelperCount : index, image); - text.invalidate(); - extraText.invalidate(); + text.setText(text.getText()); + extraText.setText(extraText.getText()); } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SpoilerStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SpoilerStatusDisplayItem.java index 050988508..cbe013779 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SpoilerStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SpoilerStatusDisplayItem.java @@ -114,7 +114,7 @@ public class SpoilerStatusDisplayItem extends StatusDisplayItem{ @Override public void setImage(int index, Drawable image){ item.emojiHelper.setImageDrawable(index, image); - title.invalidate(); + title.setText(title.getText()); } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java index b846bd872..28dcc692d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java @@ -173,7 +173,7 @@ public class TextStatusDisplayItem extends StatusDisplayItem{ @Override public void setImage(int index, Drawable image){ getEmojiHelper().setImageDrawable(index, image); - text.invalidate(); + text.setText(text.getText()); if(image instanceof Animatable){ ((Animatable) image).start(); if(image instanceof MovieDrawable) @@ -184,7 +184,7 @@ public class TextStatusDisplayItem extends StatusDisplayItem{ @Override public void clearImage(int index){ getEmojiHelper().setImageDrawable(index, null); - text.invalidate(); + text.setText(text.getText()); } private CustomEmojiHelper getEmojiHelper(){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/text/CustomEmojiSpan.java b/mastodon/src/main/java/org/joinmastodon/android/ui/text/CustomEmojiSpan.java index c72ff8f8a..d29760f60 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/text/CustomEmojiSpan.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/text/CustomEmojiSpan.java @@ -24,7 +24,8 @@ public class CustomEmojiSpan extends ReplacementSpan{ @Override public int getSize(@NonNull Paint paint, CharSequence text, int start, int end, @Nullable Paint.FontMetricsInt fm){ - return Math.round(paint.descent()-paint.ascent()); + int size = Math.round(paint.descent()-paint.ascent()); + return drawable!=null ? (int) (drawable.getIntrinsicWidth()*(size/(float) drawable.getIntrinsicHeight())) : size; } @Override @@ -45,7 +46,8 @@ public class CustomEmojiSpan extends ReplacementSpan{ } canvas.save(); canvas.translate(x, top); - canvas.scale(size/(float)dw, size/(float)dh, 0f, 0f); + float scale = size/(float)dh; + canvas.scale(scale, scale, 0f, 0f); drawable.draw(canvas); canvas.restore(); } @@ -56,7 +58,6 @@ public class CustomEmojiSpan extends ReplacementSpan{ } public UrlImageLoaderRequest createImageLoaderRequest(){ - int size=V.dp(20); - return new UrlImageLoaderRequest(GlobalUserPreferences.playGifs ? emoji.url : emoji.staticUrl, size, size); + return new UrlImageLoaderRequest(GlobalUserPreferences.playGifs ? emoji.url : emoji.staticUrl); } } 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 82b13b21b..c38f34529 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 @@ -417,7 +417,6 @@ public class UiUtils { CustomEmojiSpan[] spans = text.getSpans(0, text.length(), CustomEmojiSpan.class); if (spans.length == 0) return; - int emojiSize = V.dp(20); Map> spansByEmoji = Arrays.stream(spans).collect(Collectors.groupingBy(s -> s.emoji)); for (Map.Entry> emoji : spansByEmoji.entrySet()) { ViewImageLoader.load(new ViewImageLoader.Target() { @@ -428,14 +427,14 @@ public class UiUtils { for (CustomEmojiSpan span : emoji.getValue()) { span.setDrawable(d); } - view.invalidate(); + view.setText(view.getText()); } @Override public View getView() { return view; } - }, null, new UrlImageLoaderRequest(emoji.getKey().url, emojiSize, emojiSize), null, false, true); + }, null, new UrlImageLoaderRequest(emoji.getKey().url), null, false, true); } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/viewholders/AccountViewHolder.java b/mastodon/src/main/java/org/joinmastodon/android/ui/viewholders/AccountViewHolder.java index 355d9f7cd..a18175f76 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/viewholders/AccountViewHolder.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/viewholders/AccountViewHolder.java @@ -185,8 +185,8 @@ public class AccountViewHolder extends BindableViewHolder impl avatar.setImageDrawable(image); }else{ item.emojiHelper.setImageDrawable(index-1, image); - name.invalidate(); - bio.invalidate(); + name.setText(name.getText()); + bio.setText(bio.getText()); } if(image instanceof Animatable a && !a.isRunning())