Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a49ba2f3 authored by Gilles Debunne's avatar Gilles Debunne
Browse files

(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
parent 335c4e6c
Loading
Loading
Loading
Loading
+26 −10
Original line number Original line Diff line number Diff line
@@ -68,6 +68,8 @@ public class SpellChecker implements SpellCheckerSessionListener {
    // concurrently due to the asynchronous nature of onGetSuggestions.
    // concurrently due to the asynchronous nature of onGetSuggestions.
    private WordIterator mWordIterator;
    private WordIterator mWordIterator;


    private TextServicesManager mTextServicesManager;

    public SpellChecker(TextView textView) {
    public SpellChecker(TextView textView) {
        mTextView = textView;
        mTextView = textView;


@@ -81,20 +83,19 @@ public class SpellChecker implements SpellCheckerSessionListener {
        mCookie = hashCode();
        mCookie = hashCode();
    }
    }


    private void setLocale(Locale locale) {
    private void resetSession() {
        closeSession();
        closeSession();


        final TextServicesManager textServicesManager = (TextServicesManager)
        mTextServicesManager = (TextServicesManager) mTextView.getContext().
                mTextView.getContext().getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE);
                getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE);
        if (!textServicesManager.isSpellCheckerEnabled()) {
        if (!mTextServicesManager.isSpellCheckerEnabled()) {
            mSpellCheckerSession = null;
            mSpellCheckerSession = null;
        } else {
        } else {
            mSpellCheckerSession = textServicesManager.newSpellCheckerSession(
            mSpellCheckerSession = mTextServicesManager.newSpellCheckerSession(
                    null /* Bundle not currently used by the textServicesManager */,
                    null /* Bundle not currently used by the textServicesManager */,
                    locale, this,
                    mCurrentLocale, this,
                    false /* means any available languages from current spell checker */);
                    false /* means any available languages from current spell checker */);
        }
        }
        mCurrentLocale = locale;


        // Restore SpellCheckSpans in pool
        // Restore SpellCheckSpans in pool
        for (int i = 0; i < mLength; i++) {
        for (int i = 0; i < mLength; i++) {
@@ -103,9 +104,6 @@ public class SpellChecker implements SpellCheckerSessionListener {
        }
        }
        mLength = 0;
        mLength = 0;


        // Change SpellParsers' wordIterator locale
        mWordIterator = new WordIterator(locale);

        // Remove existing misspelled SuggestionSpans
        // Remove existing misspelled SuggestionSpans
        mTextView.removeMisspelledSpans((Editable) mTextView.getText());
        mTextView.removeMisspelledSpans((Editable) mTextView.getText());


@@ -113,6 +111,18 @@ public class SpellChecker implements SpellCheckerSessionListener {
        mTextView.onLocaleChanged();
        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,
     * @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.
     * for instance when spell checking has been disabled in settings.
@@ -179,6 +189,12 @@ public class SpellChecker implements SpellCheckerSessionListener {
            // Re-check the entire text
            // Re-check the entire text
            start = 0;
            start = 0;
            end = mTextView.getText().length();
            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;
        if (!isSessionActive()) return;