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

Commit 34bd5969 authored by satok's avatar satok Committed by Android (Google) Code Review
Browse files

Merge "Respect user settings for spell checking language if explicitly set" into ics-mr1

parents 42694dc4 05f24700
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ public class SpellChecker implements SpellCheckerSessionListener {
        mIds = new int[size];
        mSpellCheckSpans = new SpellCheckSpan[size];

        setLocale(mTextView.getLocale());
        setLocale(mTextView.getTextServicesLocale());

        mCookie = hashCode();
    }
@@ -173,7 +173,7 @@ public class SpellChecker implements SpellCheckerSessionListener {
    }

    public void spellCheck(int start, int end) {
        final Locale locale = mTextView.getLocale();
        final Locale locale = mTextView.getTextServicesLocale();
        if (mCurrentLocale == null || (!(mCurrentLocale.equals(locale)))) {
            setLocale(locale);
            // Re-check the entire text
+12 −13
Original line number Diff line number Diff line
@@ -133,6 +133,8 @@ import android.view.inputmethod.ExtractedTextRequest;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype;
import android.view.textservice.SpellCheckerSubtype;
import android.view.textservice.TextServicesManager;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.RemoteViews.RemoteView;

@@ -8904,21 +8906,18 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    /**
     * This is a temporary method. Future versions may support multi-locale text.
     *
     * @return The current locale used in this TextView, based on the current IME's locale,
     * or the system default locale if this is not defined.
     * @return The locale that should be used for a word iterator and a spell checker
     * in this TextView, based on the current spell checker settings,
     * the current IME's locale, or the system default locale.
     * @hide
     */
    public Locale getLocale() {
    public Locale getTextServicesLocale() {
        Locale locale = Locale.getDefault();
        final InputMethodManager imm = InputMethodManager.peekInstance();
        if (imm != null) {
            final InputMethodSubtype currentInputMethodSubtype = imm.getCurrentInputMethodSubtype();
            if (currentInputMethodSubtype != null) {
                String localeString = currentInputMethodSubtype.getLocale();
                if (!TextUtils.isEmpty(localeString)) {
                    locale = new Locale(localeString);
                }
            }
        final TextServicesManager textServicesManager = (TextServicesManager)
                mContext.getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE);
        final SpellCheckerSubtype subtype = textServicesManager.getCurrentSpellCheckerSubtype(true);
        if (subtype != null) {
            locale = new Locale(subtype.getLocale());
        }
        return locale;
    }
@@ -8933,7 +8932,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
     */
    public WordIterator getWordIterator() {
        if (mWordIterator == null) {
            mWordIterator = new WordIterator(getLocale());
            mWordIterator = new WordIterator(getTextServicesLocale());
        }
        return mWordIterator;
    }
+31 −5
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@ import android.provider.Settings;
import android.service.textservice.SpellCheckerService;
import android.text.TextUtils;
import android.util.Slog;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype;
import android.view.textservice.SpellCheckerInfo;
import android.view.textservice.SpellCheckerSubtype;

@@ -222,20 +224,40 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
            if (hashCode == 0 && !allowImplicitlySelectedSubtype) {
                return null;
            }
            final String systemLocale =
                    mContext.getResources().getConfiguration().locale.toString();
            String candidateLocale = null;
            if (hashCode == 0) {
                // Spell checker language settings == "auto"
                final InputMethodManager imm =
                        (InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {
                    final InputMethodSubtype currentInputMethodSubtype =
                            imm.getCurrentInputMethodSubtype();
                    if (currentInputMethodSubtype != null) {
                        final String localeString = currentInputMethodSubtype.getLocale();
                        if (!TextUtils.isEmpty(localeString)) {
                            // 1. Use keyboard locale if available in the spell checker
                            candidateLocale = localeString;
                        }
                    }
                }
                if (candidateLocale == null) {
                    // 2. Use System locale if available in the spell checker
                    candidateLocale = mContext.getResources().getConfiguration().locale.toString();
                }
            }
            SpellCheckerSubtype candidate = null;
            for (int i = 0; i < sci.getSubtypeCount(); ++i) {
                final SpellCheckerSubtype scs = sci.getSubtypeAt(i);
                if (hashCode == 0) {
                    if (systemLocale.equals(locale)) {
                    if (candidateLocale.equals(locale)) {
                        return scs;
                    } else if (candidate == null) {
                        final String scsLocale = scs.getLocale();
                        if (systemLocale.length() >= 2
                        if (candidateLocale.length() >= 2
                                && scsLocale.length() >= 2
                                && systemLocale.substring(0, 2).equals(
                                && candidateLocale.substring(0, 2).equals(
                                        scsLocale.substring(0, 2))) {
                            // Fall back to the applicable language
                            candidate = scs;
                        }
                    }
@@ -244,9 +266,13 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
                        Slog.w(TAG, "Return subtype " + scs.hashCode() + ", input= " + locale
                                + ", " + scs.getLocale());
                    }
                    // 3. Use the user specified spell check language
                    return scs;
                }
            }
            // 4. Fall back to the applicable language and return it if not null
            // 5. Simply just return it even if it's null which means we could find no suitable
            // spell check languages
            return candidate;
        }
    }