@Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (preference instanceof ListPreference && newValue instanceof String) { final ListPreference listPreference = (ListPreference) preference; final int index = listPreference.findIndexOfValue((String) newValue); final CharSequence[] entries = listPreference.getEntries(); if (index >= 0 && index < entries.length) { preference.setSummary(entries[index].toString().replaceAll("%", "%%")); } else { preference.setSummary(""); } } final String key = preference.getKey(); if (getString(R.string.pref_resume_talkback_key).equals(key)) { final String oldValue = SharedPreferencesUtils.getStringPref( mPrefs, getResources(), R.string.pref_resume_talkback_key, R.string.pref_resume_talkback_default); if (!newValue.equals(oldValue)) { // Reset the suspend warning dialog when the resume // preference changes. SharedPreferencesUtils.putBooleanPref( mPrefs, getResources(), R.string.pref_show_suspension_confirmation_dialog, true); } } return true; }