diff options
author | satok <satok@google.com> | 2011-08-26 17:35:27 +0900 |
---|---|---|
committer | satok <satok@google.com> | 2011-08-26 18:35:58 +0900 |
commit | b387954a92eb6f15b7f49d5b946745f492a26363 (patch) | |
tree | 777c53e4966cab0bbe730d07162d94c728a25edf /core/java/android/view/textservice | |
parent | fbedf1a3978d5dfc4a886e4c7107d4bc1923f740 (diff) | |
download | frameworks_base-b387954a92eb6f15b7f49d5b946745f492a26363.zip frameworks_base-b387954a92eb6f15b7f49d5b946745f492a26363.tar.gz frameworks_base-b387954a92eb6f15b7f49d5b946745f492a26363.tar.bz2 |
Support system locale as the locale of the spell checkers
Bug: 5212035
Change-Id: I18d27e54b936cc7f4d6cc3c7100bce57f77f8f9f
Diffstat (limited to 'core/java/android/view/textservice')
-rw-r--r-- | core/java/android/view/textservice/TextServicesManager.java | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/core/java/android/view/textservice/TextServicesManager.java b/core/java/android/view/textservice/TextServicesManager.java index 3e376da..adfb0df 100644 --- a/core/java/android/view/textservice/TextServicesManager.java +++ b/core/java/android/view/textservice/TextServicesManager.java @@ -72,27 +72,48 @@ public final class TextServicesManager { * languages in settings will be returned. * @return the spell checker session of the spell checker */ - // TODO: Add a method to get enabled spell checkers. - // TODO: Handle referToSpellCheckerLanguageSettings public SpellCheckerSession newSpellCheckerSession(Bundle bundle, Locale locale, SpellCheckerSessionListener listener, boolean referToSpellCheckerLanguageSettings) { if (listener == null) { throw new NullPointerException(); } - // TODO: set a proper locale instead of the dummy locale - final String localeString = locale == null ? "en" : locale.toString(); final SpellCheckerInfo sci; try { - sci = sService.getCurrentSpellChecker(localeString); + sci = sService.getCurrentSpellChecker(null); } catch (RemoteException e) { return null; } if (sci == null) { return null; } + SpellCheckerSubtype subtypeInUse = null; + if (referToSpellCheckerLanguageSettings) { + subtypeInUse = getCurrentSpellCheckerSubtype(true); + if (subtypeInUse == null) { + return null; + } + 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))) { + return null; + } + } + } else { + for (int i = 0; i < sci.getSubtypeCount(); ++i) { + final SpellCheckerSubtype subtype = sci.getSubtypeAt(i); + if (subtype.getLocale().equals(locale)) { + subtypeInUse = subtype; + } + } + } + if (subtypeInUse == null) { + return null; + } final SpellCheckerSession session = new SpellCheckerSession(sci, sService, listener); try { - sService.getSpellCheckerService(sci.getId(), localeString, + sService.getSpellCheckerService(sci.getId(), subtypeInUse.getLocale(), session.getTextServicesSessionListener(), session.getSpellCheckerSessionListener(), bundle); } catch (RemoteException e) { |