Merge "TextClassifier: API rename" into oc-dev

This commit is contained in:
TreeHugger Robot
2017-04-30 17:15:44 +00:00
committed by Android (Google) Code Review
9 changed files with 112 additions and 108 deletions

View File

@@ -48202,12 +48202,7 @@ package android.view.inputmethod {
package android.view.textclassifier {
public final class TextClassificationManager {
method public android.view.textclassifier.TextClassifier getTextClassifier();
method public void setTextClassifier(android.view.textclassifier.TextClassifier);
}
public final class TextClassificationResult {
public final class TextClassification {
method public float getConfidenceScore(java.lang.String);
method public java.lang.String getEntity(int);
method public int getEntityCount();
@@ -48218,19 +48213,24 @@ package android.view.textclassifier {
method public java.lang.String getText();
}
public static final class TextClassificationResult.Builder {
ctor public TextClassificationResult.Builder();
method public android.view.textclassifier.TextClassificationResult build();
method public android.view.textclassifier.TextClassificationResult.Builder setEntityType(java.lang.String, float);
method public android.view.textclassifier.TextClassificationResult.Builder setIcon(android.graphics.drawable.Drawable);
method public android.view.textclassifier.TextClassificationResult.Builder setIntent(android.content.Intent);
method public android.view.textclassifier.TextClassificationResult.Builder setLabel(java.lang.String);
method public android.view.textclassifier.TextClassificationResult.Builder setOnClickListener(android.view.View.OnClickListener);
method public android.view.textclassifier.TextClassificationResult.Builder setText(java.lang.String);
public static final class TextClassification.Builder {
ctor public TextClassification.Builder();
method public android.view.textclassifier.TextClassification build();
method public android.view.textclassifier.TextClassification.Builder setEntityType(java.lang.String, float);
method public android.view.textclassifier.TextClassification.Builder setIcon(android.graphics.drawable.Drawable);
method public android.view.textclassifier.TextClassification.Builder setIntent(android.content.Intent);
method public android.view.textclassifier.TextClassification.Builder setLabel(java.lang.String);
method public android.view.textclassifier.TextClassification.Builder setOnClickListener(android.view.View.OnClickListener);
method public android.view.textclassifier.TextClassification.Builder setText(java.lang.String);
}
public final class TextClassificationManager {
method public android.view.textclassifier.TextClassifier getTextClassifier();
method public void setTextClassifier(android.view.textclassifier.TextClassifier);
}
public abstract interface TextClassifier {
method public abstract android.view.textclassifier.TextClassificationResult getTextClassificationResult(java.lang.CharSequence, int, int, android.os.LocaleList);
method public abstract android.view.textclassifier.TextClassification classifyText(java.lang.CharSequence, int, int, android.os.LocaleList);
method public abstract android.view.textclassifier.TextSelection suggestSelection(java.lang.CharSequence, int, int, android.os.LocaleList);
field public static final android.view.textclassifier.TextClassifier NO_OP;
field public static final java.lang.String TYPE_ADDRESS = "address";

View File

@@ -51798,12 +51798,7 @@ package android.view.inputmethod {
package android.view.textclassifier {
public final class TextClassificationManager {
method public android.view.textclassifier.TextClassifier getTextClassifier();
method public void setTextClassifier(android.view.textclassifier.TextClassifier);
}
public final class TextClassificationResult {
public final class TextClassification {
method public float getConfidenceScore(java.lang.String);
method public java.lang.String getEntity(int);
method public int getEntityCount();
@@ -51814,19 +51809,24 @@ package android.view.textclassifier {
method public java.lang.String getText();
}
public static final class TextClassificationResult.Builder {
ctor public TextClassificationResult.Builder();
method public android.view.textclassifier.TextClassificationResult build();
method public android.view.textclassifier.TextClassificationResult.Builder setEntityType(java.lang.String, float);
method public android.view.textclassifier.TextClassificationResult.Builder setIcon(android.graphics.drawable.Drawable);
method public android.view.textclassifier.TextClassificationResult.Builder setIntent(android.content.Intent);
method public android.view.textclassifier.TextClassificationResult.Builder setLabel(java.lang.String);
method public android.view.textclassifier.TextClassificationResult.Builder setOnClickListener(android.view.View.OnClickListener);
method public android.view.textclassifier.TextClassificationResult.Builder setText(java.lang.String);
public static final class TextClassification.Builder {
ctor public TextClassification.Builder();
method public android.view.textclassifier.TextClassification build();
method public android.view.textclassifier.TextClassification.Builder setEntityType(java.lang.String, float);
method public android.view.textclassifier.TextClassification.Builder setIcon(android.graphics.drawable.Drawable);
method public android.view.textclassifier.TextClassification.Builder setIntent(android.content.Intent);
method public android.view.textclassifier.TextClassification.Builder setLabel(java.lang.String);
method public android.view.textclassifier.TextClassification.Builder setOnClickListener(android.view.View.OnClickListener);
method public android.view.textclassifier.TextClassification.Builder setText(java.lang.String);
}
public final class TextClassificationManager {
method public android.view.textclassifier.TextClassifier getTextClassifier();
method public void setTextClassifier(android.view.textclassifier.TextClassifier);
}
public abstract interface TextClassifier {
method public abstract android.view.textclassifier.TextClassificationResult getTextClassificationResult(java.lang.CharSequence, int, int, android.os.LocaleList);
method public abstract android.view.textclassifier.TextClassification classifyText(java.lang.CharSequence, int, int, android.os.LocaleList);
method public abstract android.view.textclassifier.TextSelection suggestSelection(java.lang.CharSequence, int, int, android.os.LocaleList);
field public static final android.view.textclassifier.TextClassifier NO_OP;
field public static final java.lang.String TYPE_ADDRESS = "address";

View File

@@ -48581,12 +48581,7 @@ package android.view.inputmethod {
package android.view.textclassifier {
public final class TextClassificationManager {
method public android.view.textclassifier.TextClassifier getTextClassifier();
method public void setTextClassifier(android.view.textclassifier.TextClassifier);
}
public final class TextClassificationResult {
public final class TextClassification {
method public float getConfidenceScore(java.lang.String);
method public java.lang.String getEntity(int);
method public int getEntityCount();
@@ -48597,19 +48592,24 @@ package android.view.textclassifier {
method public java.lang.String getText();
}
public static final class TextClassificationResult.Builder {
ctor public TextClassificationResult.Builder();
method public android.view.textclassifier.TextClassificationResult build();
method public android.view.textclassifier.TextClassificationResult.Builder setEntityType(java.lang.String, float);
method public android.view.textclassifier.TextClassificationResult.Builder setIcon(android.graphics.drawable.Drawable);
method public android.view.textclassifier.TextClassificationResult.Builder setIntent(android.content.Intent);
method public android.view.textclassifier.TextClassificationResult.Builder setLabel(java.lang.String);
method public android.view.textclassifier.TextClassificationResult.Builder setOnClickListener(android.view.View.OnClickListener);
method public android.view.textclassifier.TextClassificationResult.Builder setText(java.lang.String);
public static final class TextClassification.Builder {
ctor public TextClassification.Builder();
method public android.view.textclassifier.TextClassification build();
method public android.view.textclassifier.TextClassification.Builder setEntityType(java.lang.String, float);
method public android.view.textclassifier.TextClassification.Builder setIcon(android.graphics.drawable.Drawable);
method public android.view.textclassifier.TextClassification.Builder setIntent(android.content.Intent);
method public android.view.textclassifier.TextClassification.Builder setLabel(java.lang.String);
method public android.view.textclassifier.TextClassification.Builder setOnClickListener(android.view.View.OnClickListener);
method public android.view.textclassifier.TextClassification.Builder setText(java.lang.String);
}
public final class TextClassificationManager {
method public android.view.textclassifier.TextClassifier getTextClassifier();
method public void setTextClassifier(android.view.textclassifier.TextClassifier);
}
public abstract interface TextClassifier {
method public abstract android.view.textclassifier.TextClassificationResult getTextClassificationResult(java.lang.CharSequence, int, int, android.os.LocaleList);
method public abstract android.view.textclassifier.TextClassification classifyText(java.lang.CharSequence, int, int, android.os.LocaleList);
method public abstract android.view.textclassifier.TextSelection suggestSelection(java.lang.CharSequence, int, int, android.os.LocaleList);
field public static final android.view.textclassifier.TextClassifier NO_OP;
field public static final java.lang.String TYPE_ADDRESS = "address";

View File

@@ -33,12 +33,12 @@ import java.util.List;
/**
* Information for generating a widget to handle classified text.
*/
public final class TextClassificationResult {
public final class TextClassification {
/**
* @hide
*/
static final TextClassificationResult EMPTY = new TextClassificationResult.Builder().build();
static final TextClassification EMPTY = new TextClassification.Builder().build();
@NonNull private final String mText;
@Nullable private final Drawable mIcon;
@@ -49,7 +49,7 @@ public final class TextClassificationResult {
@NonNull private final List<String> mEntities;
private int mLogType;
private TextClassificationResult(
private TextClassification(
@NonNull String text,
Drawable icon,
String label,
@@ -147,7 +147,7 @@ public final class TextClassificationResult {
@Override
public String toString() {
return String.format("TextClassificationResult {"
return String.format("TextClassification {"
+ "text=%s, entities=%s, label=%s, intent=%s}",
mText, mEntityConfidence, mLabel, mIntent);
}
@@ -167,7 +167,7 @@ public final class TextClassificationResult {
}
/**
* Builder for building {@link TextClassificationResult}s.
* Builder for building {@link TextClassification} objects.
*/
public static final class Builder {
@@ -244,10 +244,10 @@ public final class TextClassificationResult {
}
/**
* Builds an returns a {@link TextClassificationResult}.
* Builds and returns a {@link TextClassification} object.
*/
public TextClassificationResult build() {
return new TextClassificationResult(
public TextClassification build() {
return new TextClassification(
mText, mIcon, mLabel, mIntent, mOnClickListener, mEntityConfidence, mLogType);
}
}

View File

@@ -20,6 +20,7 @@ import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StringDef;
import android.annotation.WorkerThread;
import android.os.LocaleList;
import java.lang.annotation.Retention;
@@ -62,9 +63,9 @@ public interface TextClassifier {
}
@Override
public TextClassificationResult getTextClassificationResult(
public TextClassification classifyText(
CharSequence text, int startIndex, int endIndex, LocaleList defaultLocales) {
return TextClassificationResult.EMPTY;
return TextClassification.EMPTY;
}
@Override
@@ -89,6 +90,7 @@ public interface TextClassifier {
* @throws IllegalArgumentException if text is null; selectionStartIndex is negative;
* selectionEndIndex is greater than text.length() or not greater than selectionStartIndex
*/
@WorkerThread
@NonNull
TextSelection suggestSelection(
@NonNull CharSequence text,
@@ -97,8 +99,8 @@ public interface TextClassifier {
@Nullable LocaleList defaultLocales);
/**
* Returns a {@link TextClassificationResult} object that can be used to generate a widget for
* handling the classified text.
* Classifies the specified text and returns a {@link TextClassification} object that can be
* used to generate a widget for handling the classified text.
*
* @param text text providing context for the text to classify (which is specified
* by the sub sequence starting at startIndex and ending at endIndex)
@@ -112,8 +114,9 @@ public interface TextClassifier {
* @throws IllegalArgumentException if text is null; startIndex is negative;
* endIndex is greater than text.length() or not greater than startIndex
*/
@WorkerThread
@NonNull
TextClassificationResult getTextClassificationResult(
TextClassification classifyText(
@NonNull CharSequence text,
@IntRange(from = 0) int startIndex,
@IntRange(from = 0) int endIndex,
@@ -134,6 +137,7 @@ public interface TextClassifier {
* @throws IllegalArgumentException if text is null
* @hide
*/
@WorkerThread
LinksInfo getLinks(
@NonNull CharSequence text, int linkMask, @Nullable LocaleList defaultLocales);
}

View File

@@ -130,7 +130,7 @@ final class TextClassifierImpl implements TextClassifier {
}
@Override
public TextClassificationResult getTextClassificationResult(
public TextClassification classifyText(
@NonNull CharSequence text, int startIndex, int endIndex,
@Nullable LocaleList defaultLocales) {
validateInput(text, startIndex, endIndex);
@@ -141,7 +141,7 @@ final class TextClassifierImpl implements TextClassifier {
.classifyText(string, startIndex, endIndex,
getHintFlags(string, startIndex, endIndex));
if (results.length > 0) {
final TextClassificationResult classificationResult =
final TextClassification classificationResult =
createClassificationResult(
results, string.subSequence(startIndex, endIndex));
// TODO: Added this log for debug only. Remove before release.
@@ -155,7 +155,7 @@ final class TextClassifierImpl implements TextClassifier {
Log.e(LOG_TAG, "Error getting assist info.", t);
}
// Getting here means something went wrong, return a NO_OP result.
return TextClassifier.NO_OP.getTextClassificationResult(
return TextClassifier.NO_OP.classifyText(
text, startIndex, endIndex, defaultLocales);
}
@@ -316,9 +316,9 @@ final class TextClassifierImpl implements TextClassifier {
}
}
private TextClassificationResult createClassificationResult(
private TextClassification createClassificationResult(
SmartSelection.ClassificationResult[] classifications, CharSequence text) {
final TextClassificationResult.Builder builder = new TextClassificationResult.Builder()
final TextClassification.Builder builder = new TextClassification.Builder()
.setText(text.toString());
final int size = classifications.length;
@@ -341,7 +341,7 @@ final class TextClassifierImpl implements TextClassifier {
}
if (resolveInfo != null && resolveInfo.activityInfo != null) {
builder.setIntent(intent)
.setOnClickListener(TextClassificationResult.createStartActivityOnClickListener(
.setOnClickListener(TextClassification.createStartActivityOnClickListener(
mContext, intent));
final String packageName = resolveInfo.activityInfo.packageName;

View File

@@ -106,7 +106,7 @@ import android.view.inputmethod.ExtractedText;
import android.view.inputmethod.ExtractedTextRequest;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
import android.view.textclassifier.TextClassificationResult;
import android.view.textclassifier.TextClassification;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.TextView.Drawables;
import android.widget.TextView.OnEditorActionListener;
@@ -3886,14 +3886,14 @@ public class Editor {
private void updateAssistMenuItem(Menu menu) {
menu.removeItem(TextView.ID_ASSIST);
final TextClassificationResult textClassificationResult =
getSelectionActionModeHelper().getTextClassificationResult();
if (textClassificationResult != null) {
final Drawable icon = textClassificationResult.getIcon();
final CharSequence label = textClassificationResult.getLabel();
final TextClassification textClassification =
getSelectionActionModeHelper().getTextClassification();
if (textClassification != null) {
final Drawable icon = textClassification.getIcon();
final CharSequence label = textClassification.getLabel();
final OnClickListener onClickListener =
textClassificationResult.getOnClickListener();
final Intent intent = textClassificationResult.getIntent();
textClassification.getOnClickListener();
final Intent intent = textClassification.getIntent();
if ((icon != null || !TextUtils.isEmpty(label))
&& (onClickListener != null || intent != null)) {
menu.add(TextView.ID_ASSIST, TextView.ID_ASSIST, MENU_ITEM_ORDER_ASSIST, label)
@@ -3902,7 +3902,7 @@ public class Editor {
mMetricsLogger.write(
new LogMaker(MetricsEvent.TEXT_SELECTION_MENU_ITEM_ASSIST)
.setType(MetricsEvent.TYPE_OPEN)
.setSubtype(textClassificationResult.getLogType()));
.setSubtype(textClassification.getLogType()));
}
}
}
@@ -3916,24 +3916,24 @@ public class Editor {
if (customCallback != null && customCallback.onActionItemClicked(mode, item)) {
return true;
}
final TextClassificationResult textClassificationResult =
getSelectionActionModeHelper().getTextClassificationResult();
if (TextView.ID_ASSIST == item.getItemId() && textClassificationResult != null) {
final TextClassification textClassification =
getSelectionActionModeHelper().getTextClassification();
if (TextView.ID_ASSIST == item.getItemId() && textClassification != null) {
final OnClickListener onClickListener =
textClassificationResult.getOnClickListener();
textClassification.getOnClickListener();
if (onClickListener != null) {
onClickListener.onClick(mTextView);
} else {
final Intent intent = textClassificationResult.getIntent();
final Intent intent = textClassification.getIntent();
if (intent != null) {
TextClassificationResult.createStartActivityOnClickListener(
TextClassification.createStartActivityOnClickListener(
mTextView.getContext(), intent)
.onClick(mTextView);
}
}
mMetricsLogger.action(
MetricsEvent.ACTION_TEXT_SELECTION_MENU_ITEM_ASSIST,
textClassificationResult.getLogType());
textClassification.getLogType());
stopTextActionMode();
return true;
}

View File

@@ -26,7 +26,7 @@ import android.text.Selection;
import android.text.Spannable;
import android.text.TextUtils;
import android.view.ActionMode;
import android.view.textclassifier.TextClassificationResult;
import android.view.textclassifier.TextClassification;
import android.view.textclassifier.TextClassifier;
import android.view.textclassifier.TextSelection;
import android.widget.Editor.SelectionModifierCursorController;
@@ -52,7 +52,7 @@ final class SelectionActionModeHelper {
private final Editor mEditor;
private final TextClassificationHelper mTextClassificationHelper;
private TextClassificationResult mTextClassificationResult;
private TextClassification mTextClassification;
private AsyncTask mTextClassificationAsyncTask;
private final SelectionInfo mSelectionInfo = new SelectionInfo();
@@ -107,8 +107,8 @@ final class SelectionActionModeHelper {
}
@Nullable
public TextClassificationResult getTextClassificationResult() {
return mTextClassificationResult;
public TextClassification getTextClassification() {
return mTextClassification;
}
public void onDestroyActionMode() {
@@ -121,7 +121,7 @@ final class SelectionActionModeHelper {
mTextClassificationAsyncTask.cancel(true);
mTextClassificationAsyncTask = null;
}
mTextClassificationResult = null;
mTextClassification = null;
}
private boolean isNoOpTextClassifier() {
@@ -140,9 +140,9 @@ final class SelectionActionModeHelper {
textView.getSelectionStart(), textView.getSelectionEnd());
if (result != null && text instanceof Spannable) {
Selection.setSelection((Spannable) text, result.mStart, result.mEnd);
mTextClassificationResult = result.mResult;
mTextClassification = result.mClassification;
} else {
mTextClassificationResult = null;
mTextClassification = null;
}
if (mEditor.startSelectionActionModeInternal()) {
final SelectionModifierCursorController controller = mEditor.getSelectionController();
@@ -158,7 +158,7 @@ final class SelectionActionModeHelper {
}
private void invalidateActionMode(@Nullable SelectionResult result) {
mTextClassificationResult = result != null ? result.mResult : null;
mTextClassification = result != null ? result.mClassification : null;
final ActionMode actionMode = mEditor.getTextActionMode();
if (actionMode != null) {
actionMode.invalidate();
@@ -332,7 +332,7 @@ final class SelectionActionModeHelper {
return new SelectionResult(
mSelectionStart,
mSelectionEnd,
mTextClassifier.getTextClassificationResult(
mTextClassifier.classifyText(
mTrimmedText, mRelativeStart, mRelativeEnd, mLocales));
}
@@ -361,12 +361,12 @@ final class SelectionActionModeHelper {
private static final class SelectionResult {
private final int mStart;
private final int mEnd;
private final TextClassificationResult mResult;
private final TextClassification mClassification;
SelectionResult(int start, int end, TextClassificationResult result) {
SelectionResult(int start, int end, TextClassification classification) {
mStart = start;
mEnd = end;
mResult = Preconditions.checkNotNull(result);
mClassification = Preconditions.checkNotNull(classification);
}
}
}

View File

@@ -102,31 +102,31 @@ public class TextClassificationManagerTest {
}
@Test
public void testTextClassificationResult() {
public void testClassifyText() {
if (isTextClassifierDisabled()) return;
String text = "Contact me at droid@android.com";
String classifiedText = "droid@android.com";
int startIndex = text.indexOf(classifiedText);
int endIndex = startIndex + classifiedText.length();
assertThat(mClassifier.getTextClassificationResult(text, startIndex, endIndex, LOCALES),
isTextClassificationResult(classifiedText, TextClassifier.TYPE_EMAIL));
assertThat(mClassifier.classifyText(text, startIndex, endIndex, LOCALES),
isTextClassification(classifiedText, TextClassifier.TYPE_EMAIL));
}
@Test
public void testTextClassificationResult_url() {
public void testTextClassifyText_url() {
if (isTextClassifierDisabled()) return;
String text = "Visit http://www.android.com for more information";
String classifiedText = "http://www.android.com";
int startIndex = text.indexOf(classifiedText);
int endIndex = startIndex + classifiedText.length();
assertThat(mClassifier.getTextClassificationResult(text, startIndex, endIndex, LOCALES),
isTextClassificationResult(classifiedText, TextClassifier.TYPE_URL));
assertThat(mClassifier.classifyText(text, startIndex, endIndex, LOCALES),
isTextClassification(classifiedText, TextClassifier.TYPE_URL));
}
@Test
public void testTextClassificationResult_nullLocaleList() {
public void testTextClassifyText_nullLocaleList() {
if (isTextClassifierDisabled()) return;
String text = "Contact me at droid@android.com";
@@ -134,8 +134,8 @@ public class TextClassificationManagerTest {
int startIndex = text.indexOf(classifiedText);
int endIndex = startIndex + classifiedText.length();
LocaleList nullLocales = null;
assertThat(mClassifier.getTextClassificationResult(text, startIndex, endIndex, nullLocales),
isTextClassificationResult(classifiedText, TextClassifier.TYPE_EMAIL));
assertThat(mClassifier.classifyText(text, startIndex, endIndex, nullLocales),
isTextClassification(classifiedText, TextClassifier.TYPE_EMAIL));
}
@Test
@@ -186,13 +186,13 @@ public class TextClassificationManagerTest {
};
}
private static Matcher<TextClassificationResult> isTextClassificationResult(
private static Matcher<TextClassification> isTextClassification(
final String text, final String type) {
return new BaseMatcher<TextClassificationResult>() {
return new BaseMatcher<TextClassification>() {
@Override
public boolean matches(Object o) {
if (o instanceof TextClassificationResult) {
TextClassificationResult result = (TextClassificationResult) o;
if (o instanceof TextClassification) {
TextClassification result = (TextClassification) o;
return text.equals(result.getText())
&& result.getEntityCount() > 0
&& type.equals(result.getEntity(0));