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());