From 4d3f16034290ff8b8c7ab8f36863fa8c2364c16b Mon Sep 17 00:00:00 2001 From: stom79 Date: Tue, 14 Aug 2018 18:27:21 +0200 Subject: [PATCH] Make twitter screennames clickable. --- .../mastodon/client/Entities/Status.java | 26 +++++++++++++++++++ .../gouv/etalab/mastodon/helper/Helper.java | 1 + 2 files changed, 27 insertions(+) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java index 5e208ffad..0b17ec62e 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java @@ -19,6 +19,7 @@ import android.app.Activity; import android.content.*; import android.content.Context; import android.graphics.Bitmap; +import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Parcel; @@ -659,6 +660,31 @@ public class Status implements Parcelable{ matcher = Patterns.WEB_URL.matcher(spannableString); else matcher = Helper.urlPattern.matcher(spannableString);*/ + + + matcher = Helper.twitterPattern.matcher(spannableString); + while (matcher.find()){ + int matchStart = matcher.start(2); + int matchEnd = matcher.end(); + final String twittername = spannableString.toString().substring(matchStart, matchEnd); + if( matchStart >= 0 && matchEnd <= spannableString.toString().length() && matchEnd >= matchStart) + spannableString.setSpan(new ClickableSpan() { + @Override + public void onClick(View textView) { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/"+twittername.substring(1).replace("@twitter.com",""))); + context.startActivity(intent); + } + @Override + public void updateDrawState(TextPaint ds) { + super.updateDrawState(ds); + ds.setUnderlineText(false); + } + }, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); + if( matchStart >= 0 && matchEnd <= spannableString.toString().length() && matchEnd >= matchStart) + spannableString.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, (theme==Helper.THEME_DARK||theme==Helper.THEME_BLACK)?R.color.mastodonC2:R.color.mastodonC4)), matchStart, matchEnd, + Spanned.SPAN_INCLUSIVE_EXCLUSIVE); + } + matcher = Patterns.WEB_URL.matcher(spannableString); while (matcher.find()){ int matchStart = matcher.start(1); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java index 859c949ab..799e4fed2 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java @@ -343,6 +343,7 @@ public class Helper { Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); public static final Pattern hashtagPattern = Pattern.compile("(#[\\w_À-ú-]+)"); + public static final Pattern twitterPattern = Pattern.compile("((@[\\w]+)@twitter\\.com)"); private static final Pattern mentionPattern = Pattern.compile("(@[\\w]+)");