diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java index ca3f8000c..3478ad946 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java @@ -452,22 +452,23 @@ public class Account implements Parcelable { int startPositionTar = spannableString.toString().indexOf("@"+this.getMoved_to_account().getAcct()); int endPositionTar = startPositionTar + ("@"+this.getMoved_to_account().getAcct()).length(); final String idTar = this.getMoved_to_account().getId(); - spannableString.setSpan(new ClickableSpan() { - @Override - public void onClick(View textView) { - Intent intent = new Intent(context, ShowAccountActivity.class); - Bundle b = new Bundle(); - b.putString("accountId", idTar); - intent.putExtras(b); - context.startActivity(intent); - } - @Override - public void updateDrawState(TextPaint ds) { - super.updateDrawState(ds); - } - }, - startPositionTar, endPositionTar, - Spanned.SPAN_INCLUSIVE_EXCLUSIVE); + if( endPositionTar <= spannableString.toString().length() && endPositionTar >= startPositionTar) + spannableString.setSpan(new ClickableSpan() { + @Override + public void onClick(View textView) { + Intent intent = new Intent(context, ShowAccountActivity.class); + Bundle b = new Bundle(); + b.putString("accountId", idTar); + intent.putExtras(b); + context.startActivity(intent); + } + @Override + public void updateDrawState(TextPaint ds) { + super.updateDrawState(ds); + } + }, + startPositionTar, endPositionTar, + Spanned.SPAN_INCLUSIVE_EXCLUSIVE); } return spannableString; } 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 b99a437da..5d5c4b5f4 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 @@ -763,9 +763,11 @@ public class Status implements Parcelable{ int matchStart = matcher.start(2); int matchEnd = matcher.end(); final String twittername = matcher.group(2); - URLSpan[] spans = spannableStringT.getSpans(matchStart, matchEnd, URLSpan.class); - for (URLSpan span : spans) { - spannableStringT.removeSpan(span); + if( spannableStringT.length() < matchEnd) { + URLSpan[] spans = spannableStringT.getSpans(matchStart, matchEnd, URLSpan.class); + for (URLSpan span : spans) { + spannableStringT.removeSpan(span); + } } if( matchEnd <= spannableStringT.toString().length() && matchEnd >= matchStart) spannableStringT.setSpan(new ClickableSpan() { @@ -828,9 +830,11 @@ public class Status implements Parcelable{ for(int startPosition = -1 ; (startPosition = spannableStringT.toString().toLowerCase().indexOf(key.toLowerCase(), startPosition + 1)) != -1 ; startPosition++){ int endPosition = startPosition + key.length(); - URLSpan[] spans = spannableStringT.getSpans(startPosition, endPosition, URLSpan.class); - for (URLSpan span : spans) { - spannableStringT.removeSpan(span); + if( spannableStringT.length() < endPosition) { + URLSpan[] spans = spannableStringT.getSpans(startPosition, endPosition, URLSpan.class); + for (URLSpan span : spans) { + spannableStringT.removeSpan(span); + } } if( endPosition <= spannableStringT.toString().length() && endPosition >= startPosition) { spannableStringT.setSpan(new ClickableSpan() { @@ -891,9 +895,11 @@ public class Status implements Parcelable{ for(int startPosition = -1 ; (startPosition = spannableStringT.toString().toLowerCase().indexOf(targetedAccount.toLowerCase(), startPosition + 1)) != -1 ; startPosition++){ int endPosition = startPosition + targetedAccount.length(); - URLSpan[] spans = spannableStringT.getSpans(startPosition, endPosition, URLSpan.class); - for (URLSpan span : spans) { - spannableStringT.removeSpan(span); + if( spannableStringT.length() < endPosition) { + URLSpan[] spans = spannableStringT.getSpans(startPosition, endPosition, URLSpan.class); + for (URLSpan span : spans) { + spannableStringT.removeSpan(span); + } } if( endPosition <= spannableStringT.toString().length() && endPosition >= startPosition) spannableStringT.setSpan(new ClickableSpan() { @@ -925,9 +931,11 @@ public class Status implements Parcelable{ while (matcher.find()){ int matchStart = matcher.start(1); int matchEnd = matcher.end(); - URLSpan[] spans = spannableStringT.getSpans(matchStart, matchEnd, URLSpan.class); - for (URLSpan span : spans) { - spannableStringT.removeSpan(span); + if( spannableStringT.length() < matchEnd) { + URLSpan[] spans = spannableStringT.getSpans(matchStart, matchEnd, URLSpan.class); + for (URLSpan span : spans) { + spannableStringT.removeSpan(span); + } } final String tag = spannableStringT.toString().substring(matchStart, matchEnd); if( matchEnd <= spannableStringT.toString().length() && matchEnd >= matchStart)