package com.kickstarter.libs; import android.os.Parcelable; import android.support.annotation.NonNull; import com.kickstarter.libs.qualifiers.AutoGson; import java.util.Collections; import java.util.List; import java.util.Map; import auto.parcel.AutoParcel; @AutoGson @AutoParcel public abstract class Config implements Parcelable { public abstract String countryCode(); public abstract Map<String, Boolean> features(); public abstract List<LaunchedCountry> launchedCountries(); @AutoParcel.Builder public abstract static class Builder { public abstract Builder countryCode(String __); public abstract Builder features(Map<String, Boolean> __); public abstract Builder launchedCountries(List<LaunchedCountry> __); public abstract Config build(); } @AutoGson @AutoParcel public abstract static class LaunchedCountry implements Parcelable { public abstract String name(); public abstract String currencyCode(); public abstract String currencySymbol(); public abstract Boolean trailingCode(); @AutoParcel.Builder public abstract static class Builder { public abstract Builder name(String __); public abstract Builder currencyCode(String __); public abstract Builder currencySymbol(String __); public abstract Builder trailingCode(Boolean __); public abstract LaunchedCountry build(); } public static Builder builder() { return new AutoParcel_Config_LaunchedCountry.Builder(); } public abstract Builder toBuilder(); } public static Builder builder() { return new AutoParcel_Config.Builder() .features(Collections.emptyMap()); } public abstract Builder toBuilder(); /** * A currency needs a code if its symbol is ambiguous, e.g. `$` is used for currencies such as USD, CAD, AUD. */ public boolean currencyNeedsCode(final @NonNull String currencySymbol) { for (final LaunchedCountry country : launchedCountries()) { if (country.currencySymbol().equals(currencySymbol)) { return country.trailingCode(); } } // Unlaunched country, default to showing the code. return true; } }