diff options
| author | Abodunrinwa Toki <toki@google.com> | 2018-03-27 00:04:06 +0100 |
|---|---|---|
| committer | Abodunrinwa Toki <toki@google.com> | 2018-04-01 20:04:47 +0100 |
| commit | 080c8542b68cf17a0441862c404cb49ce0e86cfe (patch) | |
| tree | 673eb1f9a99b63b42f615f60c23a9c46aee8848f /core/java/android/widget/SelectionActionModeHelper.java | |
| parent | 7a33063b39c0a48e57d7146adfc4640a8944adec (diff) | |
TextClassifier API updates.
1. Wraps TC queries in Request objects
2. Adds create/destroyTextClassificationSession system APIs
3. Adds the session Ids to system API calls
4. Change setSignature() to setId() on result objects
5. Plumbing to make the API updates work as things currently work
6. Hide Linkify.addLinksAsync APIs
Bug: 74461129
Test: bit FrameworksCoreTests:android.view.textclassifier.TextClassificationManagerTest
Test: bit CtsViewTestCases:android.view.textclassifier.cts.TextClassificationManagerTest
Test: bit CtsWidgetTestCases:android.widget.cts.TextViewTest
Test: bit FrameworksCoreTests:android.widget.TextViewActivityTest
Test: bit FrameworksCoreTests:android.view.textclassifier.TextClassificationTest
Test: bit FrameworksCoreTests:android.view.textclassifier.TextSelectionTest
Test: bit FrameworksCoreTests:android.view.textclassifier.TextLinksTest
Change-Id: I933ada8b37ef9893331a265e3b4fc08e043f1029
Diffstat (limited to 'core/java/android/widget/SelectionActionModeHelper.java')
| -rw-r--r-- | core/java/android/widget/SelectionActionModeHelper.java | 93 |
1 files changed, 52 insertions, 41 deletions
diff --git a/core/java/android/widget/SelectionActionModeHelper.java b/core/java/android/widget/SelectionActionModeHelper.java index 8b49ccbaafdf..b3327a70d579 100644 --- a/core/java/android/widget/SelectionActionModeHelper.java +++ b/core/java/android/widget/SelectionActionModeHelper.java @@ -499,7 +499,8 @@ public final class SelectionActionModeHelper { mOriginalEnd = mSelectionEnd = selectionEnd; mAllowReset = false; maybeInvalidateLogger(); - mLogger.logSelectionStarted(text, selectionStart, + mLogger.logSelectionStarted(mTextView.getTextClassificationSession(), + text, selectionStart, isLink ? SelectionEvent.INVOCATION_LINK : SelectionEvent.INVOCATION_MANUAL); } @@ -633,6 +634,7 @@ public final class SelectionActionModeHelper { mSelectionStart, mSelectionEnd, SelectionEvent.ACTION_ABANDON, null /* classification */); mSelectionStart = mSelectionEnd = -1; + mTextView.getTextClassificationSession().destroy(); mIsPending = false; } } @@ -661,16 +663,16 @@ public final class SelectionActionModeHelper { private static final String LOG_TAG = "SelectionMetricsLogger"; private static final Pattern PATTERN_WHITESPACE = Pattern.compile("\\s+"); - private final Supplier<TextClassifier> mTextClassificationSession; private final Logger mLogger; private final boolean mEditTextLogger; private final BreakIterator mTokenIterator; + + @Nullable private TextClassifier mClassificationSession; private int mStartIndex; private String mText; SelectionMetricsLogger(TextView textView) { Preconditions.checkNotNull(textView); - mTextClassificationSession = textView::getTextClassificationSession; mLogger = textView.getTextClassifier().getLogger( new Logger.Config(textView.getContext(), getWidetType(textView), null)); mEditTextLogger = textView.isTextEditable(); @@ -689,6 +691,7 @@ public final class SelectionActionModeHelper { } public void logSelectionStarted( + TextClassifier classificationSession, CharSequence text, int index, @InvocationMethod int invocationMethod) { try { @@ -701,7 +704,8 @@ public final class SelectionActionModeHelper { mStartIndex = index; mLogger.logSelectionStartedEvent(invocationMethod, 0); // TODO: Remove the above legacy logging. - mTextClassificationSession.get().onSelectionEvent( + mClassificationSession = classificationSession; + mClassificationSession.onSelectionEvent( SelectionEvent.createSelectionStartedEvent(invocationMethod, 0)); } catch (Exception e) { // Avoid crashes due to logging. @@ -719,23 +723,29 @@ public final class SelectionActionModeHelper { mLogger.logSelectionModifiedEvent( wordIndices[0], wordIndices[1], selection); // TODO: Remove the above legacy logging. - mTextClassificationSession.get().onSelectionEvent( - SelectionEvent.createSelectionModifiedEvent( - wordIndices[0], wordIndices[1], selection)); + if (mClassificationSession != null) { + mClassificationSession.onSelectionEvent( + SelectionEvent.createSelectionModifiedEvent( + wordIndices[0], wordIndices[1], selection)); + } } else if (classification != null) { mLogger.logSelectionModifiedEvent( wordIndices[0], wordIndices[1], classification); // TODO: Remove the above legacy logging. - mTextClassificationSession.get().onSelectionEvent( - SelectionEvent.createSelectionModifiedEvent( - wordIndices[0], wordIndices[1], classification)); + if (mClassificationSession != null) { + mClassificationSession.onSelectionEvent( + SelectionEvent.createSelectionModifiedEvent( + wordIndices[0], wordIndices[1], classification)); + } } else { mLogger.logSelectionModifiedEvent( wordIndices[0], wordIndices[1]); // TODO: Remove the above legacy logging. - mTextClassificationSession.get().onSelectionEvent( - SelectionEvent.createSelectionModifiedEvent( - wordIndices[0], wordIndices[1])); + if (mClassificationSession != null) { + mClassificationSession.onSelectionEvent( + SelectionEvent.createSelectionModifiedEvent( + wordIndices[0], wordIndices[1])); + } } } catch (Exception e) { // Avoid crashes due to logging. @@ -755,24 +765,24 @@ public final class SelectionActionModeHelper { mLogger.logSelectionActionEvent( wordIndices[0], wordIndices[1], action, classification); // TODO: Remove the above legacy logging. - mTextClassificationSession.get().onSelectionEvent( - SelectionEvent.createSelectionActionEvent( - wordIndices[0], wordIndices[1], action, classification)); + if (mClassificationSession != null) { + mClassificationSession.onSelectionEvent( + SelectionEvent.createSelectionActionEvent( + wordIndices[0], wordIndices[1], action, classification)); + } } else { mLogger.logSelectionActionEvent( wordIndices[0], wordIndices[1], action); // TODO: Remove the above legacy logging. - mTextClassificationSession.get().onSelectionEvent( - SelectionEvent.createSelectionActionEvent( - wordIndices[0], wordIndices[1], action)); + if (mClassificationSession != null) { + mClassificationSession.onSelectionEvent( + SelectionEvent.createSelectionActionEvent( + wordIndices[0], wordIndices[1], action)); + } } } catch (Exception e) { // Avoid crashes due to logging. Log.e(LOG_TAG, "" + e.getMessage(), e); - } finally { - if (SelectionEvent.isTerminal(action)) { - mTextClassificationSession.get().destroy(); - } } } @@ -926,9 +936,8 @@ public final class SelectionActionModeHelper { /** End index relative to mText. */ private int mSelectionEnd; - private final TextSelection.Options mSelectionOptions = new TextSelection.Options(); - private final TextClassification.Options mClassificationOptions = - new TextClassification.Options(); + @Nullable + private LocaleList mDefaultLocales; /** Trimmed text starting from mTrimStart in mText. */ private CharSequence mTrimmedText; @@ -966,9 +975,7 @@ public final class SelectionActionModeHelper { Preconditions.checkArgument(selectionEnd > selectionStart); mSelectionStart = selectionStart; mSelectionEnd = selectionEnd; - mClassificationOptions.setDefaultLocales(locales); - mSelectionOptions.setDefaultLocales(locales) - .setDarkLaunchAllowed(true); + mDefaultLocales = locales; } @WorkerThread @@ -983,13 +990,16 @@ public final class SelectionActionModeHelper { trimText(); final TextSelection selection; if (mContext.getApplicationInfo().targetSdkVersion > Build.VERSION_CODES.O_MR1) { - selection = mTextClassifier.get().suggestSelection( - mTrimmedText, mRelativeStart, mRelativeEnd, mSelectionOptions); + final TextSelection.Request request = new TextSelection.Request.Builder( + mTrimmedText, mRelativeStart, mRelativeEnd) + .setDefaultLocales(mDefaultLocales) + .setDarkLaunchAllowed(true) + .build(); + selection = mTextClassifier.get().suggestSelection(request); } else { // Use old APIs. selection = mTextClassifier.get().suggestSelection( - mTrimmedText, mRelativeStart, mRelativeEnd, - mSelectionOptions.getDefaultLocales()); + mTrimmedText, mRelativeStart, mRelativeEnd, mDefaultLocales); } // Do not classify new selection boundaries if TextClassifier should be dark launched. if (!mDarkLaunchEnabled) { @@ -1024,25 +1034,26 @@ public final class SelectionActionModeHelper { if (!Objects.equals(mText, mLastClassificationText) || mSelectionStart != mLastClassificationSelectionStart || mSelectionEnd != mLastClassificationSelectionEnd - || !Objects.equals( - mClassificationOptions.getDefaultLocales(), - mLastClassificationLocales)) { + || !Objects.equals(mDefaultLocales, mLastClassificationLocales)) { mLastClassificationText = mText; mLastClassificationSelectionStart = mSelectionStart; mLastClassificationSelectionEnd = mSelectionEnd; - mLastClassificationLocales = mClassificationOptions.getDefaultLocales(); + mLastClassificationLocales = mDefaultLocales; trimText(); final TextClassification classification; if (mContext.getApplicationInfo().targetSdkVersion > Build.VERSION_CODES.O_MR1) { - classification = mTextClassifier.get().classifyText( - mTrimmedText, mRelativeStart, mRelativeEnd, mClassificationOptions); + final TextClassification.Request request = + new TextClassification.Request.Builder( + mTrimmedText, mRelativeStart, mRelativeEnd) + .setDefaultLocales(mDefaultLocales) + .build(); + classification = mTextClassifier.get().classifyText(request); } else { // Use old APIs. classification = mTextClassifier.get().classifyText( - mTrimmedText, mRelativeStart, mRelativeEnd, - mClassificationOptions.getDefaultLocales()); + mTrimmedText, mRelativeStart, mRelativeEnd, mDefaultLocales); } mLastClassificationResult = new SelectionResult( mSelectionStart, mSelectionEnd, classification, selection); |
