diff options
author | 2018-03-06 17:36:55 +0000 | |
---|---|---|
committer | 2018-03-06 17:36:55 +0000 | |
commit | 4f8464de33fa26b0a7d7cfef7a342d71390b68d1 (patch) | |
tree | 6eb18302d1576795243d6c253c218e3d38877d2d | |
parent | 554f8157f461fb3e981a57fb9c1d2855110db7c7 (diff) | |
parent | bda1d9e740f2a1db186baedc41524cd2d56d145a (diff) |
Merge "Don't use highlighting in non-selectable text. Also fixes potential discrepancy in indexes for Linkified entities."
-rw-r--r-- | core/java/android/view/textclassifier/TextLinks.java | 2 | ||||
-rw-r--r-- | core/java/android/widget/Editor.java | 6 | ||||
-rw-r--r-- | core/java/android/widget/SelectionActionModeHelper.java | 17 | ||||
-rw-r--r-- | core/java/android/widget/TextView.java | 19 |
4 files changed, 26 insertions, 18 deletions
diff --git a/core/java/android/view/textclassifier/TextLinks.java b/core/java/android/view/textclassifier/TextLinks.java index 884cbe861deb..af9fc7d16655 100644 --- a/core/java/android/view/textclassifier/TextLinks.java +++ b/core/java/android/view/textclassifier/TextLinks.java @@ -505,7 +505,7 @@ public final class TextLinks implements Parcelable { public void onClick(View widget) { if (widget instanceof TextView) { final TextView textView = (TextView) widget; - textView.requestActionMode(mTextLink); + textView.requestActionMode(this); } } diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 02f35ca0d4d7..fe49c02d9145 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -108,7 +108,6 @@ import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputMethodManager; import android.view.textclassifier.TextClassification; import android.view.textclassifier.TextClassificationManager; -import android.view.textclassifier.TextLinks; import android.widget.AdapterView.OnItemClickListener; import android.widget.TextView.Drawables; import android.widget.TextView.OnEditorActionListener; @@ -2118,13 +2117,12 @@ public class Editor { getSelectionActionModeHelper().startSelectionActionModeAsync(adjustSelection); } - void startLinkActionModeAsync(TextLinks.TextLink link) { - Preconditions.checkNotNull(link); + void startLinkActionModeAsync(int start, int end) { if (!(mTextView.getText() instanceof Spannable)) { return; } stopTextActionMode(); - getSelectionActionModeHelper().startLinkActionModeAsync(link); + getSelectionActionModeHelper().startLinkActionModeAsync(start, end); } /** diff --git a/core/java/android/widget/SelectionActionModeHelper.java b/core/java/android/widget/SelectionActionModeHelper.java index c1a5e0778f7c..629f53192813 100644 --- a/core/java/android/widget/SelectionActionModeHelper.java +++ b/core/java/android/widget/SelectionActionModeHelper.java @@ -39,7 +39,6 @@ import android.view.textclassifier.TextClassification; import android.view.textclassifier.TextClassificationConstants; import android.view.textclassifier.TextClassificationManager; import android.view.textclassifier.TextClassifier; -import android.view.textclassifier.TextLinks; import android.view.textclassifier.TextSelection; import android.widget.Editor.SelectionModifierCursorController; @@ -133,17 +132,13 @@ public final class SelectionActionModeHelper { /** * Starts Link ActionMode. */ - public void startLinkActionModeAsync(TextLinks.TextLink textLink) { - mSelectionTracker.onOriginalSelection( - getText(mTextView), - mTextView.getSelectionStart(), - mTextView.getSelectionEnd(), - true /*isLink*/); + public void startLinkActionModeAsync(int start, int end) { + mSelectionTracker.onOriginalSelection(getText(mTextView), start, end, true /*isLink*/); cancelAsyncTask(); if (skipTextClassification()) { startLinkActionMode(null); } else { - resetTextClassificationHelper(textLink.getStart(), textLink.getEnd()); + resetTextClassificationHelper(start, end); mTextClassificationAsyncTask = new TextClassificationAsyncTask( mTextView, mTextClassificationHelper.getTimeoutDuration(), @@ -244,15 +239,15 @@ public final class SelectionActionModeHelper { @Editor.TextActionMode int actionMode, @Nullable SelectionResult result) { final CharSequence text = getText(mTextView); if (result != null && text instanceof Spannable - && (mTextView.isTextSelectable() - || mTextView.isTextEditable() - || actionMode == Editor.TextActionMode.TEXT_LINK)) { + && (mTextView.isTextSelectable() || mTextView.isTextEditable())) { // Do not change the selection if TextClassifier should be dark launched. if (!mTextClassificationSettings.isModelDarkLaunchEnabled()) { Selection.setSelection((Spannable) text, result.mStart, result.mEnd); mTextView.invalidate(); } mTextClassification = result.mClassification; + } else if (actionMode == Editor.TextActionMode.TEXT_LINK) { + mTextClassification = result.mClassification; } else { mTextClassification = null; } diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index b482d4715d48..6e40ea85e34a 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -11499,12 +11499,27 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @return Whether or not we're attempting to start the action mode. * @hide */ - public boolean requestActionMode(@NonNull TextLinks.TextLink link) { + public boolean requestActionMode(@NonNull TextLinks.TextLinkSpan clickedSpan) { + Preconditions.checkNotNull(clickedSpan); + final TextLinks.TextLink link = clickedSpan.getTextLink(); Preconditions.checkNotNull(link); createEditorIfNeeded(); - mEditor.startLinkActionModeAsync(link); + + if (!(mText instanceof Spanned)) { + return false; + } + + final int start = ((Spanned) mText).getSpanStart(clickedSpan); + final int end = ((Spanned) mText).getSpanEnd(clickedSpan); + + if (start < 0 || end < 1) { + return false; + } + + mEditor.startLinkActionModeAsync(start, end); return true; } + /** * @hide */ |