package com.camilstaps.taize; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.util.Log; import com.camilstaps.common.NullListener; import java.util.HashSet; public class SettingsActivity extends PreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit(); } private static Preference.OnPreferenceChangeListener onPreferenceChangeListener = new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference pref, Object newValue) { String stringValue = newValue.toString(); if (pref instanceof ListPreference) { ListPreference listPref = (ListPreference) pref; int index = listPref.findIndexOfValue(stringValue); pref.setSummary(index >= 0 ? listPref.getEntries()[index] : null); // .getEntry() seems to cause problems } else { pref.setSummary(stringValue); } return true; } }; private static void bindSummaryToValue(Preference pref) { pref.setOnPreferenceChangeListener(onPreferenceChangeListener); onPreferenceChangeListener.onPreferenceChange(pref, PreferenceManager.getDefaultSharedPreferences(pref.getContext()).getString(pref.getKey(), pref.getSummary().toString())); } public static class SettingsFragment extends PreferenceFragment { public static final String PREF_LANGUAGE_READINGS = "pref_language_reading"; public static final String PREF_VERSION_BIBLE = "pref_version_bible"; private SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); bindSummaryToValue(findPreference(PREF_LANGUAGE_READINGS)); bindSummaryToValue(findPreference(PREF_VERSION_BIBLE)); sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals(SettingsFragment.PREF_LANGUAGE_READINGS)) { Taize.clearDailyReadingsSet(getActivity()); } else if (key.equals(SettingsFragment.PREF_VERSION_BIBLE)) { Taize.forceNewDailyReadingBibleText(getActivity(), new NullListener()); } } }; PreferenceManager.getDefaultSharedPreferences(getActivity()).registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); } } }