diff --git a/res/values/strings.xml b/res/values/strings.xml index dfc17a2d078..b45c1d3fbb8 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7238,6 +7238,9 @@ Choose spell checker + + Not selected + (none) diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java index 1318a1b1a13..fb0a4d53790 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java +++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java @@ -261,12 +261,16 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment if (spellChecker != null) { final TextServicesManager tsm = (TextServicesManager) getSystemService( Context.TEXT_SERVICES_MANAGER_SERVICE); - final SpellCheckerInfo sci = tsm.getCurrentSpellChecker(); - spellChecker.setEnabled(sci != null); - if (tsm.isSpellCheckerEnabled() && sci != null) { - spellChecker.setSummary(sci.loadLabel(getPackageManager())); - } else { + if (!tsm.isSpellCheckerEnabled()) { + spellChecker.setEnabled(false); spellChecker.setSummary(R.string.switch_off_text); + } else { + final SpellCheckerInfo sci = tsm.getCurrentSpellChecker(); + if (sci != null) { + spellChecker.setSummary(sci.loadLabel(getPackageManager())); + } else { + spellChecker.setSummary(R.string.spell_checker_not_selected); + } } } diff --git a/src/com/android/settings/inputmethod/SpellCheckersSettings.java b/src/com/android/settings/inputmethod/SpellCheckersSettings.java index ad6a17b867f..bc2a5c09950 100644 --- a/src/com/android/settings/inputmethod/SpellCheckersSettings.java +++ b/src/com/android/settings/inputmethod/SpellCheckersSettings.java @@ -73,19 +73,17 @@ public class SpellCheckersSettings extends SettingsPreferenceFragment } private void populatePreferenceScreen() { - final PreferenceScreen screen = getPreferenceScreen(); - final Context context = getActivity(); - final int count = (mEnabledScis == null) ? 0 : mEnabledScis.length; - - for (int index = 0; index < count; ++index) { - final SpellCheckerInfo sci = mEnabledScis[index]; - } final SpellCheckerPreference pref = new SpellCheckerPreference(getPrefContext(), mEnabledScis); pref.setTitle(R.string.default_spell_checker); - pref.setSummary("%s"); + final int count = (mEnabledScis == null) ? 0 : mEnabledScis.length; + if (count > 0) { + pref.setSummary("%s"); + } else { + pref.setSummary(R.string.spell_checker_not_selected); + } pref.setOnPreferenceChangeListener(this); - screen.addPreference(pref); + getPreferenceScreen().addPreference(pref); } @Override @@ -114,8 +112,13 @@ public class SpellCheckersSettings extends SettingsPreferenceFragment final boolean isSpellCheckerEnabled = mTsm.isSpellCheckerEnabled(); mSwitchBar.setChecked(isSpellCheckerEnabled); - final SpellCheckerSubtype currentScs = mTsm.getCurrentSpellCheckerSubtype( - false /* allowImplicitlySelectedSubtype */); + final SpellCheckerSubtype currentScs; + if (mCurrentSci == null) { + currentScs = mTsm.getCurrentSpellCheckerSubtype( + false /* allowImplicitlySelectedSubtype */); + } else { + currentScs = null; + } mSpellCheckerLanaguagePref.setSummary(getSpellCheckerSubtypeLabel(mCurrentSci, currentScs)); final PreferenceScreen screen = getPreferenceScreen(); @@ -128,12 +131,13 @@ public class SpellCheckersSettings extends SettingsPreferenceFragment pref.setSelected(mCurrentSci); } } + mSpellCheckerLanaguagePref.setEnabled(isSpellCheckerEnabled && mCurrentSci != null); } private CharSequence getSpellCheckerSubtypeLabel(final SpellCheckerInfo sci, final SpellCheckerSubtype subtype) { if (sci == null) { - return null; + return getString(R.string.spell_checker_not_selected); } if (subtype == null) { return getString(R.string.use_system_language_to_select_input_method_subtypes); @@ -173,6 +177,11 @@ public class SpellCheckersSettings extends SettingsPreferenceFragment mDialog.dismiss(); } final SpellCheckerInfo currentSci = mTsm.getCurrentSpellChecker(); + if (currentSci == null) { + // This can happen in some situations. One example is that the package that the current + // spell checker belongs to was uninstalled or being in background. + return; + } final SpellCheckerSubtype currentScs = mTsm.getCurrentSpellCheckerSubtype( false /* allowImplicitlySelectedSubtype */); final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());