Merge "TextClassifierImpl: Fix empty locale list issue." into oc-dev

This commit is contained in:
TreeHugger Robot
2017-04-19 19:20:39 +00:00
committed by Android (Google) Code Review
2 changed files with 40 additions and 15 deletions

View File

@@ -53,7 +53,6 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.StringJoiner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -89,7 +88,7 @@ final class TextClassifierImpl implements TextClassifier {
@Override
public TextSelection suggestSelection(
@NonNull CharSequence text, int selectionStartIndex, int selectionEndIndex,
LocaleList defaultLocales) {
@Nullable LocaleList defaultLocales) {
validateInput(text, selectionStartIndex, selectionEndIndex);
try {
if (text.length() > 0) {
@@ -128,7 +127,8 @@ final class TextClassifierImpl implements TextClassifier {
@Override
public TextClassificationResult getTextClassificationResult(
@NonNull CharSequence text, int startIndex, int endIndex, LocaleList defaultLocales) {
@NonNull CharSequence text, int startIndex, int endIndex,
@Nullable LocaleList defaultLocales) {
validateInput(text, startIndex, endIndex);
try {
if (text.length() > 0) {
@@ -156,7 +156,8 @@ final class TextClassifierImpl implements TextClassifier {
}
@Override
public LinksInfo getLinks(CharSequence text, int linkMask, LocaleList defaultLocales) {
public LinksInfo getLinks(
@NonNull CharSequence text, int linkMask, @Nullable LocaleList defaultLocales) {
Preconditions.checkArgument(text != null);
try {
return LinksInfoFactory.create(
@@ -199,12 +200,11 @@ final class TextClassifierImpl implements TextClassifier {
@GuardedBy("mSmartSelectionLock") // Do not call outside this lock.
@Nullable
private Locale findBestSupportedLocaleLocked(LocaleList localeList) {
final List<Locale.LanguageRange> languageRangeList = Locale.LanguageRange.parse(
new StringJoiner(",")
// Specified localeList takes priority over the system default
.add(localeList.toLanguageTags())
.add(LocaleList.getDefault().toLanguageTags())
.toString());
// Specified localeList takes priority over the system default, so it is listed first.
final String languages = localeList.isEmpty()
? LocaleList.getDefault().toLanguageTags()
: localeList.toLanguageTags() + "," + LocaleList.getDefault().toLanguageTags();
final List<Locale.LanguageRange> languageRangeList = Locale.LanguageRange.parse(languages);
return Locale.lookup(languageRangeList, loadModelFilePathsLocked().keySet());
}

View File

@@ -24,11 +24,6 @@ import android.os.LocaleList;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
import android.view.textclassifier.TextClassificationManager;
import android.view.textclassifier.TextClassificationResult;
import android.view.textclassifier.TextClassifier;
import android.view.textclassifier.TextLanguage;
import android.view.textclassifier.TextSelection;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
@@ -73,6 +68,23 @@ public class TextClassificationManagerTest {
isTextSelection(smartStartIndex, smartEndIndex, TextClassifier.TYPE_EMAIL));
}
@Test
public void testSmartSelection_nullLocaleList() {
if (isTextClassifierDisabled()) return;
String text = "Contact me at droid@android.com";
String selected = "droid";
String suggested = "droid@android.com";
int startIndex = text.indexOf(selected);
int endIndex = startIndex + selected.length();
int smartStartIndex = text.indexOf(suggested);
int smartEndIndex = smartStartIndex + suggested.length();
LocaleList nullLocales = null;
assertThat(mClassifier.suggestSelection(text, startIndex, endIndex, nullLocales),
isTextSelection(smartStartIndex, smartEndIndex, TextClassifier.TYPE_EMAIL));
}
@Test
public void testSmartSelection_url() {
if (isTextClassifierDisabled()) return;
@@ -113,6 +125,19 @@ public class TextClassificationManagerTest {
isTextClassificationResult(classifiedText, TextClassifier.TYPE_URL));
}
@Test
public void testTextClassificationResult_nullLocaleList() {
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();
LocaleList nullLocales = null;
assertThat(mClassifier.getTextClassificationResult(text, startIndex, endIndex, nullLocales),
isTextClassificationResult(classifiedText, TextClassifier.TYPE_EMAIL));
}
@Test
public void testLanguageDetection() {
if (isTextClassifierDisabled()) return;