diff options
author | Narayan Kamath <narayan@google.com> | 2014-07-16 14:39:03 +0100 |
---|---|---|
committer | Narayan Kamath <narayan@google.com> | 2014-07-18 15:02:34 +0100 |
commit | 6648dded69439eae6197450c1689b73b02493796 (patch) | |
tree | 4f2b58d6cdb2f8110dc43cd24d318e071e18c307 /core/java/android/view/textservice | |
parent | d811af223ea4064669ad219f78aa7f57d6bb5bce (diff) | |
download | frameworks_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.java | 22 |
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; } } |