1 package de.example.exampletdd.fragment.preferences;
 
   3 import android.app.AlarmManager;
 
   4 import android.app.PendingIntent;
 
   5 import android.content.Context;
 
   6 import android.content.Intent;
 
   7 import android.content.SharedPreferences;
 
   8 import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
 
   9 import android.os.Bundle;
 
  10 import android.os.SystemClock;
 
  11 import android.preference.Preference;
 
  12 import android.preference.PreferenceFragment;
 
  13 import de.example.exampletdd.R;
 
  14 import de.example.exampletdd.WeatherInformationBatch;
 
  16 public class WeatherInformationPreferencesFragment extends PreferenceFragment 
 
  17                                                                                                         implements OnSharedPreferenceChangeListener {
 
  20     public void onCreate(final Bundle savedInstanceState) {
 
  21         super.onCreate(savedInstanceState);
 
  23         // Load the preferences from an XML resource
 
  24         this.addPreferencesFromResource(R.xml.weather_preferences);
 
  27         // Units of Measurement
 
  28         String keyPreference = this.getActivity().getApplicationContext().getString(
 
  29                 R.string.weather_preferences_units_key);
 
  30         Preference connectionPref = this.findPreference(keyPreference);
 
  31         connectionPref.setSummary(this.getPreferenceManager()
 
  32                 .getSharedPreferences().getString(keyPreference, ""));
 
  35         keyPreference = this.getActivity().getApplicationContext().getString(
 
  36                 R.string.weather_preferences_update_time_rate_key);
 
  37         connectionPref = this.findPreference(keyPreference);
 
  38         String value = this.getPreferenceManager().getSharedPreferences()
 
  39                 .getString(keyPreference, "");
 
  40         String humanValue = "";
 
  41         if (value.equals("0")) {
 
  42             humanValue = "no updates";
 
  43         } else if (value.equals("900")) {
 
  44             humanValue = "fifteen minutes";
 
  45         } else if (value.equals("1800")) {
 
  46             humanValue = "half hour";
 
  47         } else if (value.equals("3600")) {
 
  48             humanValue = "one hour";
 
  49         } else if (value.equals("43200")) {
 
  50             humanValue = "half day";
 
  51         } else if (value.equals("86400")) {
 
  52             humanValue = "one day";
 
  54         connectionPref.setSummary(humanValue);
 
  56         // Forecast days number
 
  57         keyPreference = this.getActivity().getApplicationContext().getString(
 
  58                 R.string.weather_preferences_day_forecast_key);
 
  59         connectionPref = this.findPreference(keyPreference);
 
  60         value = this.getPreferenceManager().getSharedPreferences().getString(keyPreference, "");
 
  62         if (value.equals("5")) {
 
  63             humanValue = "5-Day Forecast";
 
  64         } else if (value.equals("10")) {
 
  65             humanValue = "10-Day Forecast";
 
  66         } else if (value.equals("14")) {
 
  67             humanValue = "14-Day Forecast";
 
  69         connectionPref.setSummary(humanValue);
 
  73     public void onResume() {
 
  75         this.getPreferenceManager().getSharedPreferences()
 
  76         .registerOnSharedPreferenceChangeListener(this);
 
  81     public void onPause() {
 
  83         this.getPreferenceManager().getSharedPreferences()
 
  84         .unregisterOnSharedPreferenceChangeListener(this);
 
  88     public void onSharedPreferenceChanged(
 
  89             final SharedPreferences sharedPreferences, final String key) {
 
  91         // Units of Measurement
 
  92         String keyValue = this.getActivity().getApplicationContext().getString(
 
  93                 R.string.weather_preferences_units_key);
 
  95         if (key.equals(keyValue)) {
 
  96             final Preference connectionPref = this.findPreference(key);
 
  97             connectionPref.setSummary(sharedPreferences.getString(key, ""));
 
 102         keyValue = this.getActivity().getApplicationContext().getString(
 
 103                         R.string.weather_preferences_update_time_rate_key);
 
 104         if (key.equals(keyValue)) {
 
 105             final Preference connectionPref = this.findPreference(key);
 
 106             final String value = sharedPreferences.getString(key, "");
 
 107             String humanValue = "";
 
 108             if (value.equals("0")) {
 
 109                 humanValue = "no updates";
 
 110             } else if (value.equals("900")) {
 
 111                 humanValue = "fifteen minutes";
 
 112             } else if (value.equals("1800")) {
 
 113                 humanValue = "half hour";
 
 114             } else if (value.equals("3600")) {
 
 115                 humanValue = "one hour";
 
 116             } else if (value.equals("43200")) {
 
 117                 humanValue = "half day";
 
 118             } else if (value.equals("86400")) {
 
 119                 humanValue = "one day";
 
 122             this.updateAlarm(value);
 
 123             connectionPref.setSummary(humanValue);
 
 127         // Forecast days number
 
 128         keyValue = this.getActivity().getString(
 
 129                 R.string.weather_preferences_day_forecast_key);
 
 130         if (key.equals(keyValue)) {
 
 131             final Preference connectionPref = this.findPreference(key);
 
 132             final String value = sharedPreferences.getString(key, "");
 
 133             String humanValue = "";
 
 134             if (value.equals("5")) {
 
 135                 humanValue = "5-Day Forecast";
 
 136             } else if (value.equals("10")) {
 
 137                 humanValue = "10-Day Forecast";
 
 138             } else if (value.equals("14")) {
 
 139                 humanValue = "14-Day Forecast";
 
 141             connectionPref.setSummary(humanValue);
 
 147     private void updateAlarm(final String updateTimeRate) {
 
 148         long chosenInterval = 0;
 
 149         if (updateTimeRate.equals("900")) {
 
 150                 chosenInterval = AlarmManager.INTERVAL_FIFTEEN_MINUTES;
 
 151         } else if (updateTimeRate.equals("1800")) {
 
 152                 chosenInterval = AlarmManager.INTERVAL_HALF_HOUR;
 
 153         } else if (updateTimeRate.equals("3600")) {
 
 154                 chosenInterval = AlarmManager.INTERVAL_HOUR;
 
 155         } else if (updateTimeRate.equals("43200")) {
 
 156                 chosenInterval = AlarmManager.INTERVAL_HALF_DAY;
 
 157         } else if (updateTimeRate.equals("86400")) {
 
 158                 chosenInterval = AlarmManager.INTERVAL_DAY;
 
 161         final AlarmManager alarmMgr =
 
 162                         (AlarmManager) this.getActivity().getApplicationContext().getSystemService(Context.ALARM_SERVICE);
 
 163         // TODO: better use some string instead of .class? In case I change the service class
 
 164         // this could be a problem (I guess)
 
 165         final Intent serviceIntent =
 
 166                         new Intent(this.getActivity().getApplicationContext(), WeatherInformationBatch.class);
 
 167         final PendingIntent alarmIntent =
 
 168                         PendingIntent.getService(
 
 169                                         this.getActivity().getApplicationContext(),
 
 172                                         PendingIntent.FLAG_UPDATE_CURRENT);
 
 173         if (chosenInterval != 0) {   
 
 174             alarmMgr.setInexactRepeating(
 
 175                         AlarmManager.ELAPSED_REALTIME,
 
 176                         SystemClock.elapsedRealtime(),
 
 180                 alarmMgr.cancel(alarmIntent);