From 423e919e167396efc3748bdb28098e9c93f2fc7e Mon Sep 17 00:00:00 2001 From: sk Date: Wed, 1 Feb 2023 10:25:24 +0100 Subject: [PATCH] fix crash --- .../android/fragments/ComposeFragment.java | 25 +++++++++++-------- .../displayitems/TextStatusDisplayItem.java | 4 +-- ...ingEncoder.java => StatusTextEncoder.java} | 11 +++++--- 3 files changed, 24 insertions(+), 16 deletions(-) rename mastodon/src/main/java/org/joinmastodon/android/utils/{StringEncoder.java => StatusTextEncoder.java} (82%) 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 57d6d43e9..a24fc786c 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -6,7 +6,6 @@ import static org.joinmastodon.android.api.requests.statuses.CreateStatus.getDra import static org.joinmastodon.android.ui.utils.UiUtils.isPhotoPickerAvailable; import static org.joinmastodon.android.utils.MastodonLanguage.allLanguages; import static org.joinmastodon.android.utils.MastodonLanguage.defaultRecentLanguages; -import static android.os.ext.SdkExtensions.getExtensionVersion; import android.animation.ObjectAnimator; import android.annotation.SuppressLint; @@ -118,7 +117,7 @@ import org.joinmastodon.android.ui.views.LinkedTextView; import org.joinmastodon.android.ui.views.ReorderableLinearLayout; import org.joinmastodon.android.ui.views.SizeListenerLinearLayout; import org.joinmastodon.android.utils.MastodonLanguage; -import org.joinmastodon.android.utils.StringEncoder; +import org.joinmastodon.android.utils.StatusTextEncoder; import org.parceler.Parcel; import org.parceler.Parcels; @@ -880,11 +879,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr btn.setOnLongClickListener(v->{ btn.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); - if (!GlobalUserPreferences.bottomEncoding) { - GlobalUserPreferences.bottomEncoding = true; - GlobalUserPreferences.save(); - addBottomLanguage(allLanguagesMenu); - } + if (!GlobalUserPreferences.bottomEncoding) addBottomLanguage(allLanguagesMenu); return false; }); @@ -902,7 +897,9 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr } private void addBottomLanguage(Menu menu) { - menu.add(0, allLanguages.size(), Menu.NONE, "bottom (\uD83E\uDD7A\uD83D\uDC49\uD83D\uDC48)"); + if (menu.findItem(allLanguages.size()) == null) { + menu.add(0, allLanguages.size(), Menu.NONE, "bottom (\uD83E\uDD7A\uD83D\uDC49\uD83D\uDC48)"); + } } @Override @@ -1030,7 +1027,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr String text=mainEditText.getText().toString(); CreateStatus.Request req=new CreateStatus.Request(); if ("bottom".equals(encoding)) { - text = new StringEncoder(Bottom::encode).encode(text); + text = new StatusTextEncoder(Bottom::encode).encode(text); req.spoilerText = "bottom-encoded emoji spam"; } if (localOnly && @@ -1173,9 +1170,15 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr if (replyTo == null) { List newRecentLanguages = new ArrayList<>(Optional.ofNullable(recentLanguages.get(accountID)).orElse(defaultRecentLanguages)); newRecentLanguages.remove(language); - newRecentLanguages.remove(encoding); newRecentLanguages.add(0, language); - newRecentLanguages.add(0, encoding); + if (encoding != null) { + newRecentLanguages.remove(encoding); + newRecentLanguages.add(0, encoding); + } + if ("bottom".equals(encoding) && !GlobalUserPreferences.bottomEncoding) { + GlobalUserPreferences.bottomEncoding = true; + GlobalUserPreferences.save(); + } recentLanguages.put(accountID, newRecentLanguages.stream().limit(4).collect(Collectors.toList())); GlobalUserPreferences.save(); } 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 a40797bdf..9a75ff95f 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 @@ -28,7 +28,7 @@ import org.joinmastodon.android.ui.text.HtmlParser; import org.joinmastodon.android.ui.utils.CustomEmojiHelper; import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.views.LinkedTextView; -import org.joinmastodon.android.utils.StringEncoder; +import org.joinmastodon.android.utils.StatusTextEncoder; import java.util.regex.Pattern; @@ -166,7 +166,7 @@ public class TextStatusDisplayItem extends StatusDisplayItem{ if (isBottomText) { try { item.translation = new TranslatedStatus(); - item.translation.content = new StringEncoder(Bottom::decode).decode(item.status.getStrippedText(), BOTTOM_TEXT_PATTERN); + item.translation.content = new StatusTextEncoder(Bottom::decode).decode(item.status.getStrippedText(), BOTTOM_TEXT_PATTERN); item.translated = true; } catch (TranslationError err) { item.translation = null; diff --git a/mastodon/src/main/java/org/joinmastodon/android/utils/StringEncoder.java b/mastodon/src/main/java/org/joinmastodon/android/utils/StatusTextEncoder.java similarity index 82% rename from mastodon/src/main/java/org/joinmastodon/android/utils/StringEncoder.java rename to mastodon/src/main/java/org/joinmastodon/android/utils/StatusTextEncoder.java index ae18fe609..12f3d4891 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/utils/StringEncoder.java +++ b/mastodon/src/main/java/org/joinmastodon/android/utils/StatusTextEncoder.java @@ -1,5 +1,7 @@ package org.joinmastodon.android.utils; +import android.text.TextUtils; + import org.joinmastodon.android.fragments.ComposeFragment; import java.util.function.Function; @@ -8,10 +10,13 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; // not a good class -public class StringEncoder { +public class StatusTextEncoder { private final Function fn; - public StringEncoder(Function fn) { + // see ComposeFragment.HIGHLIGHT_PATTERN + private final static Pattern EXCLUDE_PATTERN = Pattern.compile("\\s*(?:@([a-zA-Z0-9_]+)(@[a-zA-Z0-9_.-]+)?|#([^\\s.]+))\\s*"); + + public StatusTextEncoder(Function fn) { this.fn = fn; } @@ -19,7 +24,7 @@ public class StringEncoder { public String encode(String content) { StringBuilder encodedString = new StringBuilder(); // matches mentions and hashtags - Matcher m = ComposeFragment.HIGHLIGHT_PATTERN.matcher(content); + Matcher m = EXCLUDE_PATTERN.matcher(content); int previousEnd = 0; while (m.find()) { MatchResult res = m.toMatchResult();