diff options
| author | Gilles Debunne <debunne@google.com> | 2011-12-01 17:41:15 -0800 |
|---|---|---|
| committer | Gilles Debunne <debunne@google.com> | 2011-12-01 17:41:17 -0800 |
| commit | a49ba2f391cd0753eb12d2707bf9fe128e6566f0 (patch) | |
| tree | 1968212328558b4fe6205a03eeff843894be3866 /core/java/android/widget/SpellChecker.java | |
| parent | 335c4e6cb2094c7cbd6039e0c7915702b69e7657 (diff) | |
(de)activating spell check taken into account immediately
Test for a change in the spell checker activate state on every
spell check. Add/remove suggestion spans accordingly.
Change-Id: I750f30b81464b85cebc695bdb0449ec038fc17df
Diffstat (limited to 'core/java/android/widget/SpellChecker.java')
| -rw-r--r-- | core/java/android/widget/SpellChecker.java | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/core/java/android/widget/SpellChecker.java b/core/java/android/widget/SpellChecker.java index ebb260428454..5bb6bba938e5 100644 --- a/core/java/android/widget/SpellChecker.java +++ b/core/java/android/widget/SpellChecker.java @@ -68,6 +68,8 @@ public class SpellChecker implements SpellCheckerSessionListener { // concurrently due to the asynchronous nature of onGetSuggestions. private WordIterator mWordIterator; + private TextServicesManager mTextServicesManager; + public SpellChecker(TextView textView) { mTextView = textView; @@ -81,20 +83,19 @@ public class SpellChecker implements SpellCheckerSessionListener { mCookie = hashCode(); } - private void setLocale(Locale locale) { + private void resetSession() { closeSession(); - final TextServicesManager textServicesManager = (TextServicesManager) - mTextView.getContext().getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE); - if (!textServicesManager.isSpellCheckerEnabled()) { + mTextServicesManager = (TextServicesManager) mTextView.getContext(). + getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE); + if (!mTextServicesManager.isSpellCheckerEnabled()) { mSpellCheckerSession = null; } else { - mSpellCheckerSession = textServicesManager.newSpellCheckerSession( + mSpellCheckerSession = mTextServicesManager.newSpellCheckerSession( null /* Bundle not currently used by the textServicesManager */, - locale, this, + mCurrentLocale, this, false /* means any available languages from current spell checker */); } - mCurrentLocale = locale; // Restore SpellCheckSpans in pool for (int i = 0; i < mLength; i++) { @@ -103,9 +104,6 @@ public class SpellChecker implements SpellCheckerSessionListener { } mLength = 0; - // Change SpellParsers' wordIterator locale - mWordIterator = new WordIterator(locale); - // Remove existing misspelled SuggestionSpans mTextView.removeMisspelledSpans((Editable) mTextView.getText()); @@ -113,6 +111,18 @@ public class SpellChecker implements SpellCheckerSessionListener { mTextView.onLocaleChanged(); } + private void setLocale(Locale locale) { + mCurrentLocale = locale; + + resetSession(); + + // Change SpellParsers' wordIterator locale + mWordIterator = new WordIterator(locale); + + // This class is the listener for locale change: warn other locale-aware objects + mTextView.onLocaleChanged(); + } + /** * @return true if a spell checker session has successfully been created. Returns false if not, * for instance when spell checking has been disabled in settings. @@ -179,6 +189,12 @@ public class SpellChecker implements SpellCheckerSessionListener { // Re-check the entire text start = 0; end = mTextView.getText().length(); + } else { + final boolean spellCheckerActivated = mTextServicesManager.isSpellCheckerEnabled(); + if (isSessionActive() != spellCheckerActivated) { + // Spell checker has been turned of or off since last spellCheck + resetSession(); + } } if (!isSessionActive()) return; |
