Dont crash if there is no spellchecker
The fact that isSpellCheckerEnabled returns true does not mean
that getCurrentSpellChecker will return non null. By default
isSpellCheckerEnabled is true in TextServicesSettings, even when
there is no spellchecker service active on the device.
The issue can be verified by disabling the Google Keyboard (assuming
the GMS LatinImeGoogle is used) in Settings|Apps and later
entering Settings|Language & input. Without this patch Settings
crashes at that point with the following stack:
E/AndroidRuntime(13020): Caused by: java.lang.NullPointerException: \
Attempt to invoke virtual method 'java.lang.CharSequence android.vie\
w.textservice.SpellCheckerInfo.loadLabel(android.content.pm.PackageM\
anager)' on a null object reference
E/AndroidRuntime(13020): at com.android.settings.inputmethod.\
InputMethodAndLanguageSettings.onResume(InputMethodAndLanguageSettin\
gs.java:253)
E/AndroidRuntime(13020): at android.app.Fragment.performResum\
e(Fragment.java:2096)
E/AndroidRuntime(13020): at android.app.FragmentManagerImpl.m\
oveToState(FragmentManager.java:928)
E/AndroidRuntime(13020): at android.app.FragmentManagerImpl.m\
oveToState(FragmentManager.java:1067)
Bug: 19832033
Change-Id: I65e6d269572e064aa6897807b6611ef947d90211
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
index 93ece66..e8ef5ef 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
@@ -254,8 +254,9 @@
if (spellChecker != null) {
final TextServicesManager tsm = (TextServicesManager) getSystemService(
Context.TEXT_SERVICES_MANAGER_SERVICE);
- if (tsm.isSpellCheckerEnabled()) {
- final SpellCheckerInfo sci = tsm.getCurrentSpellChecker();
+ final SpellCheckerInfo sci = tsm.getCurrentSpellChecker();
+ spellChecker.setEnabled(sci != null);
+ if (tsm.isSpellCheckerEnabled() && sci != null) {
spellChecker.setSummary(sci.loadLabel(getPackageManager()));
} else {
spellChecker.setSummary(R.string.switch_off_text);