Loading core/java/android/text/method/LinkMovementMethod.java +56 −43 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.text.style.ClickableSpan; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.textclassifier.TextLinks.TextLinkSpan; import android.widget.TextView; /** Loading Loading @@ -135,12 +136,18 @@ public class LinkMovementMethod extends ScrollingMovementMethod { return false; } ClickableSpan[] link = buffer.getSpans(selStart, selEnd, ClickableSpan.class); ClickableSpan[] links = buffer.getSpans(selStart, selEnd, ClickableSpan.class); if (link.length != 1) if (links.length != 1) { return false; } link[0].onClick(widget); ClickableSpan link = links[0]; if (link instanceof TextLinkSpan) { ((TextLinkSpan) link).onClick(widget, TextLinkSpan.INVOCATION_METHOD_KEYBOARD); } else { link.onClick(widget); } break; case UP: Loading Loading @@ -215,8 +222,14 @@ public class LinkMovementMethod extends ScrollingMovementMethod { ClickableSpan[] links = buffer.getSpans(off, off, ClickableSpan.class); if (links.length != 0) { ClickableSpan link = links[0]; if (action == MotionEvent.ACTION_UP) { links[0].onClick(widget); if (link instanceof TextLinkSpan) { ((TextLinkSpan) link).onClick( widget, TextLinkSpan.INVOCATION_METHOD_TOUCH); } else { link.onClick(widget); } } else if (action == MotionEvent.ACTION_DOWN) { if (widget.getContext().getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.P) { Loading @@ -225,8 +238,8 @@ public class LinkMovementMethod extends ScrollingMovementMethod { widget.hideFloatingToolbar(HIDE_FLOATING_TOOLBAR_DELAY_MS); } Selection.setSelection(buffer, buffer.getSpanStart(links[0]), buffer.getSpanEnd(links[0])); buffer.getSpanStart(link), buffer.getSpanEnd(link)); } return true; } else { Loading core/java/android/view/textclassifier/TextLinks.java +30 −6 Original line number Diff line number Diff line Loading @@ -503,6 +503,22 @@ public final class TextLinks implements Parcelable { */ public static class TextLinkSpan extends ClickableSpan { /** * How the clickspan is triggered. * @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef({INVOCATION_METHOD_UNSPECIFIED, INVOCATION_METHOD_TOUCH, INVOCATION_METHOD_KEYBOARD}) public @interface InvocationMethod {} /** @hide */ public static final int INVOCATION_METHOD_UNSPECIFIED = -1; /** @hide */ public static final int INVOCATION_METHOD_TOUCH = 0; /** @hide */ public static final int INVOCATION_METHOD_KEYBOARD = 1; private final TextLink mTextLink; public TextLinkSpan(@NonNull TextLink textLink) { Loading @@ -511,16 +527,24 @@ public final class TextLinks implements Parcelable { @Override public void onClick(View widget) { onClick(widget, INVOCATION_METHOD_UNSPECIFIED); } /** @hide */ public final void onClick(View widget, @InvocationMethod int invocationMethod) { if (widget instanceof TextView) { final TextView textView = (TextView) widget; final Context context = textView.getContext(); if (TextClassificationManager.getSettings(context).isSmartLinkifyEnabled()) { if (textView.requestFocus()) { switch (invocationMethod) { case INVOCATION_METHOD_TOUCH: textView.requestActionMode(this); } else { // If textView can not take focus, then simply handle the click as it will // be difficult to get rid of the floating action mode. break; case INVOCATION_METHOD_KEYBOARD:// fall though case INVOCATION_METHOD_UNSPECIFIED: // fall through default: textView.handleClick(this); break; } } else { if (mTextLink.mUrlSpan != null) { Loading Loading
core/java/android/text/method/LinkMovementMethod.java +56 −43 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.text.style.ClickableSpan; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.textclassifier.TextLinks.TextLinkSpan; import android.widget.TextView; /** Loading Loading @@ -135,12 +136,18 @@ public class LinkMovementMethod extends ScrollingMovementMethod { return false; } ClickableSpan[] link = buffer.getSpans(selStart, selEnd, ClickableSpan.class); ClickableSpan[] links = buffer.getSpans(selStart, selEnd, ClickableSpan.class); if (link.length != 1) if (links.length != 1) { return false; } link[0].onClick(widget); ClickableSpan link = links[0]; if (link instanceof TextLinkSpan) { ((TextLinkSpan) link).onClick(widget, TextLinkSpan.INVOCATION_METHOD_KEYBOARD); } else { link.onClick(widget); } break; case UP: Loading Loading @@ -215,8 +222,14 @@ public class LinkMovementMethod extends ScrollingMovementMethod { ClickableSpan[] links = buffer.getSpans(off, off, ClickableSpan.class); if (links.length != 0) { ClickableSpan link = links[0]; if (action == MotionEvent.ACTION_UP) { links[0].onClick(widget); if (link instanceof TextLinkSpan) { ((TextLinkSpan) link).onClick( widget, TextLinkSpan.INVOCATION_METHOD_TOUCH); } else { link.onClick(widget); } } else if (action == MotionEvent.ACTION_DOWN) { if (widget.getContext().getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.P) { Loading @@ -225,8 +238,8 @@ public class LinkMovementMethod extends ScrollingMovementMethod { widget.hideFloatingToolbar(HIDE_FLOATING_TOOLBAR_DELAY_MS); } Selection.setSelection(buffer, buffer.getSpanStart(links[0]), buffer.getSpanEnd(links[0])); buffer.getSpanStart(link), buffer.getSpanEnd(link)); } return true; } else { Loading
core/java/android/view/textclassifier/TextLinks.java +30 −6 Original line number Diff line number Diff line Loading @@ -503,6 +503,22 @@ public final class TextLinks implements Parcelable { */ public static class TextLinkSpan extends ClickableSpan { /** * How the clickspan is triggered. * @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef({INVOCATION_METHOD_UNSPECIFIED, INVOCATION_METHOD_TOUCH, INVOCATION_METHOD_KEYBOARD}) public @interface InvocationMethod {} /** @hide */ public static final int INVOCATION_METHOD_UNSPECIFIED = -1; /** @hide */ public static final int INVOCATION_METHOD_TOUCH = 0; /** @hide */ public static final int INVOCATION_METHOD_KEYBOARD = 1; private final TextLink mTextLink; public TextLinkSpan(@NonNull TextLink textLink) { Loading @@ -511,16 +527,24 @@ public final class TextLinks implements Parcelable { @Override public void onClick(View widget) { onClick(widget, INVOCATION_METHOD_UNSPECIFIED); } /** @hide */ public final void onClick(View widget, @InvocationMethod int invocationMethod) { if (widget instanceof TextView) { final TextView textView = (TextView) widget; final Context context = textView.getContext(); if (TextClassificationManager.getSettings(context).isSmartLinkifyEnabled()) { if (textView.requestFocus()) { switch (invocationMethod) { case INVOCATION_METHOD_TOUCH: textView.requestActionMode(this); } else { // If textView can not take focus, then simply handle the click as it will // be difficult to get rid of the floating action mode. break; case INVOCATION_METHOD_KEYBOARD:// fall though case INVOCATION_METHOD_UNSPECIFIED: // fall through default: textView.handleClick(this); break; } } else { if (mTextLink.mUrlSpan != null) { Loading