Loading app/src/main/java/app/fedilab/android/helper/Helper.java +1 −1 Original line number Diff line number Diff line Loading @@ -315,7 +315,7 @@ public class Helper { public static final Pattern hashtagPattern = Pattern.compile("(#[\\w_A-zÀ-ÿ]+)"); public static final Pattern groupPattern = Pattern.compile("(![\\w_]+)"); public static final Pattern mentionPattern = Pattern.compile("(@[\\w_]+)"); public static final Pattern mentionPattern = Pattern.compile("^(@[\\w_]+)|\\s+(@[\\w_]+)"); public static final Pattern mentionLongPattern = Pattern.compile("(@[\\w_-]+@[a-zA-Z0-9][a-zA-Z0-9.-]{1,61}[a-zA-Z0-9](?:\\.[a-zA-Z]{2,})+)"); public static final Pattern twitterPattern = Pattern.compile("((@[\\w]+)@twitter\\.com)"); Loading app/src/main/java/app/fedilab/android/helper/SpannableHelper.java +35 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.text.Spanned; import android.text.TextPaint; import android.text.style.ClickableSpan; import android.text.style.URLSpan; import android.util.Patterns; import android.view.LayoutInflater; import android.view.View; import android.widget.Toast; Loading Loading @@ -142,6 +143,7 @@ public class SpannableHelper { //Make all links linkify(context, content, urlDetails); linkifyURL(context, content, urlDetails); emails(context, content); } else { content = new SpannableStringBuilder(text); } Loading Loading @@ -441,6 +443,9 @@ public class SpannableHelper { for (Map.Entry<String, String> entry : urlDetails.entrySet()) { String value = entry.getValue(); if (value.startsWith("@") || value.startsWith("#")) { continue; } SpannableString contentUrl; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) contentUrl = new SpannableString(Html.fromHtml(value, Html.FROM_HTML_MODE_LEGACY)); Loading Loading @@ -660,6 +665,36 @@ public class SpannableHelper { } private static void emails(Context context, Spannable content) { // --- For all patterns defined in Helper class --- Pattern pattern = Patterns.EMAIL_ADDRESS; Matcher matcher = pattern.matcher(content); while (matcher.find()) { int matchStart = matcher.start(); int matchEnd = matcher.end(); String email = content.toString().substring(matchStart, matchEnd); if (matchStart >= 0 && matchEnd <= content.toString().length() && matchEnd >= matchStart) { content.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View textView) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("plain/text"); intent.putExtra(Intent.EXTRA_EMAIL, new String[]{email}); context.startActivity(Intent.createChooser(intent, null)); } @Override public void updateDrawState(@NonNull TextPaint ds) { super.updateDrawState(ds); ds.setUnderlineText(false); ds.setColor(linkColor); } }, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); } } } private static void interaction(Context context, Spannable content, List<Mention> mentions) { // --- For all patterns defined in Helper class --- for (Map.Entry<Helper.PatternType, Pattern> entry : Helper.patternHashMap.entrySet()) { Loading Loading
app/src/main/java/app/fedilab/android/helper/Helper.java +1 −1 Original line number Diff line number Diff line Loading @@ -315,7 +315,7 @@ public class Helper { public static final Pattern hashtagPattern = Pattern.compile("(#[\\w_A-zÀ-ÿ]+)"); public static final Pattern groupPattern = Pattern.compile("(![\\w_]+)"); public static final Pattern mentionPattern = Pattern.compile("(@[\\w_]+)"); public static final Pattern mentionPattern = Pattern.compile("^(@[\\w_]+)|\\s+(@[\\w_]+)"); public static final Pattern mentionLongPattern = Pattern.compile("(@[\\w_-]+@[a-zA-Z0-9][a-zA-Z0-9.-]{1,61}[a-zA-Z0-9](?:\\.[a-zA-Z]{2,})+)"); public static final Pattern twitterPattern = Pattern.compile("((@[\\w]+)@twitter\\.com)"); Loading
app/src/main/java/app/fedilab/android/helper/SpannableHelper.java +35 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.text.Spanned; import android.text.TextPaint; import android.text.style.ClickableSpan; import android.text.style.URLSpan; import android.util.Patterns; import android.view.LayoutInflater; import android.view.View; import android.widget.Toast; Loading Loading @@ -142,6 +143,7 @@ public class SpannableHelper { //Make all links linkify(context, content, urlDetails); linkifyURL(context, content, urlDetails); emails(context, content); } else { content = new SpannableStringBuilder(text); } Loading Loading @@ -441,6 +443,9 @@ public class SpannableHelper { for (Map.Entry<String, String> entry : urlDetails.entrySet()) { String value = entry.getValue(); if (value.startsWith("@") || value.startsWith("#")) { continue; } SpannableString contentUrl; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) contentUrl = new SpannableString(Html.fromHtml(value, Html.FROM_HTML_MODE_LEGACY)); Loading Loading @@ -660,6 +665,36 @@ public class SpannableHelper { } private static void emails(Context context, Spannable content) { // --- For all patterns defined in Helper class --- Pattern pattern = Patterns.EMAIL_ADDRESS; Matcher matcher = pattern.matcher(content); while (matcher.find()) { int matchStart = matcher.start(); int matchEnd = matcher.end(); String email = content.toString().substring(matchStart, matchEnd); if (matchStart >= 0 && matchEnd <= content.toString().length() && matchEnd >= matchStart) { content.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View textView) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("plain/text"); intent.putExtra(Intent.EXTRA_EMAIL, new String[]{email}); context.startActivity(Intent.createChooser(intent, null)); } @Override public void updateDrawState(@NonNull TextPaint ds) { super.updateDrawState(ds); ds.setUnderlineText(false); ds.setColor(linkColor); } }, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); } } } private static void interaction(Context context, Spannable content, List<Mention> mentions) { // --- For all patterns defined in Helper class --- for (Map.Entry<Helper.PatternType, Pattern> entry : Helper.patternHashMap.entrySet()) { Loading