package ru.gelin.android.weather.notification.skin.impl; import android.content.Context; import android.graphics.drawable.LevelListDrawable; import ru.gelin.android.weather.WeatherCondition; import ru.gelin.android.weather.WeatherConditionType; import ru.gelin.android.weather.notification.skin.R; import java.util.*; import static ru.gelin.android.weather.WeatherConditionType.*; /** * Formats weather condition text. */ public class WeatherConditionFormat { static final String SEPARATOR = ", "; static Map<WeatherConditionType, Integer> STR_MAP = new EnumMap<WeatherConditionType, Integer>(WeatherConditionType.class); static { STR_MAP.put(THUNDERSTORM_RAIN_LIGHT, R.string.condition_thunderstorm_rain_light); STR_MAP.put(THUNDERSTORM_RAIN, R.string.condition_thunderstorm_rain); STR_MAP.put(THUNDERSTORM_RAIN_HEAVY, R.string.condition_thunderstorm_rain_heavy); STR_MAP.put(THUNDERSTORM_LIGHT, R.string.condition_thunderstorm_light); STR_MAP.put(THUNDERSTORM, R.string.condition_thunderstorm); STR_MAP.put(THUNDERSTORM_HEAVY, R.string.condition_thunderstorm_heavy); STR_MAP.put(THUNDERSTORM_RAGGED, R.string.condition_thunderstorm_ragged); STR_MAP.put(THUNDERSTORM_DRIZZLE_LIGHT, R.string.condition_thunderstorm_drizzle_light); STR_MAP.put(THUNDERSTORM_DRIZZLE, R.string.condition_thunderstorm_drizzle); STR_MAP.put(THUNDERSTORM_DRIZZLE_HEAVY, R.string.condition_thunderstorm_drizzle_heavy); STR_MAP.put(DRIZZLE_LIGHT, R.string.condition_drizzle_light); STR_MAP.put(DRIZZLE, R.string.condition_drizzle); STR_MAP.put(DRIZZLE_HEAVY, R.string.condition_drizzle_heavy); STR_MAP.put(DRIZZLE_RAIN_LIGHT, R.string.condition_drizzle_rain_light); STR_MAP.put(DRIZZLE_RAIN, R.string.condition_drizzle_rain); STR_MAP.put(DRIZZLE_RAIN_HEAVY, R.string.condition_drizzle_rain_heavy); STR_MAP.put(DRIZZLE_SHOWER, R.string.condition_drizzle_shower); STR_MAP.put(RAIN_LIGHT, R.string.condition_rain_light); STR_MAP.put(RAIN, R.string.condition_rain); STR_MAP.put(RAIN_HEAVY, R.string.condition_rain_heavy); STR_MAP.put(RAIN_VERY_HEAVY, R.string.condition_rain_very_heavy); STR_MAP.put(RAIN_EXTREME, R.string.condition_rain_extreme); STR_MAP.put(RAIN_FREEZING, R.string.condition_rain_freezing); STR_MAP.put(RAIN_SHOWER_LIGHT, R.string.condition_rain_shower_light); STR_MAP.put(RAIN_SHOWER, R.string.condition_rain_shower); STR_MAP.put(RAIN_SHOWER_HEAVY, R.string.condition_rain_shower_heavy); STR_MAP.put(SNOW_LIGHT, R.string.condition_snow_light); STR_MAP.put(SNOW, R.string.condition_snow); STR_MAP.put(SNOW_HEAVY, R.string.condition_snow_heavy); STR_MAP.put(SLEET, R.string.condition_sleet); STR_MAP.put(SNOW_SHOWER, R.string.condition_snow_shower); STR_MAP.put(MIST, R.string.condition_mist); STR_MAP.put(SMOKE, R.string.condition_smoke); STR_MAP.put(HAZE, R.string.condition_haze); STR_MAP.put(SAND_WHIRLS, R.string.condition_sand_whirls); STR_MAP.put(FOG, R.string.condition_fog); STR_MAP.put(CLOUDS_CLEAR, R.string.condition_clouds_clear); STR_MAP.put(CLOUDS_FEW, R.string.condition_clouds_few); STR_MAP.put(CLOUDS_SCATTERED, R.string.condition_clouds_scattered); STR_MAP.put(CLOUDS_BROKEN, R.string.condition_clouds_broken); STR_MAP.put(CLOUDS_OVERCAST, R.string.condition_clouds_overcast); STR_MAP.put(TORNADO, R.string.condition_tornado); STR_MAP.put(TROPICAL_STORM, R.string.condition_tropical_storm); STR_MAP.put(HURRICANE, R.string.condition_hurricane); STR_MAP.put(COLD, R.string.condition_cold); STR_MAP.put(HOT, R.string.condition_hot); STR_MAP.put(WINDY, R.string.condition_windy); STR_MAP.put(HAIL, R.string.condition_hail); } static Map<WeatherConditionType, Integer> IMG_MAP = new EnumMap<WeatherConditionType, Integer>(WeatherConditionType.class); static { IMG_MAP.put(THUNDERSTORM_RAIN_LIGHT, R.drawable.condition_storm); IMG_MAP.put(THUNDERSTORM_RAIN, R.drawable.condition_storm); IMG_MAP.put(THUNDERSTORM_RAIN_HEAVY, R.drawable.condition_storm); IMG_MAP.put(THUNDERSTORM_LIGHT, R.drawable.condition_storm); IMG_MAP.put(THUNDERSTORM, R.drawable.condition_storm); IMG_MAP.put(THUNDERSTORM_HEAVY, R.drawable.condition_storm); IMG_MAP.put(THUNDERSTORM_RAGGED, R.drawable.condition_storm); IMG_MAP.put(THUNDERSTORM_DRIZZLE_LIGHT, R.drawable.condition_storm); IMG_MAP.put(THUNDERSTORM_DRIZZLE, R.drawable.condition_storm); IMG_MAP.put(THUNDERSTORM_DRIZZLE_HEAVY, R.drawable.condition_storm); IMG_MAP.put(DRIZZLE_LIGHT, R.drawable.condition_rain); IMG_MAP.put(DRIZZLE, R.drawable.condition_rain); IMG_MAP.put(DRIZZLE_HEAVY, R.drawable.condition_rain); IMG_MAP.put(DRIZZLE_RAIN_LIGHT, R.drawable.condition_rain); IMG_MAP.put(DRIZZLE_RAIN, R.drawable.condition_rain); IMG_MAP.put(DRIZZLE_RAIN_HEAVY, R.drawable.condition_rain); IMG_MAP.put(DRIZZLE_SHOWER, R.drawable.condition_shower); IMG_MAP.put(RAIN_LIGHT, R.drawable.condition_rain); IMG_MAP.put(RAIN, R.drawable.condition_rain); IMG_MAP.put(RAIN_HEAVY, R.drawable.condition_rain); IMG_MAP.put(RAIN_VERY_HEAVY, R.drawable.condition_rain); IMG_MAP.put(RAIN_EXTREME, R.drawable.condition_rain); IMG_MAP.put(RAIN_FREEZING, R.drawable.condition_rain); IMG_MAP.put(RAIN_SHOWER_LIGHT, R.drawable.condition_shower); IMG_MAP.put(RAIN_SHOWER, R.drawable.condition_shower); IMG_MAP.put(RAIN_SHOWER_HEAVY, R.drawable.condition_shower); IMG_MAP.put(SNOW_LIGHT, R.drawable.condition_snow); IMG_MAP.put(SNOW, R.drawable.condition_snow); IMG_MAP.put(SNOW_HEAVY, R.drawable.condition_snow); IMG_MAP.put(SLEET, R.drawable.condition_snow); IMG_MAP.put(SNOW_SHOWER, R.drawable.condition_snow); IMG_MAP.put(MIST, R.drawable.condition_mist); IMG_MAP.put(SMOKE, R.drawable.condition_mist); IMG_MAP.put(HAZE, R.drawable.condition_mist); IMG_MAP.put(SAND_WHIRLS, R.drawable.condition_mist); IMG_MAP.put(FOG, R.drawable.condition_mist); IMG_MAP.put(CLOUDS_CLEAR, R.drawable.condition_clear); IMG_MAP.put(CLOUDS_FEW, R.drawable.condition_clouds); IMG_MAP.put(CLOUDS_SCATTERED, R.drawable.condition_clouds); IMG_MAP.put(CLOUDS_BROKEN, R.drawable.condition_overcast); IMG_MAP.put(CLOUDS_OVERCAST, R.drawable.condition_overcast); IMG_MAP.put(TORNADO, R.drawable.condition_alert); IMG_MAP.put(TROPICAL_STORM, R.drawable.condition_alert); IMG_MAP.put(HURRICANE, R.drawable.condition_alert); IMG_MAP.put(COLD, R.drawable.condition_alert); IMG_MAP.put(HOT, R.drawable.condition_alert); IMG_MAP.put(WINDY, R.drawable.condition_alert); IMG_MAP.put(HAIL, R.drawable.condition_alert); } Context context; public WeatherConditionFormat(Context context) { this.context = context; } public String getText(WeatherCondition condition) { int maxPriority = 0; List<WeatherConditionType> resultTypes = new ArrayList<WeatherConditionType>(); for (WeatherConditionType type : condition.getConditionTypes()) { if (type.getPriority() > maxPriority) { maxPriority = type.getPriority(); } } for (WeatherConditionType type : condition.getConditionTypes()) { if (type.getPriority() == maxPriority) { resultTypes.add(type); } } if (resultTypes.isEmpty()) { return this.context.getString(getStringId(WeatherConditionType.CLOUDS_CLEAR)); } StringBuilder result = new StringBuilder(); for (WeatherConditionType type : resultTypes) { Integer id = getStringId(type); if (id != null) { result.append(this.context.getString(id)); result.append(SEPARATOR); } } if (result.length() > 0) { result.delete(result.length() - SEPARATOR.length(), result.length()); } return result.toString(); } /** * Returns the LevelListDrawable, suitable for this weather condition. * The level of the drawable defines the desired drawable size in dp. */ public LevelListDrawable getDrawable(WeatherCondition condition) { return (LevelListDrawable)this.context.getResources().getDrawable(getDrawableId(condition)); } /** * Returns the ID of the drawable icon, suitable for this weather condition. * It's the LevelListDrawable, where the level defines the desired drawable size in dp. */ public static int getDrawableId(WeatherCondition condition) { Collection<WeatherConditionType> types = condition.getConditionTypes(); if (types == null || types.isEmpty()) { return getDrawableId(WeatherConditionType.CLOUDS_CLEAR); } return getDrawableId(types.iterator().next()); } static Integer getStringId(WeatherConditionType type) { return STR_MAP.get(type); } static Integer getDrawableId(WeatherConditionType type) { return IMG_MAP.get(type); } }