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 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) {
ex.printStackTrace();
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) {
ex.printStackTrace();
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);
}
}