package wangdaye.com.geometricweather.basic.model.option.utils; import android.content.Context; import android.text.TextUtils; import androidx.annotation.ArrayRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import java.util.ArrayList; import java.util.List; import wangdaye.com.geometricweather.basic.model.option.DarkMode; import wangdaye.com.geometricweather.basic.model.option.NotificationStyle; import wangdaye.com.geometricweather.basic.model.option.NotificationTextColor; import wangdaye.com.geometricweather.basic.model.option.UpdateInterval; import wangdaye.com.geometricweather.basic.model.option.WidgetWeekIconMode; import wangdaye.com.geometricweather.basic.model.option.appearance.CardDisplay; import wangdaye.com.geometricweather.basic.model.option.appearance.DailyTrendDisplay; import wangdaye.com.geometricweather.basic.model.option.appearance.Language; import wangdaye.com.geometricweather.basic.model.option.appearance.UIStyle; import wangdaye.com.geometricweather.basic.model.option.provider.LocationProvider; import wangdaye.com.geometricweather.basic.model.option.provider.WeatherSource; import wangdaye.com.geometricweather.basic.model.option.unit.DistanceUnit; import wangdaye.com.geometricweather.basic.model.option.unit.PrecipitationUnit; import wangdaye.com.geometricweather.basic.model.option.unit.PressureUnit; import wangdaye.com.geometricweather.basic.model.option.unit.SpeedUnit; import wangdaye.com.geometricweather.basic.model.option.unit.TemperatureUnit; /** * Option mapper. * */ public class OptionMapper { @Nullable public static String getNameByValue(Context context, String value, @ArrayRes int nameArrayId, @ArrayRes int valueArrayId) { String[] names = context.getResources().getStringArray(nameArrayId); String[] values = context.getResources().getStringArray(valueArrayId); for (int i = 0; i < values.length; i ++) { if (values[i].equals(value)) { return names[i]; } } return null; } public static UpdateInterval getUpdateInterval(String value) { switch (value) { case "0:30": return UpdateInterval.INTERVAL_0_30; case "1:00": return UpdateInterval.INTERVAL_1_00; case "2:00": return UpdateInterval.INTERVAL_2_00; case "2:30": return UpdateInterval.INTERVAL_2_30; case "3:00": return UpdateInterval.INTERVAL_3_00; case "3:30": return UpdateInterval.INTERVAL_3_30; case "4:00": return UpdateInterval.INTERVAL_4_00; case "4:30": return UpdateInterval.INTERVAL_4_30; case "5:00": return UpdateInterval.INTERVAL_5_00; case "5:30": return UpdateInterval.INTERVAL_5_30; case "6:00": return UpdateInterval.INTERVAL_6_00; default: return UpdateInterval.INTERVAL_1_30; } } public static WeatherSource getWeatherSource(String value) { switch (value) { case "cn": return WeatherSource.CN; case "caiyun": return WeatherSource.CAIYUN; default: return WeatherSource.ACCU; } } public static LocationProvider getLocationProvider(String value) { switch (value) { case "baidu_ip": return LocationProvider.BAIDU_IP; case "baidu": return LocationProvider.BAIDU; case "amap": return LocationProvider.AMAP; default: return LocationProvider.NATIVE; } } public static DarkMode getDarkMode(String value) { switch (value) { case "light": return DarkMode.LIGHT; case "dark": return DarkMode.DARK; default: return DarkMode.AUTO; } } public static TemperatureUnit getTemperatureUnit(String value) { switch (value) { case "f": return TemperatureUnit.F; case "k": return TemperatureUnit.K; default: return TemperatureUnit.C; } } public static DistanceUnit getDistanceUnit(String value) { switch (value) { case "m": return DistanceUnit.M; case "mi": return DistanceUnit.MI; case "nmi": return DistanceUnit.NMI; case "ft": return DistanceUnit.FT; default: return DistanceUnit.KM; } } public static PrecipitationUnit getPrecipitationUnit(String value) { switch (value) { case "in": return PrecipitationUnit.IN; case "lpsqm": return PrecipitationUnit.LPSQM; default: return PrecipitationUnit.MM; } } public static PressureUnit getPressureUnit(String value) { switch (value) { case "kpa": return PressureUnit.KPA; case "hpa": return PressureUnit.HPA; case "atm": return PressureUnit.ATM; case "mmhg": return PressureUnit.MMHG; case "inhg": return PressureUnit.INHG; case "kgfpsqcm": return PressureUnit.KGFPSQCM; default: return PressureUnit.MB; } } public static SpeedUnit getSpeedUnit(String value) { switch (value) { case "mps": return SpeedUnit.MPS; case "kn": return SpeedUnit.KN; case "mph": return SpeedUnit.MPH; case "ftps": return SpeedUnit.FTPS; default: return SpeedUnit.KPH; } } public static UIStyle getUIStyle(String value) { switch (value) { case "circular": return UIStyle.CIRCULAR; default: return UIStyle.MATERIAL; } } @NonNull public static List<CardDisplay> getCardDisplayList(String value) { if (TextUtils.isEmpty(value)) { return new ArrayList<>(); } try { String[] cards = value.split("&"); List<CardDisplay> list = new ArrayList<>(); for (String card : cards) { switch (card) { case "daily_overview": list.add(CardDisplay.CARD_DAILY_OVERVIEW); break; case "hourly_overview": list.add(CardDisplay.CARD_HOURLY_OVERVIEW); break; case "air_quality": list.add(CardDisplay.CARD_AIR_QUALITY); break; case "allergen": list.add(CardDisplay.CARD_ALLERGEN); break; case "life_details": list.add(CardDisplay.CARD_LIFE_DETAILS); break; case "sunrise_sunset": list.add(CardDisplay.CARD_SUNRISE_SUNSET); break; } } return list; } catch (Exception e) { return new ArrayList<>(); } } @NonNull public static String getCardDisplayValue(@NonNull List<CardDisplay> list) { StringBuilder builder = new StringBuilder(); for (CardDisplay v : list) { builder.append("&").append(v.getCardValue()); } if (builder.length() > 0 && builder.charAt(0) == '&') { builder.deleteCharAt(0); } return builder.toString(); } @NonNull public static String getCardDisplaySummary(Context context, @NonNull List<CardDisplay> list) { StringBuilder builder = new StringBuilder(); for (CardDisplay v : list) { builder.append(",").append(v.getCardName(context)); } if (builder.length() > 0 && builder.charAt(0) == ',') { builder.deleteCharAt(0); } return builder.toString().replace(",", ", "); } @NonNull public static List<DailyTrendDisplay> getDailyTrendDisplayList(String value) { if (TextUtils.isEmpty(value)) { return new ArrayList<>(); } try { String[] cards = value.split("&"); List<DailyTrendDisplay> list = new ArrayList<>(); for (String card : cards) { switch (card) { case "temperature": list.add(DailyTrendDisplay.TAG_TEMPERATURE); break; case "air_quality": list.add(DailyTrendDisplay.TAG_AIR_QUALITY); break; case "wind": list.add(DailyTrendDisplay.TAG_WIND); break; case "uv_index": list.add(DailyTrendDisplay.TAG_UV_INDEX); break; case "precipitation": list.add(DailyTrendDisplay.TAG_PRECIPITATION); break; } } return list; } catch (Exception e) { return new ArrayList<>(); } } @NonNull public static String getDailyTrendDisplayValue(@NonNull List<DailyTrendDisplay> list) { StringBuilder builder = new StringBuilder(); for (DailyTrendDisplay v : list) { builder.append("&").append(v.getTagValue()); } if (builder.length() > 0 && builder.charAt(0) == '&') { builder.deleteCharAt(0); } return builder.toString(); } @NonNull public static String getDailyTrendDisplaySummary(Context context, @NonNull List<DailyTrendDisplay> list) { StringBuilder builder = new StringBuilder(); for (DailyTrendDisplay v : list) { builder.append(",").append(v.getTagName(context)); } if (builder.length() > 0 && builder.charAt(0) == ',') { builder.deleteCharAt(0); } return builder.toString().replace(",", ", "); } public static Language getLanguage(String value) { switch (value) { case "chinese": return Language.CHINESE; case "unsimplified_chinese": return Language.UNSIMPLIFIED_CHINESE; case "english_america": return Language.ENGLISH_US; case "english_britain": return Language.ENGLISH_UK; case "english_australia": return Language.ENGLISH_AU; case "turkish": return Language.TURKISH; case "french": return Language.FRENCH; case "russian": return Language.RUSSIAN; case "german": return Language.GERMAN; case "serbian": return Language.SERBIAN; case "spanish": return Language.SPANISH; case "italian": return Language.ITALIAN; case "dutch": return Language.DUTCH; case "hungarian": return Language.HUNGARIAN; case "portuguese": return Language.PORTUGUESE; case "portuguese_brazilian": return Language.PORTUGUESE_BR; case "slovenian": return Language.SLOVENIAN; case "arabic": return Language.ARABIC; case "czech": return Language.CZECH; case "polish": return Language.POLISH; case "korean": return Language.KOREAN; case "greek": return Language.GREEK; case "japanese": return Language.JAPANESE; default: return Language.FOLLOW_SYSTEM; } } public static WidgetWeekIconMode getWidgetWeekIconMode(String value) { switch (value) { case "day": return WidgetWeekIconMode.DAY; case "night": return WidgetWeekIconMode.NIGHT; default: return WidgetWeekIconMode.AUTO; } } public static NotificationStyle getNotificationStyle(String value) { switch (value) { case "native": return NotificationStyle.NATIVE; default: return NotificationStyle.CUSTOM; } } public static NotificationTextColor getNotificationTextColor(String value) { switch (value) { case "light": return NotificationTextColor.LIGHT; case "grey": return NotificationTextColor.GREY; default: return NotificationTextColor.DARK; } } }