summaryrefslogtreecommitdiff
path: root/core/java/android/widget/SpellChecker.java
diff options
context:
space:
mode:
authorGilles Debunne <debunne@google.com>2011-12-01 17:41:15 -0800
committerGilles Debunne <debunne@google.com>2011-12-01 17:41:17 -0800
commita49ba2f391cd0753eb12d2707bf9fe128e6566f0 (patch)
tree1968212328558b4fe6205a03eeff843894be3866 /core/java/android/widget/SpellChecker.java
parent335c4e6cb2094c7cbd6039e0c7915702b69e7657 (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.java36
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;