aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--java/src/com/android/inputmethod/latin/AdditionalSubtype.java12
-rw-r--r--java/src/com/android/inputmethod/latin/InputAttributes.java3
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java8
-rw-r--r--java/src/com/android/inputmethod/latin/StringUtils.java47
-rw-r--r--java/src/com/android/inputmethod/latin/SuggestedWords.java5
-rw-r--r--tests/src/com/android/inputmethod/latin/StringUtilsTests.java61
6 files changed, 83 insertions, 53 deletions
diff --git a/java/src/com/android/inputmethod/latin/AdditionalSubtype.java b/java/src/com/android/inputmethod/latin/AdditionalSubtype.java
index 99b95ea98..2c700e55b 100644
--- a/java/src/com/android/inputmethod/latin/AdditionalSubtype.java
+++ b/java/src/com/android/inputmethod/latin/AdditionalSubtype.java
@@ -49,13 +49,14 @@ public final class AdditionalSubtype {
&& SubtypeLocale.isExceptionalLocale(localeString)) {
final String layoutDisplayName = SubtypeLocale.getKeyboardLayoutSetDisplayName(
keyboardLayoutSetName);
- layoutDisplayNameExtraValue = StringUtils.appendToCsvIfNotExists(
+ layoutDisplayNameExtraValue = StringUtils.appendToCommaConcatenatedTextIfNotExists(
UNTRANSLATABLE_STRING_IN_SUBTYPE_NAME + "=" + layoutDisplayName, extraValue);
} else {
layoutDisplayNameExtraValue = extraValue;
}
- final String additionalSubtypeExtraValue = StringUtils.appendToCsvIfNotExists(
- IS_ADDITIONAL_SUBTYPE, layoutDisplayNameExtraValue);
+ final String additionalSubtypeExtraValue =
+ StringUtils.appendToCommaConcatenatedTextIfNotExists(
+ IS_ADDITIONAL_SUBTYPE, layoutDisplayNameExtraValue);
final int nameId = SubtypeLocale.getSubtypeNameId(localeString, keyboardLayoutSetName);
return new InputMethodSubtype(nameId, R.drawable.ic_subtype_keyboard,
localeString, KEYBOARD_MODE,
@@ -66,8 +67,9 @@ public final class AdditionalSubtype {
final String localeString = subtype.getLocale();
final String keyboardLayoutSetName = SubtypeLocale.getKeyboardLayoutSetName(subtype);
final String layoutExtraValue = KEYBOARD_LAYOUT_SET + "=" + keyboardLayoutSetName;
- final String extraValue = StringUtils.removeFromCsvIfExists(layoutExtraValue,
- StringUtils.removeFromCsvIfExists(IS_ADDITIONAL_SUBTYPE, subtype.getExtraValue()));
+ final String extraValue = StringUtils.removeFromCommaConcatenatedTextIfExists(
+ layoutExtraValue, StringUtils.removeFromCommaConcatenatedTextIfExists(
+ IS_ADDITIONAL_SUBTYPE, subtype.getExtraValue()));
final String basePrefSubtype = localeString + LOCALE_AND_LAYOUT_SEPARATOR
+ keyboardLayoutSetName;
return extraValue.isEmpty() ? basePrefSubtype
diff --git a/java/src/com/android/inputmethod/latin/InputAttributes.java b/java/src/com/android/inputmethod/latin/InputAttributes.java
index dd58db575..8f98e3a42 100644
--- a/java/src/com/android/inputmethod/latin/InputAttributes.java
+++ b/java/src/com/android/inputmethod/latin/InputAttributes.java
@@ -199,6 +199,7 @@ public final class InputAttributes {
if (editorInfo == null) return false;
final String findingKey = (packageName != null) ? packageName + "." + key
: key;
- return StringUtils.containsInCsv(findingKey, editorInfo.privateImeOptions);
+ return StringUtils.containsInCommaConcatenatedText(
+ findingKey, editorInfo.privateImeOptions);
}
}
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 592db35dd..cebc93c18 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -2369,9 +2369,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// Please note that if mSuggest is null, it means that everything is off: suggestion
// and correction, so we shouldn't try to show the hint
final boolean showingAddToDictionaryHint =
- SuggestedWordInfo.KIND_TYPED == suggestionInfo.mKind && mSuggest != null
- // If the suggestion is not in the dictionary, the hint should be shown.
- && !AutoCorrection.isValidWord(mSuggest, suggestion, true);
+ (SuggestedWordInfo.KIND_TYPED == suggestionInfo.mKind
+ || SuggestedWordInfo.KIND_OOV_CORRECTION == suggestionInfo.mKind)
+ && mSuggest != null
+ // If the suggestion is not in the dictionary, the hint should be shown.
+ && !AutoCorrection.isValidWord(mSuggest, suggestion, true);
if (mSettings.isInternal()) {
Stats.onSeparator((char)Constants.CODE_SPACE,
diff --git a/java/src/com/android/inputmethod/latin/StringUtils.java b/java/src/com/android/inputmethod/latin/StringUtils.java
index ab050d7a3..fa90ba252 100644
--- a/java/src/com/android/inputmethod/latin/StringUtils.java
+++ b/java/src/com/android/inputmethod/latin/StringUtils.java
@@ -35,33 +35,50 @@ public final class StringUtils {
return text.codePointCount(0, text.length());
}
- public static boolean containsInArray(final String key, final String[] array) {
+ public static boolean containsInArray(final String text, final String[] array) {
for (final String element : array) {
- if (key.equals(element)) return true;
+ if (text.equals(element)) return true;
}
return false;
}
- public static boolean containsInCsv(final String key, final String csv) {
- if (TextUtils.isEmpty(csv)) return false;
- return containsInArray(key, csv.split(","));
+ private static final String SEPARATOR_FOR_COMMA_CONCATENATED_TEXT = ",";
+
+ public static boolean containsInCommaConcatenatedText(final String text,
+ final String extraValues) {
+ if (TextUtils.isEmpty(extraValues)) {
+ return false;
+ }
+ return containsInArray(text, extraValues.split(SEPARATOR_FOR_COMMA_CONCATENATED_TEXT));
}
- public static String appendToCsvIfNotExists(final String key, final String csv) {
- if (TextUtils.isEmpty(csv)) return key;
- if (containsInCsv(key, csv)) return csv;
- return csv + "," + key;
+ public static String appendToCommaConcatenatedTextIfNotExists(final String text,
+ final String extraValues) {
+ if (TextUtils.isEmpty(extraValues)) {
+ return text;
+ }
+ if (containsInCommaConcatenatedText(text, extraValues)) {
+ return extraValues;
+ }
+ return extraValues + SEPARATOR_FOR_COMMA_CONCATENATED_TEXT + text;
}
- public static String removeFromCsvIfExists(final String key, final String csv) {
- if (TextUtils.isEmpty(csv)) return "";
- final String[] elements = csv.split(",");
- if (!containsInArray(key, elements)) return csv;
+ public static String removeFromCommaConcatenatedTextIfExists(final String text,
+ final String extraValues) {
+ if (TextUtils.isEmpty(extraValues)) {
+ return "";
+ }
+ final String[] elements = extraValues.split(SEPARATOR_FOR_COMMA_CONCATENATED_TEXT);
+ if (!containsInArray(text, elements)) {
+ return extraValues;
+ }
final ArrayList<String> result = CollectionUtils.newArrayList(elements.length - 1);
for (final String element : elements) {
- if (!key.equals(element)) result.add(element);
+ if (!text.equals(element)) {
+ result.add(element);
+ }
}
- return TextUtils.join(",", result);
+ return TextUtils.join(SEPARATOR_FOR_COMMA_CONCATENATED_TEXT, result);
}
/**
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index dfddb0ffe..1f453273b 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -132,7 +132,10 @@ public final class SuggestedWords {
public static final int KIND_APP_DEFINED = 6; // Suggested by the application
public static final int KIND_SHORTCUT = 7; // A shortcut
public static final int KIND_PREDICTION = 8; // A prediction (== a suggestion with no input)
- public static final int KIND_RESUMED = 9; // A resumed suggestion (comes from a span)
+ // KIND_RESUMED: A resumed suggestion (comes from a span, currently this type is used only
+ // in java for re-correction)
+ public static final int KIND_RESUMED = 9;
+ public static final int KIND_OOV_CORRECTION = 10; // Most probable string correction
public static final int KIND_MASK_FLAGS = 0xFFFFFF00; // Mask to get the flags
public static final int KIND_FLAG_POSSIBLY_OFFENSIVE = 0x80000000;
diff --git a/tests/src/com/android/inputmethod/latin/StringUtilsTests.java b/tests/src/com/android/inputmethod/latin/StringUtilsTests.java
index 29e790a7d..e9806832a 100644
--- a/tests/src/com/android/inputmethod/latin/StringUtilsTests.java
+++ b/tests/src/com/android/inputmethod/latin/StringUtilsTests.java
@@ -40,57 +40,62 @@ public class StringUtilsTests extends AndroidTestCase {
}));
}
- public void testContainsInCsv() {
- assertFalse("null", StringUtils.containsInCsv("key", null));
- assertFalse("empty", StringUtils.containsInCsv("key", ""));
- assertFalse("not in 1 element", StringUtils.containsInCsv("key", "key1"));
- assertFalse("not in 2 elements", StringUtils.containsInCsv("key", "key1,key2"));
-
- assertTrue("in 1 element", StringUtils.containsInCsv("key", "key"));
- assertTrue("in 2 elements", StringUtils.containsInCsv("key", "key1,key"));
+ public void testContainsInExtraValues() {
+ assertFalse("null", StringUtils.containsInCommaConcatenatedText("key", null));
+ assertFalse("empty", StringUtils.containsInCommaConcatenatedText("key", ""));
+ assertFalse("not in 1 element",
+ StringUtils.containsInCommaConcatenatedText("key", "key1"));
+ assertFalse("not in 2 elements",
+ StringUtils.containsInCommaConcatenatedText("key", "key1,key2"));
+
+ assertTrue("in 1 element", StringUtils.containsInCommaConcatenatedText("key", "key"));
+ assertTrue("in 2 elements", StringUtils.containsInCommaConcatenatedText("key", "key1,key"));
}
- public void testAppendToCsvIfNotExists() {
- assertEquals("null", "key", StringUtils.appendToCsvIfNotExists("key", null));
- assertEquals("empty", "key", StringUtils.appendToCsvIfNotExists("key", ""));
+ public void testAppendToExtraValuesIfNotExists() {
+ assertEquals("null", "key",
+ StringUtils.appendToCommaConcatenatedTextIfNotExists("key", null));
+ assertEquals("empty", "key",
+ StringUtils.appendToCommaConcatenatedTextIfNotExists("key", ""));
assertEquals("not in 1 element", "key1,key",
- StringUtils.appendToCsvIfNotExists("key", "key1"));
+ StringUtils.appendToCommaConcatenatedTextIfNotExists("key", "key1"));
assertEquals("not in 2 elements", "key1,key2,key",
- StringUtils.appendToCsvIfNotExists("key", "key1,key2"));
+ StringUtils.appendToCommaConcatenatedTextIfNotExists("key", "key1,key2"));
assertEquals("in 1 element", "key",
- StringUtils.appendToCsvIfNotExists("key", "key"));
+ StringUtils.appendToCommaConcatenatedTextIfNotExists("key", "key"));
assertEquals("in 2 elements at position 1", "key,key2",
- StringUtils.appendToCsvIfNotExists("key", "key,key2"));
+ StringUtils.appendToCommaConcatenatedTextIfNotExists("key", "key,key2"));
assertEquals("in 2 elements at position 2", "key1,key",
- StringUtils.appendToCsvIfNotExists("key", "key1,key"));
+ StringUtils.appendToCommaConcatenatedTextIfNotExists("key", "key1,key"));
assertEquals("in 3 elements at position 2", "key1,key,key3",
- StringUtils.appendToCsvIfNotExists("key", "key1,key,key3"));
+ StringUtils.appendToCommaConcatenatedTextIfNotExists("key", "key1,key,key3"));
}
- public void testRemoveFromCsvIfExists() {
- assertEquals("null", "", StringUtils.removeFromCsvIfExists("key", null));
- assertEquals("empty", "", StringUtils.removeFromCsvIfExists("key", ""));
+ public void testRemoveFromExtraValuesIfExists() {
+ assertEquals("null", "", StringUtils.removeFromCommaConcatenatedTextIfExists("key", null));
+ assertEquals("empty", "", StringUtils.removeFromCommaConcatenatedTextIfExists("key", ""));
assertEquals("not in 1 element", "key1",
- StringUtils.removeFromCsvIfExists("key", "key1"));
+ StringUtils.removeFromCommaConcatenatedTextIfExists("key", "key1"));
assertEquals("not in 2 elements", "key1,key2",
- StringUtils.removeFromCsvIfExists("key", "key1,key2"));
+ StringUtils.removeFromCommaConcatenatedTextIfExists("key", "key1,key2"));
assertEquals("in 1 element", "",
- StringUtils.removeFromCsvIfExists("key", "key"));
+ StringUtils.removeFromCommaConcatenatedTextIfExists("key", "key"));
assertEquals("in 2 elements at position 1", "key2",
- StringUtils.removeFromCsvIfExists("key", "key,key2"));
+ StringUtils.removeFromCommaConcatenatedTextIfExists("key", "key,key2"));
assertEquals("in 2 elements at position 2", "key1",
- StringUtils.removeFromCsvIfExists("key", "key1,key"));
+ StringUtils.removeFromCommaConcatenatedTextIfExists("key", "key1,key"));
assertEquals("in 3 elements at position 2", "key1,key3",
- StringUtils.removeFromCsvIfExists("key", "key1,key,key3"));
+ StringUtils.removeFromCommaConcatenatedTextIfExists("key", "key1,key,key3"));
assertEquals("in 3 elements at position 1,2,3", "",
- StringUtils.removeFromCsvIfExists("key", "key,key,key"));
+ StringUtils.removeFromCommaConcatenatedTextIfExists("key", "key,key,key"));
assertEquals("in 5 elements at position 2,4", "key1,key3,key5",
- StringUtils.removeFromCsvIfExists("key", "key1,key,key3,key,key5"));
+ StringUtils.removeFromCommaConcatenatedTextIfExists(
+ "key", "key1,key,key3,key,key5"));
}