diff options
Diffstat (limited to 'app/src/main/java/app/fedilab/android/client')
-rw-r--r-- | app/src/main/java/app/fedilab/android/client/Entities/Account.java | 14 | ||||
-rw-r--r-- | app/src/main/java/app/fedilab/android/client/Entities/Status.java | 45 |
2 files changed, 33 insertions, 26 deletions
diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Account.java b/app/src/main/java/app/fedilab/android/client/Entities/Account.java index 0a6f3e98e..65e9ad7f5 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/Account.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/Account.java @@ -139,7 +139,7 @@ public class Account implements Parcelable { private String invite_request; private String created_by_application_id; private String invited_by_account_id; - private boolean emojiFound = false; + private transient boolean emojiFound = false; public Account() { } @@ -202,7 +202,7 @@ public class Account implements Parcelable { public static void makeAccountNameEmoji(final WeakReference<Context> contextWeakReference, Account account) { Context context = contextWeakReference.get(); - if ((context instanceof Activity && ((Activity) context).isFinishing()) || account.getDisplay_name() == null) + if ((context instanceof Activity && ((Activity) context).isFinishing()) || account == null || account.getDisplay_name() == null) return; account.setDisplayNameSpan(new SpannableString(account.getDisplay_name())); @@ -723,7 +723,7 @@ 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 Account idTar = this.getMoved_to_account(); - if (endPositionTar <= spannableString.toString().length() && endPositionTar >= startPositionTar) + if (startPositionTar >= 0 && endPositionTar <= spannableString.toString().length() && endPositionTar >= startPositionTar) spannableString.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View textView) { @@ -801,7 +801,7 @@ public class Account implements Parcelable { int matchStart = matcher.start(0); int matchEnd = matcher.end(); final String url = fieldSpan.toString().substring(matchStart, matchEnd); - if (matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart) { + if (matchStart >= 0 && matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart) { fieldSpan.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View textView) { @@ -832,7 +832,7 @@ public class Account implements Parcelable { int matchStart = matcher.start(0); int matchEnd = matcher.end(); final String email = fieldSpan.toString().substring(matchStart, matchEnd); - if (matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart) { + if (matchStart >= 0 && matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart) { fieldSpan.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View textView) { @@ -865,7 +865,7 @@ public class Account implements Parcelable { int matchStart = matcher.start(1); int matchEnd = matcher.end(); final String tag = fieldSpan.toString().substring(matchStart, matchEnd); - if (matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart) + if (matchStart >= 0 && matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart) fieldSpan.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View textView) { @@ -935,7 +935,7 @@ public class Account implements Parcelable { int matchStart = matcher.start(0); int matchEnd = matcher.end(); final String url = fieldSpan.toString().substring(matchStart, matchEnd); - if (matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart) { + if (matchStart >= 0 && matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart) { fieldSpan.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View textView) { diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Status.java b/app/src/main/java/app/fedilab/android/client/Entities/Status.java index edd0862c5..b9cd3f100 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/Status.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/Status.java @@ -145,17 +145,17 @@ public class Status implements Parcelable { private Card card; private String language; private boolean isTranslated = false; - private boolean isEmojiFound = false; - private boolean isPollEmojiFound = false; - private boolean isImageFound = false; - private boolean isEmojiTranslateFound = false; + private transient boolean isEmojiFound = false; + private transient boolean isPollEmojiFound = false; + private transient boolean isImageFound = false; + private transient boolean isEmojiTranslateFound = false; private boolean isTranslationShown = false; private boolean isNew = false; private boolean isVisible = true; private boolean fetchMore = false; private String content, contentCW, contentTranslated; private SpannableString contentSpan, contentSpanCW, contentSpanTranslated; - private RetrieveFeedsAsyncTask.Type type; + private transient RetrieveFeedsAsyncTask.Type type; private int itemViewType; private String conversationId; private boolean isExpanded = false; @@ -184,9 +184,9 @@ public class Status implements Parcelable { private List<String> imageURL; private int viewType; private boolean isFocused = false; - private long db_id; - private boolean commentsFetched = false; - private List<Status> comments = new ArrayList<>(); + private transient long db_id; + private transient boolean commentsFetched = false; + private transient List<Status> comments = new ArrayList<>(); public Status() { } @@ -423,6 +423,7 @@ public class Status implements Parcelable { HashMap<String, String> targetedURL = new HashMap<>(); HashMap<String, Account> accountsMentionUnknown = new HashMap<>(); String liveInstance = Helper.getLiveInstance(context); + int i = 1; while (matcher.find()) { String key; @@ -433,14 +434,14 @@ public class Status implements Parcelable { key = key.substring(1); if (!key.startsWith("#") && !key.startsWith("@") && !key.trim().equals("") && !Objects.requireNonNull(matcher.group(2)).contains("search?tag=") && !Objects.requireNonNull(matcher.group(2)).contains(liveInstance + "/users/")) { - String url; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { url = Html.fromHtml(matcher.group(2), Html.FROM_HTML_MODE_LEGACY).toString(); } else { url = Html.fromHtml(matcher.group(2)).toString(); } - targetedURL.put(key, url); + targetedURL.put(key + "|" + i, url); + i++; } else if (key.startsWith("@") || Objects.requireNonNull(matcher.group(2)).contains(liveInstance + "/users/")) { String acct; String url; @@ -524,7 +525,7 @@ public class Status implements Parcelable { int matchStart = matcher.start(2); int matchEnd = matcher.end(); final String twittername = matcher.group(2); - if (matchEnd <= spannableStringT.toString().length() && matchEnd >= matchStart) + if (matchStart >= 0 && matchEnd <= spannableStringT.toString().length() && matchEnd >= matchStart) spannableStringT.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View textView) { @@ -573,7 +574,7 @@ public class Status implements Parcelable { endPosition = startPosition + key.length(); } //Accounts can be mentioned several times so we have to loop - if (endPosition <= spannableStringT.toString().length() && endPosition >= startPosition) + if (startPosition >= 0 && endPosition <= spannableStringT.toString().length() && endPosition >= startPosition) spannableStringT.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View textView) { @@ -603,14 +604,19 @@ public class Status implements Parcelable { } if (targetedURL.size() > 0) { Iterator it = targetedURL.entrySet().iterator(); + int endPosition = 0; while (it.hasNext()) { Map.Entry pair = (Map.Entry) it.next(); - String key = (String) pair.getKey(); + String key = ((String) pair.getKey()).split("\\|")[0]; + String url = (String) pair.getValue(); if (spannableStringT.toString().toLowerCase().contains(key.toLowerCase())) { //Accounts can be mentioned several times so we have to loop - int startPosition = spannableStringT.toString().toLowerCase().indexOf(key.toLowerCase()); - int endPosition = startPosition + key.length(); + int startPosition = spannableStringT.toString().toLowerCase().indexOf(key.toLowerCase(), endPosition); + if (startPosition < 0) { + startPosition = 0; + } + endPosition = startPosition + key.length(); if (key.contains("…") && !key.endsWith("…")) { key = key.split("…")[0] + "…"; SpannableStringBuilder ssb = new SpannableStringBuilder(); @@ -782,7 +788,7 @@ public class Status implements Parcelable { int matchStart = matcher.start(1); int matchEnd = matcher.end(); final String tag = spannableStringT.toString().substring(matchStart, matchEnd); - if (matchEnd <= spannableStringT.toString().length() && matchEnd >= matchStart) + if (matchStart >= 0 && matchEnd <= spannableStringT.toString().length() && matchEnd >= matchStart) spannableStringT.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View textView) { @@ -791,6 +797,7 @@ public class Status implements Parcelable { Bundle b = new Bundle(); b.putString("tag", tag.substring(1)); intent.putExtras(b); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } } @@ -811,7 +818,7 @@ public class Status implements Parcelable { int matchStart = matcher.start(1); int matchEnd = matcher.end(); final String groupname = spannableStringT.toString().substring(matchStart, matchEnd); - if (matchEnd <= spannableStringT.toString().length() && matchEnd >= matchStart) + if (matchStart >= 0 && matchEnd <= spannableStringT.toString().length() && matchEnd >= matchStart) spannableStringT.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View textView) { @@ -864,7 +871,7 @@ public class Status implements Parcelable { int matchStart = matcherALink.start(); int matchEnd = matcherALink.end(); final String url = contentSpanTranslated.toString().substring(matcherALink.start(1), matcherALink.end(1)); - if (matchEnd <= contentSpanTranslated.toString().length() && matchEnd >= matchStart) + if (matchStart >= 0 && matchEnd <= contentSpanTranslated.toString().length() && matchEnd >= matchStart) contentSpanTranslated.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View textView) { @@ -1307,7 +1314,7 @@ public class Status implements Parcelable { } public String getContent() { - return content; + return content.replaceAll("\\p{C}", "?"); } public void setContent(Context context, String content) { |