@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;
        }