From 11e8f66a12e441fd3a56ca51d818268c21324a36 Mon Sep 17 00:00:00 2001 From: Danny Baumann Date: Mon, 10 Feb 2025 09:11:27 +0100 Subject: [PATCH] Replace emoji parser library emoji-java is unmaintained since 2019, so replace it with a library that receives updates. --- README.md | 2 +- app/build.gradle | 4 +--- .../java/com/gh4a/activities/IssueEditActivity.java | 4 ++-- .../main/java/com/gh4a/adapter/CommitAdapter.java | 3 +-- app/src/main/java/com/gh4a/adapter/EventAdapter.java | 12 ++++++------ .../java/com/gh4a/adapter/IssueLabelAdapter.java | 4 ++-- .../java/com/gh4a/adapter/RepositoryAdapter.java | 3 +-- app/src/main/java/com/gh4a/adapter/TrendAdapter.java | 4 ++-- .../com/gh4a/adapter/timeline/EventViewHolder.java | 3 +-- .../main/java/com/gh4a/fragment/CommitFragment.java | 11 ++++------- .../java/com/gh4a/fragment/RepositoryFragment.java | 3 +-- .../java/com/gh4a/fragment/SettingsFragment.java | 2 +- .../main/java/com/gh4a/fragment/UserFragment.java | 5 ++--- app/src/main/java/com/gh4a/utils/StringUtils.java | 11 +++++++++++ app/src/main/java/com/gh4a/utils/UiUtils.java | 3 +-- 15 files changed, 37 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index f14dd38545..e4a3e53ae1 100644 --- a/README.md +++ b/README.md @@ -86,9 +86,9 @@ Open Source Libraries * [android-gif-drawable](https://github.com/koral--/android-gif-drawable) * [AndroidSVG](https://github.com/BigBadaboom/androidsvg) * [AndroidX](https://github.com/androidx/androidx) -* [emoji-java](https://github.com/vdurmont/emoji-java) * [GitHubSdk](https://github.com/maniac103/GitHubSdk) * [HoloColorPicker](https://github.com/LarsWerkman/HoloColorPicker) +* [JEmoji](https://github.com/felldo/JEmoji) * [MarkdownEdit](https://github.com/Tunous/MarkdownEdit) * [Material Design Icons](https://github.com/google/material-design-icons) * [PrettyTime](https://github.com/ocpsoft/prettytime) diff --git a/app/build.gradle b/app/build.gradle index 239613d399..ffefe9669b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,9 +99,7 @@ dependencies { implementation 'com.github.castorflex.smoothprogressbar:library:1.3.0' implementation 'org.ccil.cowan.tagsoup:tagsoup:1.2.1' implementation 'com.github.pluscubed:recycler-fast-scroll:3de76812553a77bfd25d3aea0a0af4d96516c3e3@aar' - implementation('com.vdurmont:emoji-java:5.1.1') { - exclude group: 'org.json', module : 'json' - } + implementation 'net.fellbaum:jemoji:1.7.0' implementation 'com.github.Tunous:MarkdownEdit:1.0.0' implementation 'com.github.qoqa:traceur:2.2.12' testImplementation 'junit:junit:4.13.2' diff --git a/app/src/main/java/com/gh4a/activities/IssueEditActivity.java b/app/src/main/java/com/gh4a/activities/IssueEditActivity.java index 1874980e28..412a77183a 100644 --- a/app/src/main/java/com/gh4a/activities/IssueEditActivity.java +++ b/app/src/main/java/com/gh4a/activities/IssueEditActivity.java @@ -30,6 +30,7 @@ import com.gh4a.adapter.ItemsWithDescriptionAdapter; import com.gh4a.utils.ActivityResultHelpers; +import com.gh4a.utils.StringUtils; import com.google.android.material.appbar.AppBarLayout; import androidx.appcompat.view.ContextThemeWrapper; @@ -75,7 +76,6 @@ import com.meisolsson.githubsdk.service.issues.IssueService; import com.meisolsson.githubsdk.service.repositories.RepositoryCollaboratorService; import com.meisolsson.githubsdk.service.repositories.RepositoryContentService; -import com.vdurmont.emoji.EmojiParser; import java.net.HttpURLConnection; import java.util.ArrayList; @@ -991,7 +991,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { viewColor.setBackgroundColor(ApiHelpers.colorForLabel(label)); final TextView tvLabel = rowView.findViewById(R.id.tv_title); - tvLabel.setText(EmojiParser.parseToUnicode(label.name())); + tvLabel.setText(StringUtils.replaceEmojiAliases(label.name())); tvLabel.setOnClickListener(clickListener); tvLabel.setTag(label); diff --git a/app/src/main/java/com/gh4a/adapter/CommitAdapter.java b/app/src/main/java/com/gh4a/adapter/CommitAdapter.java index 7e41253bb9..15fdca1654 100644 --- a/app/src/main/java/com/gh4a/adapter/CommitAdapter.java +++ b/app/src/main/java/com/gh4a/adapter/CommitAdapter.java @@ -34,7 +34,6 @@ import com.meisolsson.githubsdk.model.Commit; import com.meisolsson.githubsdk.model.User; import com.meisolsson.githubsdk.model.git.GitUser; -import com.vdurmont.emoji.EmojiParser; public class CommitAdapter extends RootAdapter { public CommitAdapter(Context context) { @@ -67,7 +66,7 @@ public void onBindViewHolder(ViewHolder holder, Commit commit) { if (pos > 0) { message = message.substring(0, pos); } - message = EmojiParser.parseToUnicode(message); + message = StringUtils.replaceEmojiAliases(message); holder.tvDesc.setText(message); holder.tvSha.setText(commit.sha().substring(0, 10)); diff --git a/app/src/main/java/com/gh4a/adapter/EventAdapter.java b/app/src/main/java/com/gh4a/adapter/EventAdapter.java index c91931513d..341b0d2408 100644 --- a/app/src/main/java/com/gh4a/adapter/EventAdapter.java +++ b/app/src/main/java/com/gh4a/adapter/EventAdapter.java @@ -69,7 +69,6 @@ import com.meisolsson.githubsdk.model.payload.PushPayload; import com.meisolsson.githubsdk.model.payload.ReleasePayload; import com.meisolsson.githubsdk.model.payload.TeamAddPayload; -import com.vdurmont.emoji.EmojiParser; import java.util.List; @@ -138,7 +137,7 @@ private CharSequence formatDescription(GitHubEvent event) { CommitCommentPayload payload = (CommitCommentPayload) event.payload(); GitComment comment = payload.comment(); if (comment != null) { - return EmojiParser.parseToUnicode(comment.body()); + return StringUtils.replaceEmojiAliases(comment.body()); } break; } @@ -186,7 +185,7 @@ private CharSequence formatDescription(GitHubEvent event) { case IssueCommentEvent: { IssueCommentPayload payload = (IssueCommentPayload) event.payload(); if (payload != null && payload.comment() != null) { - return EmojiParser.parseToUnicode(payload.comment().body()); + return StringUtils.replaceEmojiAliases(payload.comment().body()); } break; } @@ -216,7 +215,7 @@ private CharSequence formatDescription(GitHubEvent event) { Review review = payload.review(); String body = review.body(); if (body != null) { - return EmojiParser.parseToUnicode(review.body()); + return StringUtils.replaceEmojiAliases(review.body()); } break; } @@ -225,7 +224,7 @@ private CharSequence formatDescription(GitHubEvent event) { (PullRequestReviewCommentPayload) event.payload(); ReviewComment comment = payload.comment(); if (comment != null) { - return EmojiParser.parseToUnicode(comment.body()); + return StringUtils.replaceEmojiAliases(comment.body()); } break; } @@ -258,7 +257,8 @@ private CharSequence formatDescription(GitHubEvent event) { ssb.length() - sha.length(), ssb.length(), 0); ssb.append(" "); - ssb.append(StringUtils.getFirstLine(EmojiParser.parseToUnicode(commit.message()))); + ssb.append(StringUtils.getFirstLine( + StringUtils.replaceEmojiAliases(commit.message()))); ssb.setSpan(new EllipsizeLineSpan(i == (count - 1) ? 0 : bottomMargin), lastLength, ssb.length(), 0); } diff --git a/app/src/main/java/com/gh4a/adapter/IssueLabelAdapter.java b/app/src/main/java/com/gh4a/adapter/IssueLabelAdapter.java index a8de6fe71a..774eeb17b7 100644 --- a/app/src/main/java/com/gh4a/adapter/IssueLabelAdapter.java +++ b/app/src/main/java/com/gh4a/adapter/IssueLabelAdapter.java @@ -16,9 +16,9 @@ import com.gh4a.ColorPickerDialog; import com.gh4a.R; +import com.gh4a.utils.StringUtils; import com.gh4a.utils.UiUtils; import com.meisolsson.githubsdk.model.Label; -import com.vdurmont.emoji.EmojiParser; public class IssueLabelAdapter extends RootAdapter { @@ -149,7 +149,7 @@ public void onBindViewHolder(ViewHolder holder, EditableLabel label) { } assignColor(holder, label.editedColor != null ? label.editedColor : label.color()); - holder.label.setText(EmojiParser.parseToUnicode(label.name())); + holder.label.setText(StringUtils.replaceEmojiAliases(label.name())); holder.editor.setText(label.editedName != null ? label.editedName : label.name()); } diff --git a/app/src/main/java/com/gh4a/adapter/RepositoryAdapter.java b/app/src/main/java/com/gh4a/adapter/RepositoryAdapter.java index 2103898ad2..357637f4a1 100644 --- a/app/src/main/java/com/gh4a/adapter/RepositoryAdapter.java +++ b/app/src/main/java/com/gh4a/adapter/RepositoryAdapter.java @@ -29,7 +29,6 @@ import com.gh4a.utils.ApiHelpers; import com.gh4a.utils.StringUtils; import com.meisolsson.githubsdk.model.Repository; -import com.vdurmont.emoji.EmojiParser; import java.util.Locale; @@ -51,7 +50,7 @@ public void onBindViewHolder(ViewHolder holder, Repository repository) { if (!StringUtils.isBlank(repository.description())) { holder.tvDesc.setVisibility(View.VISIBLE); - holder.tvDesc.setText(EmojiParser.parseToUnicode(repository.description())); + holder.tvDesc.setText(StringUtils.replaceEmojiAliases(repository.description())); } else { holder.tvDesc.setVisibility(View.GONE); } diff --git a/app/src/main/java/com/gh4a/adapter/TrendAdapter.java b/app/src/main/java/com/gh4a/adapter/TrendAdapter.java index e78480f747..75c8bc21f3 100644 --- a/app/src/main/java/com/gh4a/adapter/TrendAdapter.java +++ b/app/src/main/java/com/gh4a/adapter/TrendAdapter.java @@ -29,7 +29,7 @@ import com.gh4a.R; import com.gh4a.model.Trend; -import com.vdurmont.emoji.EmojiParser; +import com.gh4a.utils.StringUtils; public class TrendAdapter extends RootAdapter { private final @StringRes int mStarsTemplate; @@ -56,7 +56,7 @@ public void onBindViewHolder(ViewHolder holder, Trend trend) { holder.tvTitle.setText(title); String desc = trend.getDescription(); - holder.tvDesc.setText(desc != null ? EmojiParser.parseToUnicode(desc) : null); + holder.tvDesc.setText(StringUtils.replaceEmojiAliases(desc)); String lang = trend.getLanguage(); if (TextUtils.isEmpty(lang)) { diff --git a/app/src/main/java/com/gh4a/adapter/timeline/EventViewHolder.java b/app/src/main/java/com/gh4a/adapter/timeline/EventViewHolder.java index d22df7778d..09a9913031 100644 --- a/app/src/main/java/com/gh4a/adapter/timeline/EventViewHolder.java +++ b/app/src/main/java/com/gh4a/adapter/timeline/EventViewHolder.java @@ -30,7 +30,6 @@ import com.meisolsson.githubsdk.model.Label; import com.meisolsson.githubsdk.model.Rename; import com.meisolsson.githubsdk.model.User; -import com.vdurmont.emoji.EmojiParser; import java.util.ArrayList; import java.util.Date; @@ -336,7 +335,7 @@ private void replaceCommitPlaceholder(SpannableStringBuilder text, String commit private void replaceLabelPlaceholder(SpannableStringBuilder text, Label label) { int pos = text.toString().indexOf("[label]"); if (label != null && pos >= 0) { - String labelName = EmojiParser.parseToUnicode(label.name()); + String labelName = StringUtils.replaceEmojiAliases(label.name()); int length = labelName.length(); text.replace(pos, pos + 7, labelName); text.setSpan(new IssueLabelSpan(mContext, label, false), pos, pos + length, 0); diff --git a/app/src/main/java/com/gh4a/fragment/CommitFragment.java b/app/src/main/java/com/gh4a/fragment/CommitFragment.java index 5965d66aff..a781dab786 100644 --- a/app/src/main/java/com/gh4a/fragment/CommitFragment.java +++ b/app/src/main/java/com/gh4a/fragment/CommitFragment.java @@ -37,7 +37,6 @@ import com.meisolsson.githubsdk.model.git.GitComment; import com.meisolsson.githubsdk.model.git.GitCommit; import com.meisolsson.githubsdk.model.git.GitUser; -import com.vdurmont.emoji.EmojiParser; import java.util.ArrayList; import java.util.List; @@ -138,16 +137,14 @@ private void fillHeader() { String message = mCommit.commit().message(); int pos = message.indexOf('\n'); - String title = pos > 0 ? message.substring(0, pos) : message; - title = EmojiParser.parseToUnicode(title); + String title = StringUtils.replaceEmojiAliases( + pos > 0 ? message.substring(0, pos) : message); int length = message.length(); while (pos > 0 && pos < length && Character.isWhitespace(message.charAt(pos))) { pos++; } - message = pos > 0 && pos < length ? message.substring(pos) : null; - if (message != null) { - message = EmojiParser.parseToUnicode(message); - } + message = StringUtils.replaceEmojiAliases( + pos > 0 && pos < length ? message.substring(pos) : null); tvTitle.setText(title); tvMessage.setText(message); diff --git a/app/src/main/java/com/gh4a/fragment/RepositoryFragment.java b/app/src/main/java/com/gh4a/fragment/RepositoryFragment.java index 6320ec74a6..1ddc94751f 100644 --- a/app/src/main/java/com/gh4a/fragment/RepositoryFragment.java +++ b/app/src/main/java/com/gh4a/fragment/RepositoryFragment.java @@ -62,7 +62,6 @@ import com.meisolsson.githubsdk.service.repositories.RepositoryContentService; import com.meisolsson.githubsdk.service.search.SearchService; import com.gh4a.widget.OverviewRow; -import com.vdurmont.emoji.EmojiParser; import java.net.HttpURLConnection; import java.util.Locale; @@ -321,7 +320,7 @@ private void fillTextView(int id, int stringId, String text) { if (stringId != 0) { view.setText(getString(stringId, text)); } else { - view.setText(EmojiParser.parseToUnicode(text)); + view.setText(StringUtils.replaceEmojiAliases(text)); } view.setVisibility(View.VISIBLE); } else { diff --git a/app/src/main/java/com/gh4a/fragment/SettingsFragment.java b/app/src/main/java/com/gh4a/fragment/SettingsFragment.java index cb62a49f45..3192551123 100644 --- a/app/src/main/java/com/gh4a/fragment/SettingsFragment.java +++ b/app/src/main/java/com/gh4a/fragment/SettingsFragment.java @@ -239,9 +239,9 @@ private static class OpenSourceComponentAdapter extends RecyclerView.Adapter topRepos) { TextView tvDesc = rowView.findViewById(R.id.tv_desc); if (!StringUtils.isBlank(repo.description())) { tvDesc.setVisibility(View.VISIBLE); - tvDesc.setText(EmojiParser.parseToUnicode(repo.description())); + tvDesc.setText(StringUtils.replaceEmojiAliases(repo.description())); } else { tvDesc.setVisibility(View.GONE); } diff --git a/app/src/main/java/com/gh4a/utils/StringUtils.java b/app/src/main/java/com/gh4a/utils/StringUtils.java index 2f4777255d..22b1852839 100644 --- a/app/src/main/java/com/gh4a/utils/StringUtils.java +++ b/app/src/main/java/com/gh4a/utils/StringUtils.java @@ -31,6 +31,9 @@ import com.gh4a.Gh4Application; import com.meisolsson.githubsdk.model.User; +import net.fellbaum.jemoji.Emoji; +import net.fellbaum.jemoji.EmojiManager; + import java.util.Date; import java.util.HashSet; import java.util.Set; @@ -194,4 +197,12 @@ public static String unescapeCommonHtmlEntities(String sourceText) { .replaceAll("&(ndash|#8211);", "–") .replaceAll("&(mdash|#8212);", "—"); } + + public static String replaceEmojiAliases(String input) { + return EmojiManager.replaceAliases(input, (alias, emojis) -> emojis.stream() + .filter(emoji -> emoji.getGithubAliases().contains(alias)) + .findFirst() + .map(Emoji::getEmoji) + .orElse(alias)); + } } diff --git a/app/src/main/java/com/gh4a/utils/UiUtils.java b/app/src/main/java/com/gh4a/utils/UiUtils.java index 342c58cfba..d82153ed10 100644 --- a/app/src/main/java/com/gh4a/utils/UiUtils.java +++ b/app/src/main/java/com/gh4a/utils/UiUtils.java @@ -25,7 +25,6 @@ import com.gh4a.R; import com.gh4a.widget.IssueLabelSpan; import com.meisolsson.githubsdk.model.Label; -import com.vdurmont.emoji.EmojiParser; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; @@ -321,7 +320,7 @@ public static SpannableStringBuilder formatLabelList(Context context, List