From ed16f1b2bc981cc9e203223e045d6176c72320a9 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 11 Oct 2020 00:17:51 +0300 Subject: [PATCH] Use SpannableString instead of SpannableStringBuilder when it's possible --- .../java/com/keylesspalace/tusky/AboutActivity.kt | 13 ++++++------- .../tusky/adapter/NotificationsAdapter.java | 3 ++- .../keylesspalace/tusky/util/CustomEmojiHelper.kt | 7 +++++-- .../com/keylesspalace/tusky/util/LinkHelper.java | 3 ++- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/AboutActivity.kt b/app/src/main/java/com/keylesspalace/tusky/AboutActivity.kt index ce7d7294..f72fa45e 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AboutActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/AboutActivity.kt @@ -68,20 +68,19 @@ private fun TextView.setClickableTextWithoutUnderlines(@StringRes textId: Int) { Linkify.addLinks(text, Linkify.WEB_URLS) - val builder = SpannableStringBuilder(text) val urlSpans = text.getSpans(0, text.length, URLSpan::class.java) for (span in urlSpans) { - val start = builder.getSpanStart(span) - val end = builder.getSpanEnd(span) - val flags = builder.getSpanFlags(span) + val start = text.getSpanStart(span) + val end = text.getSpanEnd(span) + val flags = text.getSpanFlags(span) val customSpan = object : CustomURLSpan(span.url) {} - builder.removeSpan(span) - builder.setSpan(customSpan, start, end, flags) + text.removeSpan(span) + text.setSpan(customSpan, start, end, flags) } - setText(builder) + setText(text) linksClickable = true movementMethod = LinkMovementMethod.getInstance() diff --git a/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java b/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java index 665a5f3d..4fa44c7d 100644 --- a/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java @@ -21,6 +21,7 @@ import android.graphics.PorterDuff; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.text.InputFilter; +import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.TextUtils; @@ -523,7 +524,7 @@ public class NotificationsAdapter extends RecyclerView.Adapter { } } message.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null); - final SpannableStringBuilder str = new SpannableStringBuilder(wholeMessage); + final SpannableString str = new SpannableString(wholeMessage); str.setSpan(new StyleSpan(Typeface.BOLD), 0, displayName.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); CharSequence emojifiedText = CustomEmojiHelper.emojify(str, notificationViewData.getAccount().getEmojis(), message, true); diff --git a/app/src/main/java/com/keylesspalace/tusky/util/CustomEmojiHelper.kt b/app/src/main/java/com/keylesspalace/tusky/util/CustomEmojiHelper.kt index 9835b6b9..305a7945 100644 --- a/app/src/main/java/com/keylesspalace/tusky/util/CustomEmojiHelper.kt +++ b/app/src/main/java/com/keylesspalace/tusky/util/CustomEmojiHelper.kt @@ -21,9 +21,12 @@ import android.graphics.Canvas import android.graphics.Paint import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable +import android.text.SpannableString import android.text.SpannableStringBuilder +import android.text.Spanned import android.text.style.ReplacementSpan import android.view.View +import androidx.core.text.toSpannable import com.bumptech.glide.Glide import com.bumptech.glide.request.target.CustomTarget @@ -46,7 +49,7 @@ fun CharSequence.emojify(emojis: List?, view: View, forceSmallEmoji: Bool if(emojis.isNullOrEmpty()) return this - val builder = SpannableStringBuilder.valueOf(this) + val builder = SpannableString.valueOf(this) val pm = PreferenceManager.getDefaultSharedPreferences(view.context) val smallEmojis = forceSmallEmoji || !pm.getBoolean("bigEmojis", true) // val animatedEmojis = pm.getBoolean("animateEmojis", false) @@ -62,7 +65,7 @@ fun CharSequence.emojify(emojis: List?, view: View, forceSmallEmoji: Bool EmojiSpan(WeakReference(view)) } - builder.setSpan(span, matcher.start(), matcher.end(), 0); + builder.setSpan(span, matcher.start(), matcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); Glide.with(view) .asBitmap() .load(url) diff --git a/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.java b/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.java index 7a438d9f..6c5d5134 100644 --- a/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.java +++ b/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.java @@ -20,6 +20,7 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Build; +import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.method.LinkMovementMethod; @@ -187,7 +188,7 @@ public class LinkHelper { public static CharSequence createClickableText(String text, String link) { URLSpan span = new CustomURLSpan(link); - SpannableStringBuilder clickableText = new SpannableStringBuilder(text); + SpannableString clickableText = new SpannableString(text); clickableText.setSpan(span, 0, text.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); return clickableText; }