From b1570d285aeff6338bb39155c0facba78fe6f385 Mon Sep 17 00:00:00 2001 From: Johan Redestig Date: Sat, 7 Mar 2015 07:48:41 +0100 Subject: [PATCH] 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 --- .../settings/inputmethod/InputMethodAndLanguageSettings.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java index 93ece664f2c..e8ef5ef347a 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java +++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java @@ -254,8 +254,9 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment 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);