Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6fbb5c1c authored by Siyamed Sinir's avatar Siyamed Sinir Committed by Android (Google) Code Review
Browse files

Merge "TextView setText/append methods set movement method"

parents 711bcdea 4ba0aa59
Loading
Loading
Loading
Loading
+55 −27
Original line number Diff line number Diff line
@@ -3366,10 +3366,17 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    }

    /**
     * Sets whether the movement method will automatically be set to
     * {@link LinkMovementMethod} if {@link #setAutoLinkMask} has been
     * set to nonzero and links are detected in {@link #setText}.
     * The default is true.
     * Sets whether the movement method will automatically be set to {@link LinkMovementMethod}
     * after {@link #setText} or {@link #append} is called. The movement method is set if one of the
     * following is true:
     * <ul>
     * <li>{@link #setAutoLinkMask} has been set to nonzero and links are detected in
     * {@link #setText} or {@link #append}.
     * <li>The input for {@link #setText} or {@link #append} contains a {@link ClickableSpan}.
     * </ul>
     *
     * <p>This function does not have an immediate effect, movement method will be set only after a
     * call to {@link #setText} or {@link #append}. The default is true.</p>
     *
     * @attr ref android.R.styleable#TextView_linksClickable
     */
@@ -3379,10 +3386,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    }

    /**
     * Returns whether the movement method will automatically be set to
     * {@link LinkMovementMethod} if {@link #setAutoLinkMask} has been
     * set to nonzero and links are detected in {@link #setText}.
     * The default is true.
     * Returns whether the movement method will automatically be set to {@link LinkMovementMethod}
     * after {@link #setText} or {@link #append} is called.
     *
     * See {@link #setLinksClickable} for details.
     *
     * <p>The default is true.</p>
     *
     * @see #setLinksClickable
     *
     * @attr ref android.R.styleable#TextView_linksClickable
     */
@@ -3976,15 +3987,21 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener

        ((Editable) mText).append(text, start, end);

        boolean hasClickableSpans = false;
        if (mAutoLinkMask != 0) {
            boolean linksWereAdded = Linkify.addLinks((Spannable) mText, mAutoLinkMask);
            // Do not change the movement method for text that support text selection as it
            hasClickableSpans = Linkify.addLinks((Spannable) mText, mAutoLinkMask);
        } else if (mLinksClickable && text instanceof Spanned) {
            ClickableSpan[] clickableSpans =
                    ((Spanned) text).getSpans(0, text.length(), ClickableSpan.class);
            hasClickableSpans = clickableSpans != null && clickableSpans.length > 0;
        }

        // Do not change the movement method for text that supports text selection as it
        // would prevent an arbitrary cursor displacement.
            if (linksWereAdded && mLinksClickable && !textCanBeSelected()) {
        if (hasClickableSpans && mLinksClickable && !textCanBeSelected()) {
            setMovementMethod(LinkMovementMethod.getInstance());
        }
    }
    }

    private void updateTextColors() {
        boolean inval = false;
@@ -4327,6 +4344,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
            text = TextUtils.stringOrSpannedString(text);
        }

        boolean hasClickableSpans = false;
        if (mAutoLinkMask != 0) {
            Spannable s2;

@@ -4336,10 +4354,21 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                s2 = mSpannableFactory.newSpannable(text);
            }

            if (Linkify.addLinks(s2, mAutoLinkMask)) {
            hasClickableSpans = Linkify.addLinks(s2, mAutoLinkMask);
            if (hasClickableSpans) {
                text = s2;
                type = (type == BufferType.EDITABLE) ? BufferType.EDITABLE : BufferType.SPANNABLE;
            }
        } else if (mLinksClickable && text instanceof Spanned) {
            ClickableSpan[] clickableSpans =
                    ((Spanned) text).getSpans(0, text.length(), ClickableSpan.class);
            hasClickableSpans = clickableSpans != null && clickableSpans.length > 0;
            if (hasClickableSpans && !(text instanceof Spannable)) {
                text = mSpannableFactory.newSpannable(text);
            }
        }

        if (hasClickableSpans) {
            type = (type == BufferType.EDITABLE) ? BufferType.EDITABLE : BufferType.SPANNABLE;
            /*
             * We must go ahead and set the text before changing the
             * movement method, because setMovementMethod() may call
@@ -4347,13 +4376,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
             */
            mText = text;

                // Do not change the movement method for text that support text selection as it
            // Do not change the movement method for text that supports text selection as it
            // would prevent an arbitrary cursor displacement.
            if (mLinksClickable && !textCanBeSelected()) {
                setMovementMethod(LinkMovementMethod.getInstance());
            }
        }
        }

        mBufferType = type;
        mText = text;
+2 −1
Original line number Diff line number Diff line
@@ -4248,7 +4248,8 @@ i
        <attr name="autoLink" />
        <!-- If set to false, keeps the movement method from being set
             to the link movement method even if autoLink causes links
             to be found. -->
             to be found or the input text contains a
             {@link android.text.style.ClickableSpan ClickableSpan}. -->
        <attr name="linksClickable" format="boolean" />
        <!-- If set, specifies that this TextView has a numeric input method.
             The default is false.