From c7654db62db0e07877afd2fd8f6e01c10d0a878c Mon Sep 17 00:00:00 2001 From: Mariotaku Lee Date: Wed, 2 Mar 2016 17:08:28 +0800 Subject: [PATCH] fixed #433 --- .../twidere/api/twitter/model/Status.java | 3 ++ .../twidere/model/ParcelableStatus.java | 3 ++ .../hotmobi/util/TwidereDataUtils.java | 2 +- .../fragment/support/StatusFragment.java | 5 ++- .../fragment/support/UserFragment.java | 5 ++- .../model/util/ParcelableStatusUtils.java | 1 + .../twidere/util/OnLinkClickHandler.java | 2 +- .../twidere/util/TwidereLinkify.java | 38 ++++++++++++------- .../view/holder/MessageViewHolder.java | 3 +- .../twidere/view/holder/StatusViewHolder.java | 7 ++-- 10 files changed, 45 insertions(+), 24 deletions(-) diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/api/twitter/model/Status.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/api/twitter/model/Status.java index b95cfadd9..fa4d840ae 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/api/twitter/model/Status.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/api/twitter/model/Status.java @@ -281,6 +281,9 @@ public class Status extends TwitterResponseObject implements Comparable, return entities.getUrls(); } + public Entities getEntities() { + return entities; + } public UserMentionEntity[] getUserMentionEntities() { if (entities == null) return null; diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableStatus.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableStatus.java index 167111bdc..85aea5ff9 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableStatus.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableStatus.java @@ -437,6 +437,9 @@ public class ParcelableStatus implements Parcelable, Comparable urls = mExtractor.extractURLsWithIndices(ParseUtils.parseString(string)); for (final Extractor.Entity entity : urls) { final int start = entity.getStart(), end = entity.getEnd(); @@ -220,7 +230,7 @@ public final class TwidereLinkify implements Constants { || string.getSpans(start, end, URLSpan.class).length > 0) { continue; } - applyLink(entity.getValue(), start, end, string, accountId, extraId, LINK_TYPE_LINK, sensitive, highlightOption, listener); + applyLink(entity.getValue(), start, end, string, accountId, extraId, LINK_TYPE_ENTITY_URL, sensitive, highlightOption, listener); } break; } diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/holder/MessageViewHolder.java b/twidere/src/main/java/org/mariotaku/twidere/view/holder/MessageViewHolder.java index e46f8aefa..3d3992875 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/holder/MessageViewHolder.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/holder/MessageViewHolder.java @@ -82,7 +82,8 @@ public class MessageViewHolder extends ViewHolder { final ParcelableMedia[] media = JsonSerializer.parseArray(cursor.getString(indices.media), ParcelableMedia.class); final Spanned text = HtmlSpanBuilder.fromHtml(cursor.getString(indices.text_html)); - textView.setText(linkify.applyAllLinks(text, accountId, false)); + // Detect entity support + textView.setText(linkify.applyAllLinks(text, accountId, false, true)); time.setText(Utils.formatToLongTimeString(context, timestamp)); mediaContainer.setVisibility(media != null && media.length > 0 ? View.VISIBLE : View.GONE); mediaContainer.displayMedia(media, loader, accountId, getLayoutPosition(), true, diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.java b/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.java index 908f74086..971eeff36 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.java @@ -136,7 +136,7 @@ public class StatusViewHolder extends ViewHolder implements Constants, IStatusVi TWIDERE_PREVIEW_TEXT_UNESCAPED); if (text instanceof Spanned) { textView.setText(linkify.applyAllLinks(text, -1, -1, false, - adapter.getLinkHighlightingStyle())); + adapter.getLinkHighlightingStyle(), true)); } } else { textView.setText(toPlainText(TWIDERE_PREVIEW_TEXT_HTML)); @@ -206,6 +206,7 @@ public class StatusViewHolder extends ViewHolder implements Constants, IStatusVi } + boolean skipLinksInText = status.extras != null && status.extras.support_entities; if (status.is_quote && ArrayUtils.isEmpty(status.media)) { statusContentSpace.setVisibility(View.VISIBLE); @@ -224,7 +225,7 @@ public class StatusViewHolder extends ViewHolder implements Constants, IStatusVi if (text instanceof Spanned) { quotedTextView.setText(linkify.applyAllLinks(text, status.account_id, getLayoutPosition(), status.is_possibly_sensitive, - adapter.getLinkHighlightingStyle())); + adapter.getLinkHighlightingStyle(), skipLinksInText)); } } else { final String text = status.quoted_text_unescaped; @@ -318,7 +319,7 @@ public class StatusViewHolder extends ViewHolder implements Constants, IStatusVi final CharSequence text = HtmlSpanBuilder.fromHtml(status.text_html, status.text_unescaped); if (text instanceof Spanned) { textView.setText(linkify.applyAllLinks(text, status.account_id, getLayoutPosition(), - status.is_possibly_sensitive, adapter.getLinkHighlightingStyle())); + status.is_possibly_sensitive, adapter.getLinkHighlightingStyle(), skipLinksInText)); } }