From ba603851ff3748f1022498932ea50ba1d74e483f Mon Sep 17 00:00:00 2001 From: Jacocococo Date: Mon, 12 Feb 2024 20:51:06 +0100 Subject: [PATCH 1/3] 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 0750be8e47..a590f5b7fa 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 void setImage(int index, Drawable image){ cover.setImageDrawable(image); }else{ item.emojiHelper.setImageDrawable(index-2, image); - name.invalidate(); - bio.invalidate(); + name.setText(name.getText()); + bio.setText(bio.getText()); } if(image instanceof Animatable a && !a.isRunning()) a.start(); 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 3cd5bfa234..3ce5ffccbd 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -1618,8 +1618,9 @@ public void onBind(AccountField item){ public void setImage(int index, Drawable image){ CustomEmojiSpan span=index>=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 d7194bbf37..d660101900 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 void setImage(int index, Drawable image){ cover.setImageDrawable(image); }else{ item.emojiHelper.setImageDrawable(index-2, image); - name.invalidate(); - bio.invalidate(); + name.setText(name.getText()); + bio.setText(bio.getText()); } if(image instanceof Animatable a && !a.isRunning()) a.start(); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/AccountCardStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/AccountCardStatusDisplayItem.java index fd753ef77d..a13aa235dc 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/AccountCardStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/AccountCardStatusDisplayItem.java @@ -212,8 +212,8 @@ public void setImage(int index, Drawable image){ cover.setImageDrawable(image); }else{ item.emojiHelper.setImageDrawable(index-2, image); - name.invalidate(); - bio.invalidate(); + name.setText(name.getText()); + bio.setText(bio.getText()); } if(image instanceof Animatable && !((Animatable) image).isRunning()) ((Animatable) image).start(); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java index 0d346608cf..d0095754db 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java @@ -414,7 +414,7 @@ public void animateVisibilityToggle(boolean visible){ public void setImage(int index, Drawable drawable){ if(index>0){ 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 df87dae506..00654f9f28 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 @@ -145,7 +145,7 @@ public void setImage(int index, Drawable image){ 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 434709e1c8..6365b5e859 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 @@ -125,7 +125,7 @@ public void onBind(PollOptionStatusDisplayItem item){ @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(); } @@ -134,7 +134,7 @@ public void setImage(int index, Drawable image){ @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 84df641a1d..9b29d23162 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 @@ -139,8 +139,8 @@ public void setImage(int index, Drawable image){ 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 050988508b..cbe013779a 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 void onBind(SpoilerStatusDisplayItem item){ @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 ecbf2f3d5e..b534849c47 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 @@ -170,7 +170,7 @@ public void onBind(TextStatusDisplayItem item){ @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) @@ -181,7 +181,7 @@ public void setImage(int index, Drawable image){ @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 b6732b31cb..40d55b0dcc 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 CustomEmojiSpan(Emoji emoji){ @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 void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, } 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 void setDrawable(Drawable drawable){ } 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 d5f3281ad0..2eb05085fe 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 @@ -401,7 +401,6 @@ public static void loadCustomEmojiInTextView(TextView view) { 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() { @@ -412,14 +411,14 @@ public void setImageDrawable(Drawable d) { 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 62074ae7b7..024300334b 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 @@ -170,8 +170,8 @@ public void setImage(int index, Drawable image){ 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()) From e547260be86cd489c8c773364c248415cf0e9112 Mon Sep 17 00:00:00 2001 From: Jacocococo Date: Mon, 12 Feb 2024 21:16:13 +0100 Subject: [PATCH 2/3] None-square emoji for reactions --- .../java/org/joinmastodon/android/model/EmojiReaction.java | 2 +- .../ui/displayitems/EmojiReactionsStatusDisplayItem.java | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/EmojiReaction.java b/mastodon/src/main/java/org/joinmastodon/android/model/EmojiReaction.java index 6007dfdb3c..4ffed6e6da 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/EmojiReaction.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/EmojiReaction.java @@ -38,7 +38,7 @@ public static EmojiReaction of(Emoji info, Account me){ reaction.staticUrl=info.staticUrl; reaction.accounts=new ArrayList<>(Collections.singleton(me)); reaction.accountIds=new ArrayList<>(Collections.singleton(me.id)); - reaction.request=new UrlImageLoaderRequest(info.url, V.sp(24), V.sp(24)); + reaction.request=new UrlImageLoaderRequest(info.url, 0, V.sp(24)); return reaction; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/EmojiReactionsStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/EmojiReactionsStatusDisplayItem.java index f75d17987f..3eece84482 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/EmojiReactionsStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/EmojiReactionsStatusDisplayItem.java @@ -172,7 +172,7 @@ public void onBind(EmojiReactionsStatusDisplayItem item) { addButton.setSelected(false); AccountSession session=item.parentFragment.getSession(); item.status.reactions.forEach(r->r.request=r.getUrl(item.playGifs)!=null - ? new UrlImageLoaderRequest(r.getUrl(item.playGifs), V.sp(24), V.sp(24)) + ? new UrlImageLoaderRequest(r.getUrl(item.playGifs), 0, V.sp(24)) : null); emojiKeyboard=new CustomEmojiPopupKeyboard( (Activity) item.parentFragment.getContext(), @@ -342,7 +342,9 @@ public EmojiReactionViewHolder(Context context, RecyclerView list){ @Override public void setImage(int index, Drawable drawable){ - drawable.setBounds(0, 0, V.sp(24), V.sp(24)); + int height=V.sp(24); + int width=drawable.getIntrinsicWidth()*height/drawable.getIntrinsicHeight(); + drawable.setBounds(0, 0, width, height); btn.setCompoundDrawablesRelative(drawable, null, null, null); if(drawable instanceof Animatable) ((Animatable) drawable).start(); } From d5ae2e38979074530bebf99d91c46b6a5c776e58 Mon Sep 17 00:00:00 2001 From: Jacocococo Date: Mon, 12 Feb 2024 21:20:50 +0100 Subject: [PATCH 3/3] Still set desired height --- .../java/org/joinmastodon/android/ui/text/CustomEmojiSpan.java | 2 +- .../main/java/org/joinmastodon/android/ui/utils/UiUtils.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 40d55b0dcc..6dafb1e604 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 @@ -58,6 +58,6 @@ public void setDrawable(Drawable drawable){ } public UrlImageLoaderRequest createImageLoaderRequest(){ - return new UrlImageLoaderRequest(GlobalUserPreferences.playGifs ? emoji.url : emoji.staticUrl); + return new UrlImageLoaderRequest(GlobalUserPreferences.playGifs ? emoji.url : emoji.staticUrl, 0, V.dp(20)); } } 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 2eb05085fe..f70f242150 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 @@ -418,7 +418,7 @@ public void setImageDrawable(Drawable d) { public View getView() { return view; } - }, null, new UrlImageLoaderRequest(emoji.getKey().url), null, false, true); + }, null, new UrlImageLoaderRequest(emoji.getKey().url, 0, V.dp(20)), null, false, true); } }