diff --git a/README.md b/README.md index f14dd3854..e4a3e53ae 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 239613d39..ffefe9669 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 1874980e2..412a77183 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 7e41253bb..15fdca165 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 c91931513..341b0d240 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 a8de6fe71..774eeb17b 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 2103898ad..357637f4a 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 e78480f74..75c8bc21f 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 d22df7778..09a991303 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 5965d66af..a781dab78 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 6320ec74a..1ddc94751 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 cb62a49f4..319255112 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 2f4777255..22b185283 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 342c58cfb..d82153ed1 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