Remove dependency on IME subtype from TSMS

Now that we are going to reduce the dependency on InputMethodSubtype
everywhere, TextServicesManagerService#getCurrentSpellCheckerSubtype()
is a good candidate to clean up.

Given that imm.getCurrentInputMethodSubtype().getLocale() is not that
reliable, always using the fallback logic to use the system locale is
less likely to make things worse.

Also, directly calling IME API from TextServicesManagerService have
caused multiple issues like Bug 28889203 and Bug 31273203.  Removing
this API call should have positive impact on code health and system
stability.

Fix: 110275412
Test: Manually verified that spell checker still works
Change-Id: Ic222b21ce5ec4fc17b338eb5519e6928d853c8b6
This commit is contained in:
Yohei Yukawa
2018-06-15 16:36:39 -07:00
parent 1235c24a0f
commit bb0a224714

View File

@@ -57,8 +57,6 @@ import android.service.textservice.SpellCheckerService;
import android.text.TextUtils;
import android.util.Slog;
import android.util.SparseArray;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype;
import android.view.textservice.SpellCheckerInfo;
import android.view.textservice.SpellCheckerSubtype;
@@ -541,22 +539,8 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
String candidateLocale = null;
if (subtypeHashCode == 0) {
// Spell checker language settings == "auto"
final InputMethodManager imm = mContext.getSystemService(InputMethodManager.class);
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 = systemLocale.toString();
}
// Use System locale if available in the spell checker
candidateLocale = systemLocale.toString();
}
SpellCheckerSubtype candidate = null;
for (int i = 0; i < sci.getSubtypeCount(); ++i) {
@@ -576,12 +560,12 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
if (DBG) {
Slog.w(TAG, "Return subtype " + scs.hashCode() + ", " + scs.getLocale());
}
// 3. Use the user specified spell check language
// 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
// Fall back to the applicable language and return it if not null
// Simply just return it even if it's null which means we could find no suitable
// spell check languages
return candidate;
}