package org.indywidualni.fblite.fragment; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.media.Ringtone; import android.media.RingtoneManager; import android.net.Uri; import android.os.Bundle; import android.preference.ListPreference; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.preference.RingtonePreference; import android.util.Log; import org.indywidualni.fblite.MyApplication; import org.indywidualni.fblite.R; import org.indywidualni.fblite.service.NotificationsService; public class NotificationsSettingsFragment extends PreferenceFragment { @SuppressLint("StaticFieldLeak") private static Context context; private SharedPreferences preferences; private SharedPreferences.OnSharedPreferenceChangeListener prefChangeListener; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // load the preferences from an XML resource addPreferencesFromResource(R.xml.notifications_preferences); context = MyApplication.getContextOfApplication(); preferences = PreferenceManager.getDefaultSharedPreferences(context); // default value for interval_pref preference summary ListPreference lp = (ListPreference) findPreference("interval_pref"); String temp1 = getString(R.string.interval_pref_description_new).replace("%s", ""); String temp2 = lp.getSummary().toString(); if (temp1.equals(temp2)) lp.setValueIndex(4); // listener for changing preferences (works after the value change) prefChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { // service intent (start, stop) final Intent intent = new Intent(context, NotificationsService.class); switch (key) { case "interval_pref": // restart the service after time interval change if (prefs.getBoolean("notifications_activated", false) || prefs.getBoolean("message_notifications", false)) { context.stopService(intent); context.startService(intent); } break; } } }; } @Override public void onStart() { super.onStart(); // register the listener preferences.registerOnSharedPreferenceChangeListener(prefChangeListener); } @Override public void onStop() { super.onStop(); // unregister the listener preferences.unregisterOnSharedPreferenceChangeListener(prefChangeListener); } @Override public void onResume() { super.onResume(); // update notification ringtone preference summary String ringtoneString = preferences.getString("ringtone", "content://settings/system/notification_sound"); Uri ringtoneUri = Uri.parse(ringtoneString); String name; try { Ringtone ringtone = RingtoneManager.getRingtone(context, ringtoneUri); name = ringtone.getTitle(context); } catch (Exception ex) { Log.w("NotificationsSettings", ex); name = "Default"; } if ("".equals(ringtoneString)) name = getString(R.string.silent); RingtonePreference rpn = (RingtonePreference) findPreference("ringtone"); rpn.setSummary(getString(R.string.notification_sound_description) + name); // update message ringtone preference summary ringtoneString = preferences.getString("ringtone_msg", "content://settings/system/notification_sound"); ringtoneUri = Uri.parse(ringtoneString); try { Ringtone ringtone = RingtoneManager.getRingtone(context, ringtoneUri); name = ringtone.getTitle(context); } catch (Exception ex) { Log.w("NotificationsSettings", ex); name = "Default"; } if ("".equals(ringtoneString)) name = getString(R.string.silent); RingtonePreference rpm = (RingtonePreference) findPreference("ringtone_msg"); rpm.setSummary(getString(R.string.notification_sound_description) + name); } }