summaryrefslogtreecommitdiff
path: root/core/java/android/widget/SelectionActionModeHelper.java
diff options
context:
space:
mode:
authorAbodunrinwa Toki <toki@google.com>2018-03-27 00:04:06 +0100
committerAbodunrinwa Toki <toki@google.com>2018-04-01 20:04:47 +0100
commit080c8542b68cf17a0441862c404cb49ce0e86cfe (patch)
tree673eb1f9a99b63b42f615f60c23a9c46aee8848f /core/java/android/widget/SelectionActionModeHelper.java
parent7a33063b39c0a48e57d7146adfc4640a8944adec (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.java93
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);