b730ea1145570cf0d7b3b30fa5bc601a81748a06
[JavaForFun] /
1 package de.example.exampletdd.fragment.preferences;
2
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.NotificationIntentService;
15
16 public class WeatherInformationPreferencesFragment extends PreferenceFragment 
17                                                                                                         implements OnSharedPreferenceChangeListener {
18
19     @Override
20     public void onCreate(final Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22
23         // Load the preferences from an XML resource
24         this.addPreferencesFromResource(R.xml.weather_preferences);
25         
26         
27         // Temperature units
28         String[] values = this.getResources().getStringArray(R.array.weather_preferences_units_value);
29         String[] humanValues = this.getResources().getStringArray(R.array.weather_preferences_units_human_value);
30         String keyPreference = this.getActivity().getApplicationContext().getString(
31                 R.string.weather_preferences_units_key);
32         Preference connectionPref = this.findPreference(keyPreference);
33         String value = this.getPreferenceManager().getSharedPreferences()
34                 .getString(keyPreference, "");
35         String humanValue = "";
36         if (value.equals(values[0])) {
37             humanValue = humanValues[0];
38         } else if (value.equals(values[1])) {
39             humanValue = humanValues[1];
40         } else if (value.equals(values[2])) {
41             humanValue = humanValues[2];
42         }
43         connectionPref.setSummary(humanValue);
44         
45         // Update Time Rate
46         values = this.getResources().getStringArray(R.array.weather_preferences_update_time_rate);
47         humanValues = this.getResources().getStringArray(R.array.weather_preferences_update_time_rate_human_value);
48         keyPreference = this.getActivity().getApplicationContext().getString(
49                 R.string.weather_preferences_update_time_rate_key);
50         connectionPref = this.findPreference(keyPreference);
51         value = this.getPreferenceManager().getSharedPreferences()
52                 .getString(keyPreference, "");
53         humanValue = "";
54         if (value.equals(values[0])) {
55             humanValue = humanValues[0];
56         } else if (value.equals(values[1])) {
57             humanValue = humanValues[1];
58         } else if (value.equals(values[2])) {
59             humanValue = humanValues[2];
60         } else if (value.equals(values[3])) {
61             humanValue = humanValues[3];
62         } else if (value.equals(values[4])) {
63             humanValue = humanValues[4];
64         }
65         connectionPref.setSummary(humanValue);
66         
67         // Wind
68         values = this.getResources().getStringArray(R.array.weather_preferences_wind);
69         humanValues = this.getResources().getStringArray(R.array.weather_preferences_wind_human_value);
70         keyPreference = this.getString(R.string.weather_preferences_wind_key);
71         connectionPref = this.findPreference(keyPreference);
72         value = this.getPreferenceManager().getSharedPreferences().getString(keyPreference, "");
73         humanValue = "";
74         if (value.equals(values[0])) {
75             humanValue = humanValues[0];
76         } else if (value.equals(values[1])) {
77             humanValue = humanValues[1];
78         }
79         connectionPref.setSummary(humanValue);
80         
81         // Forecast days number
82         values = this.getResources().getStringArray(R.array.weather_preferences_day_forecast);
83         humanValues = this.getResources().getStringArray(R.array.weather_preferences_day_forecast_human_value);
84         keyPreference = this.getActivity().getApplicationContext().getString(
85                 R.string.weather_preferences_day_forecast_key);
86         connectionPref = this.findPreference(keyPreference);
87         value = this.getPreferenceManager().getSharedPreferences().getString(keyPreference, "");
88         humanValue = "";
89         if (value.equals(values[0])) {
90             humanValue = humanValues[0];
91         } else if (value.equals(values[1])) {
92             humanValue = humanValues[1];
93         } else if (value.equals(values[2])) {
94             humanValue = humanValues[2];
95         }
96         connectionPref.setSummary(humanValue);
97
98         // Refresh interval
99         values = this.getResources().getStringArray(R.array.weather_preferences_refresh_interval);
100         humanValues = this.getResources().getStringArray(R.array.weather_preferences_refresh_interval_human_value);
101         keyPreference = this.getActivity().getApplicationContext().getString(
102                 R.string.weather_preferences_refresh_interval_key);
103         connectionPref = this.findPreference(keyPreference);
104         value = this.getPreferenceManager().getSharedPreferences().getString(keyPreference, "");
105         humanValue = "";
106         if (value.equals(values[0])) {
107             humanValue = humanValues[0];
108         } else if (value.equals(values[1])) {
109             humanValue = humanValues[1];
110         } else if (value.equals(values[2])) {
111             humanValue = humanValues[2];
112         } else if (value.equals(values[3])) {
113             humanValue = humanValues[3];
114         } else if (value.equals(values[4])) {
115             humanValue = humanValues[4];
116         } else if (value.equals(values[5])) {
117             humanValue = humanValues[5];
118         } else if (value.equals(values[6])) {
119             humanValue = humanValues[6];
120         }
121         connectionPref.setSummary(humanValue);
122     }
123
124     @Override
125     public void onResume() {
126         super.onResume();
127         this.getPreferenceManager().getSharedPreferences()
128         .registerOnSharedPreferenceChangeListener(this);
129
130     }
131
132     @Override
133     public void onPause() {
134         super.onPause();
135         this.getPreferenceManager().getSharedPreferences()
136         .unregisterOnSharedPreferenceChangeListener(this);
137     }
138
139     @Override
140     public void onSharedPreferenceChanged(
141             final SharedPreferences sharedPreferences, final String key) {
142         
143         // Temperature units
144         String[] values = this.getResources().getStringArray(R.array.weather_preferences_units_value);
145         String[] humanValues = this.getResources().getStringArray(R.array.weather_preferences_units_human_value);
146         String keyValue = this.getActivity().getApplicationContext().getString(
147                 R.string.weather_preferences_units_key);
148         if (key.equals(keyValue)) {
149                 final Preference connectionPref = this.findPreference(key);
150             final String value = sharedPreferences.getString(key, "");
151                 String humanValue = "";
152                 if (value.equals(values[0])) {
153                         humanValue = humanValues[0];
154                 } else if (value.equals(values[1])) {
155                         humanValue = humanValues[1];
156                 } else if (value.equals(values[2])) {
157                         humanValue = humanValues[2];
158                 }
159
160                 connectionPref.setSummary(humanValue);
161                 return;
162         }
163
164         // Update Time Rate
165         values = this.getResources().getStringArray(R.array.weather_preferences_update_time_rate);
166         humanValues = this.getResources().getStringArray(R.array.weather_preferences_update_time_rate_human_value);
167         keyValue = this.getActivity().getApplicationContext().getString(
168                         R.string.weather_preferences_update_time_rate_key);
169         if (key.equals(keyValue)) {
170             final Preference connectionPref = this.findPreference(key);
171             final String value = sharedPreferences.getString(key, "");
172             String humanValue = "";
173             if (value.equals(values[0])) {
174                 humanValue = humanValues[0];
175             } else if (value.equals(values[1])) {
176                 humanValue = humanValues[1];
177             } else if (value.equals(values[2])) {
178                 humanValue = humanValues[2];
179             } else if (value.equals(values[3])) {
180                 humanValue = humanValues[3];
181             } else if (value.equals(values[4])) {
182                 humanValue = humanValues[4];
183             }
184             
185             this.updateAlarm(value);
186             connectionPref.setSummary(humanValue);
187             return;
188         }
189
190         // Wind
191         values = this.getResources().getStringArray(R.array.weather_preferences_wind);
192         humanValues = this.getResources().getStringArray(R.array.weather_preferences_wind_human_value);
193         keyValue = this.getString(R.string.weather_preferences_wind_key);
194         if (key.equals(keyValue)) {
195             final Preference connectionPref = this.findPreference(key);
196             final String value = sharedPreferences.getString(key, "");
197             String humanValue = "";
198             if (value.equals(values[0])) {
199                 humanValue = humanValues[0];
200             } else if (value.equals(values[1])) {
201                 humanValue = humanValues[1];
202             }
203         
204                 connectionPref.setSummary(humanValue);
205                 return;
206         }
207         
208         // Forecast days number
209         values = this.getResources().getStringArray(R.array.weather_preferences_day_forecast);
210         humanValues = this.getResources().getStringArray(R.array.weather_preferences_day_forecast_human_value);
211         keyValue = this.getActivity().getString(
212                 R.string.weather_preferences_day_forecast_key);
213         if (key.equals(keyValue)) {
214             final Preference connectionPref = this.findPreference(key);
215             final String value = sharedPreferences.getString(key, "");
216             String humanValue = "";
217             if (value.equals(values[0])) {
218                 humanValue = humanValues[0];
219             } else if (value.equals(values[1])) {
220                 humanValue = humanValues[1];
221             } else if (value.equals(values[2])) {
222                 humanValue = humanValues[2];
223             }
224             connectionPref.setSummary(humanValue);
225             return;
226         }
227
228         // Refresh interval
229         values = this.getResources().getStringArray(R.array.weather_preferences_refresh_interval);
230         humanValues = this.getResources().getStringArray(R.array.weather_preferences_refresh_interval_human_value);
231         keyValue = this.getActivity().getApplicationContext().getString(
232                 R.string.weather_preferences_refresh_interval_key);
233         if (key.equals(keyValue)) {
234                 final Preference connectionPref = this.findPreference(key);
235             final String value = sharedPreferences.getString(key, "");
236             String humanValue = "";
237             if (value.equals(values[0])) {
238                 humanValue = humanValues[0];
239             } else if (value.equals(values[1])) {
240                 humanValue = humanValues[1];
241             } else if (value.equals(values[2])) {
242                 humanValue = humanValues[2];
243             } else if (value.equals(values[3])) {
244                 humanValue = humanValues[3];
245             } else if (value.equals(values[4])) {
246                 humanValue = humanValues[4];
247             } else if (value.equals(values[5])) {
248                 humanValue = humanValues[5];
249             } else if (value.equals(values[6])) {
250                 humanValue = humanValues[6];
251             }
252             connectionPref.setSummary(humanValue);
253             return;
254         }
255     }
256
257     private void updateAlarm(final String updateTimeRate) {
258         final String[] values = this.getResources().getStringArray(R.array.weather_preferences_update_time_rate);
259         long chosenInterval = 0;
260         if (updateTimeRate.equals(values[0])) {
261                 chosenInterval = AlarmManager.INTERVAL_FIFTEEN_MINUTES;
262         } else if (updateTimeRate.equals(values[1])) {
263                 chosenInterval = AlarmManager.INTERVAL_HALF_HOUR;
264         } else if (updateTimeRate.equals(values[2])) {
265                 chosenInterval = AlarmManager.INTERVAL_HOUR;
266         } else if (updateTimeRate.equals(values[3])) {
267                 chosenInterval = AlarmManager.INTERVAL_HALF_DAY;
268         } else if (updateTimeRate.equals(values[4])) {
269                 chosenInterval = AlarmManager.INTERVAL_DAY;
270         }
271
272         final AlarmManager alarmMgr =
273                         (AlarmManager) this.getActivity().getApplicationContext().getSystemService(Context.ALARM_SERVICE);
274         // TODO: better use some string instead of .class? In case I change the service class
275         // this could be a problem (I guess)
276         final Intent serviceIntent =
277                         new Intent(this.getActivity().getApplicationContext(), NotificationIntentService.class);
278         final PendingIntent alarmIntent =
279                         PendingIntent.getService(
280                                         this.getActivity().getApplicationContext(),
281                                         0,
282                                         serviceIntent,
283                                         PendingIntent.FLAG_UPDATE_CURRENT);
284         if (chosenInterval != 0) {   
285             alarmMgr.setInexactRepeating(
286                         AlarmManager.ELAPSED_REALTIME,
287                         SystemClock.elapsedRealtime(),
288                         chosenInterval,
289                         alarmIntent);
290         } else {
291                 alarmMgr.cancel(alarmIntent);
292         }
293     }
294 }