Skip to content

Commit e99968e

Browse files
committed
Change icon pack based on user preference
1 parent 822d52b commit e99968e

File tree

6 files changed

+56
-14
lines changed

6 files changed

+56
-14
lines changed

app/src/main/java/com/example/android/sunshine/app/ForecastAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public void bindView(View view, Context context, Cursor cursor) {
108108
break;
109109
}
110110
}
111-
111+
112112
Glide.with(mContext)
113113
.load(Utility.getArtUrlForWeatherCondition(mContext, weatherId))
114114
.error(fallbackIconId)

app/src/main/java/com/example/android/sunshine/app/SettingsActivity.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public void onCreate(Bundle savedInstanceState) {
4949
// updated when the preference changes.
5050
bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_location_key)));
5151
bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_units_key)));
52+
bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_art_pack_key)));
5253
}
5354

5455
// Registers a shared preference change listener that gets notified when preferences change
@@ -142,6 +143,9 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Strin
142143
// our location status has changed. Update the summary accordingly
143144
Preference locationPreference = findPreference(getString(R.string.pref_location_key));
144145
bindPreferenceSummaryToValue(locationPreference);
146+
} else if ( key.equals(getString(R.string.pref_art_pack_key)) ) {
147+
// art pack have changed. update lists of weather entries accordingly
148+
getContentResolver().notifyChange(WeatherContract.WeatherEntry.CONTENT_URI, null);
145149
}
146150
}
147151

app/src/main/java/com/example/android/sunshine/app/Utility.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.text.DateFormat;
2828
import java.text.SimpleDateFormat;
2929
import java.util.Date;
30+
import java.util.Locale;
3031

3132
public class Utility {
3233
public static String getPreferredLocation(Context context) {
@@ -225,30 +226,34 @@ public static int getIconResourceForWeatherCondition(int weatherId) {
225226
* @return url for the corresponding weather artwork. null if no relation is found.
226227
*/
227228
public static String getArtUrlForWeatherCondition(Context context, int weatherId) {
229+
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
230+
String formatArtUrl = prefs.getString(context.getString(R.string.pref_art_pack_key),
231+
context.getString(R.string.pref_art_pack_sunshine));
232+
228233
// Based on weather code data found at:
229234
// http://bugs.openweathermap.org/projects/api/wiki/Weather_Condition_Codes
230235
if (weatherId >= 200 && weatherId <= 232) {
231-
return context.getString(R.string.format_art_url, "storm");
236+
return String.format(Locale.US, formatArtUrl, "storm");
232237
} else if (weatherId >= 300 && weatherId <= 321) {
233-
return context.getString(R.string.format_art_url, "light_rain");
238+
return String.format(Locale.US, formatArtUrl, "light_rain");
234239
} else if (weatherId >= 500 && weatherId <= 504) {
235-
return context.getString(R.string.format_art_url, "rain");
240+
return String.format(Locale.US, formatArtUrl, "rain");
236241
} else if (weatherId == 511) {
237-
return context.getString(R.string.format_art_url, "snow");
242+
return String.format(Locale.US, formatArtUrl, "snow");
238243
} else if (weatherId >= 520 && weatherId <= 531) {
239-
return context.getString(R.string.format_art_url, "rain");
244+
return String.format(Locale.US, formatArtUrl, "rain");
240245
} else if (weatherId >= 600 && weatherId <= 622) {
241-
return context.getString(R.string.format_art_url, "snow");
246+
return String.format(Locale.US, formatArtUrl, "snow");
242247
} else if (weatherId >= 701 && weatherId <= 761) {
243-
return context.getString(R.string.format_art_url, "fog");
248+
return String.format(Locale.US, formatArtUrl, "fog");
244249
} else if (weatherId == 761 || weatherId == 781) {
245-
return context.getString(R.string.format_art_url, "storm");
250+
return String.format(Locale.US, formatArtUrl, "storm");
246251
} else if (weatherId == 800) {
247-
return context.getString(R.string.format_art_url, "clear");
252+
return String.format(Locale.US, formatArtUrl, "clear");
248253
} else if (weatherId == 801) {
249-
return context.getString(R.string.format_art_url, "light_clouds");
254+
return String.format(Locale.US, formatArtUrl, "light_clouds");
250255
} else if (weatherId >= 802 && weatherId <= 804) {
251-
return context.getString(R.string.format_art_url, "clouds");
256+
return String.format(Locale.US, formatArtUrl, "clouds");
252257
}
253258
return null;
254259
}

app/src/main/res/values/arrays.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,16 @@
2525
<item>@string/pref_units_metric</item>
2626
<item>@string/pref_units_imperial</item>
2727
</string-array>
28+
29+
<!-- Names of the art packs available -->
30+
<string-array name="pref_art_pack_options">
31+
<item>@string/pref_art_pack_label_sunshine</item>
32+
<item>@string/pref_art_pack_label_cute_dogs</item>
33+
</string-array>
34+
35+
<!-- Format for retrieving art from an external source [CHAR LIMIT=NONE] -->
36+
<string-array name="pref_art_pack_values">
37+
<item>@string/pref_art_pack_sunshine</item>
38+
<item>@string/pref_art_pack_cute_dogs</item>
39+
</string-array>
2840
</resources>

app/src/main/res/values/strings.xml

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,23 @@
8080
<!-- Value in SharedPreferences for imperial temperature unit option [CHAR LIMIT=NONE] -->
8181
<string name="pref_units_imperial" translatable="false">imperial</string>
8282

83+
<!-- Label for the art pack preference [CHAR LIMIT=30] -->
84+
<string name="pref_art_pack_label">Icon Pack</string>
8385

84-
<!-- Format for retrieving art from an external source [CHAR LIMIT=NONE] -->
85-
<string name="format_art_url" translatable="false">https://raw.githubusercontent.com/udacity/Sunshine-Version-2/sunshine_master/app/src/main/res/drawable-xxhdpi/art_<xliff:g id="description">%s</xliff:g>.png</string>
86+
<!-- Label for Sunshine option in art pack preference [CHAR LIMIT=25] -->
87+
<string name="pref_art_pack_label_sunshine">Sunshine</string>
88+
89+
<!-- Label for cute dogs option in art pack preference [CHAR LIMIT=25] -->
90+
<string name="pref_art_pack_label_cute_dogs">Cute dogs</string>
91+
92+
<!-- Key name for art pack unit preference in SharedPreferences [CHAR LIMIT=NONE] -->
93+
<string name="pref_art_pack_key" translatable="false">art_pack</string>
94+
95+
<!-- Value in SharedPreferences for Sunshine art pack option [CHAR LIMIT=NONE] -->
96+
<string name="pref_art_pack_sunshine" translatable="false">https://raw.githubusercontent.com/udacity/Sunshine-Version-2/sunshine_master/app/src/main/res/drawable-xxhdpi/art_%s.png</string>
97+
98+
<!-- Value in SharedPreferences for cute dogs art pack option [CHAR LIMIT=NONE] -->
99+
<string name="pref_art_pack_cute_dogs" translatable="false">https://raw.githubusercontent.com/udacity/Sunshine-Version-2/sunshine_master/app/src/main/res/drawable-mdpi/art_%s.png</string>
86100

87101
<!-- Language-specific constants -->
88102
<string name="today">Today</string>

app/src/main/res/xml/pref_general.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@
3535
android:entryValues="@array/pref_units_values"
3636
android:entries="@array/pref_units_options" />
3737

38+
<ListPreference
39+
android:title="@string/pref_art_pack_label"
40+
android:key="@string/pref_art_pack_key"
41+
android:defaultValue="@string/pref_art_pack_sunshine"
42+
android:entryValues="@array/pref_art_pack_values"
43+
android:entries="@array/pref_art_pack_options" />
44+
3845
<CheckBoxPreference
3946
android:title="@string/pref_enable_notifications_label"
4047
android:key="@string/pref_enable_notifications_key"

0 commit comments

Comments
 (0)