From 121baec44c100b5ad804e8441c6a7df67eda7eda Mon Sep 17 00:00:00 2001 From: stom79 Date: Sun, 18 Nov 2018 11:57:15 +0100 Subject: [PATCH] Fix mention colors --- .../mastodon/client/Entities/Status.java | 81 +++++++++++++------ 1 file changed, 57 insertions(+), 24 deletions(-) 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 a620b12b8..9a55394f0 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 @@ -922,38 +922,71 @@ public class Status implements Parcelable{ //Looping through accounts which are mentioned for (final Mention mention : mentions) { String targetedAccount = "@" + mention.getUsername(); - if (spannableStringT.toString().toLowerCase().contains(targetedAccount.toLowerCase())) { + if(spannableStringT.toString().toLowerCase().contains(("@" + mention.getAcct()).toLowerCase())) { + targetedAccount = "@" + mention.getAcct(); + if (spannableStringT.toString().toLowerCase().contains(targetedAccount.toLowerCase())) { + //Accounts can be mentioned several times so we have to loop + for (int startPosition = -1; (startPosition = spannableStringT.toString().toLowerCase().indexOf(targetedAccount.toLowerCase(), startPosition + 1)) != -1; startPosition++) { + + int endPosition = startPosition + targetedAccount.length(); + if (endPosition <= spannableStringT.toString().length() && endPosition >= startPosition) + spannableStringT.setSpan(new ClickableSpan() { + @Override + public void onClick(View textView) { + Intent intent = new Intent(context, ShowAccountActivity.class); + Bundle b = new Bundle(); + b.putString("accountId", mention.getId()); + intent.putExtras(b); + context.startActivity(intent); + } + + @Override + public void updateDrawState(TextPaint ds) { + super.updateDrawState(ds); + ds.setUnderlineText(false); + if (theme == THEME_DARK) + ds.setColor(ContextCompat.getColor(context, R.color.dark_link_toot)); + else if (theme == THEME_BLACK) + ds.setColor(ContextCompat.getColor(context, R.color.black_link_toot)); + else if (theme == THEME_LIGHT) + ds.setColor(ContextCompat.getColor(context, R.color.mastodonC4)); + } + }, + startPosition, endPosition, + Spanned.SPAN_INCLUSIVE_EXCLUSIVE); + } + } + }else if (spannableStringT.toString().toLowerCase().contains(targetedAccount.toLowerCase())) { //Accounts can be mentioned several times so we have to loop for(int startPosition = -1 ; (startPosition = spannableStringT.toString().toLowerCase().indexOf(targetedAccount.toLowerCase(), startPosition + 1)) != -1 ; startPosition++){ int endPosition = startPosition + targetedAccount.length(); if( endPosition <= spannableStringT.toString().length() && endPosition >= startPosition) spannableStringT.setSpan(new ClickableSpan() { - @Override - public void onClick(View textView) { - Intent intent = new Intent(context, ShowAccountActivity.class); - Bundle b = new Bundle(); - b.putString("accountId", mention.getId()); - intent.putExtras(b); - context.startActivity(intent); - } - @Override - public void updateDrawState(TextPaint ds) { - super.updateDrawState(ds); - ds.setUnderlineText(false); - if (theme == THEME_DARK) - ds.setColor(ContextCompat.getColor(context, R.color.dark_link_toot)); - else if (theme == THEME_BLACK) - ds.setColor(ContextCompat.getColor(context, R.color.black_link_toot)); - else if (theme == THEME_LIGHT) - ds.setColor(ContextCompat.getColor(context, R.color.mastodonC4)); - } - }, - startPosition, endPosition, - Spanned.SPAN_INCLUSIVE_EXCLUSIVE); + @Override + public void onClick(View textView) { + Intent intent = new Intent(context, ShowAccountActivity.class); + Bundle b = new Bundle(); + b.putString("accountId", mention.getId()); + intent.putExtras(b); + context.startActivity(intent); + } + @Override + public void updateDrawState(TextPaint ds) { + super.updateDrawState(ds); + ds.setUnderlineText(false); + if (theme == THEME_DARK) + ds.setColor(ContextCompat.getColor(context, R.color.dark_link_toot)); + else if (theme == THEME_BLACK) + ds.setColor(ContextCompat.getColor(context, R.color.black_link_toot)); + else if (theme == THEME_LIGHT) + ds.setColor(ContextCompat.getColor(context, R.color.mastodonC4)); + } + }, + startPosition, endPosition, + Spanned.SPAN_INCLUSIVE_EXCLUSIVE); } } - } } matcher = Helper.hashtagPattern.matcher(spannableStringT);