summaryrefslogtreecommitdiffstats
path: root/core/java/android/view/textservice
diff options
context:
space:
mode:
authorNarayan Kamath <narayan@google.com>2014-07-16 14:39:03 +0100
committerNarayan Kamath <narayan@google.com>2014-07-18 15:02:34 +0100
commit6648dded69439eae6197450c1689b73b02493796 (patch)
tree4f2b58d6cdb2f8110dc43cd24d318e071e18c307 /core/java/android/view/textservice
parentd811af223ea4064669ad219f78aa7f57d6bb5bce (diff)
downloadframeworks_base-6648dded69439eae6197450c1689b73b02493796.zip
frameworks_base-6648dded69439eae6197450c1689b73b02493796.tar.gz
frameworks_base-6648dded69439eae6197450c1689b73b02493796.tar.bz2
Fix broken locale related assumptions in TextServicesManager.
startsWith is a bogus check unless languages match. Also, don't assume 2 letter languages. bug: 10090157 Change-Id: I8adda61bddc465aac261c0ce2023fa9606affe1b
Diffstat (limited to 'core/java/android/view/textservice')
-rw-r--r--core/java/android/view/textservice/TextServicesManager.java22
1 files changed, 17 insertions, 5 deletions
diff --git a/core/java/android/view/textservice/TextServicesManager.java b/core/java/android/view/textservice/TextServicesManager.java
index e0e19b9..89d879e 100644
--- a/core/java/android/view/textservice/TextServicesManager.java
+++ b/core/java/android/view/textservice/TextServicesManager.java
@@ -90,6 +90,18 @@ public final class TextServicesManager {
}
/**
+ * Returns the language component of a given locale string.
+ */
+ private static String parseLanguageFromLocaleString(String locale) {
+ final int idx = locale.indexOf('_');
+ if (idx < 0) {
+ return locale;
+ } else {
+ return locale.substring(0, idx);
+ }
+ }
+
+ /**
* Get a spell checker session for the specified spell checker
* @param locale the locale for the spell checker. If {@code locale} is null and
* referToSpellCheckerLanguageSettings is true, the locale specified in Settings will be
@@ -134,9 +146,8 @@ public final class TextServicesManager {
}
if (locale != null) {
final String subtypeLocale = subtypeInUse.getLocale();
- final String inputLocale = locale.toString();
- if (subtypeLocale.length() < 2 || inputLocale.length() < 2
- || !subtypeLocale.substring(0, 2).equals(inputLocale.substring(0, 2))) {
+ final String subtypeLanguage = parseLanguageFromLocaleString(subtypeLocale);
+ if (subtypeLanguage.length() < 2 || !locale.getLanguage().equals(subtypeLanguage)) {
return null;
}
}
@@ -145,11 +156,12 @@ public final class TextServicesManager {
for (int i = 0; i < sci.getSubtypeCount(); ++i) {
final SpellCheckerSubtype subtype = sci.getSubtypeAt(i);
final String tempSubtypeLocale = subtype.getLocale();
+ final String tempSubtypeLanguage = parseLanguageFromLocaleString(tempSubtypeLocale);
if (tempSubtypeLocale.equals(localeStr)) {
subtypeInUse = subtype;
break;
- } else if (localeStr.length() >= 2 && tempSubtypeLocale.length() >= 2
- && localeStr.startsWith(tempSubtypeLocale)) {
+ } else if (tempSubtypeLanguage.length() >= 2 &&
+ locale.getLanguage().equals(tempSubtypeLanguage)) {
subtypeInUse = subtype;
}
}