package com.evancharlton.mileage.provider; import com.evancharlton.mileage.ChartActivity; import com.evancharlton.mileage.R; import com.evancharlton.mileage.charts.AverageCostChart; import com.evancharlton.mileage.charts.AverageDistanceChart; import com.evancharlton.mileage.charts.AverageFuelEconomyChart; import com.evancharlton.mileage.charts.AveragePriceChart; import com.evancharlton.mileage.charts.AverageVolumeChart; import com.evancharlton.mileage.charts.BestFuelEconomyChart; import com.evancharlton.mileage.charts.EastChart; import com.evancharlton.mileage.charts.LastMonthCostChart; import com.evancharlton.mileage.charts.LastYearCostChart; import com.evancharlton.mileage.charts.MaximumCostChart; import com.evancharlton.mileage.charts.MaximumDistanceChart; import com.evancharlton.mileage.charts.MaximumPriceChart; import com.evancharlton.mileage.charts.MaximumVolumeChart; import com.evancharlton.mileage.charts.MinimumCostChart; import com.evancharlton.mileage.charts.MinimumDistanceChart; import com.evancharlton.mileage.charts.MinimumPriceChart; import com.evancharlton.mileage.charts.MinimumVolumeChart; import com.evancharlton.mileage.charts.NorthChart; import com.evancharlton.mileage.charts.SouthChart; import com.evancharlton.mileage.charts.TotalCostChart; import com.evancharlton.mileage.charts.TotalVolumeChart; import com.evancharlton.mileage.charts.WestChart; import com.evancharlton.mileage.charts.WorstFuelEconomyChart; import com.evancharlton.mileage.dao.Vehicle; import com.evancharlton.mileage.math.Calculator; import android.content.Context; import java.util.ArrayList; // There be dragons in this code. Tread with caution. public final class Statistics { public static final ArrayList<Statistic> STATISTICS = new ArrayList<Statistic>(); public static final ArrayList<StatisticsGroup> GROUPS = new ArrayList<StatisticsGroup>(); public static class EconomyStatistic extends Statistic { public EconomyStatistic(int label) { super(label); } private EconomyStatistic(String value, Class<? extends ChartActivity> chartClass, int label) { super(value, chartClass, label); } @Override public String format(Context context, Vehicle vehicle, double value) { return mFormatter.format(value) + " " + Calculator.getEconomyUnitsAbbr(context, vehicle); } } public static final Statistic AVG_ECONOMY = new EconomyStatistic("avg_economy", AverageFuelEconomyChart.class, R.string.stat_avg_economy); public static final Statistic MIN_ECONOMY = new EconomyStatistic("min_economy", WorstFuelEconomyChart.class, R.string.stat_min_economy); public static final Statistic MAX_ECONOMY = new EconomyStatistic("max_economy", BestFuelEconomyChart.class, R.string.stat_max_economy); public static class DistanceStatistic extends Statistic { public DistanceStatistic(int label) { super(label); } private DistanceStatistic(String value, Class<? extends ChartActivity> chartClass, int label) { super(value, chartClass, label); } @Override public String format(Context context, Vehicle vehicle, double value) { return mFormatter.format(value) + " " + Calculator.getDistanceUnitsAbbr(context, vehicle); } }; public static final Statistic AVG_DISTANCE = new DistanceStatistic("avg_distance", AverageDistanceChart.class, R.string.stat_avg_distance); public static final Statistic MIN_DISTANCE = new DistanceStatistic("min_distance", MinimumDistanceChart.class, R.string.stat_min_distance); public static final Statistic MAX_DISTANCE = new DistanceStatistic("max_distance", MaximumDistanceChart.class, R.string.stat_max_distance); public static class CostStatistic extends Statistic { public CostStatistic(int label) { super(label); } private CostStatistic(String value, Class<? extends ChartActivity> chartClass, int label) { super(value, chartClass, label); } @Override public String format(Context context, Vehicle vehicle, double value) { return Calculator.getCurrencySymbol(vehicle) + mFormatter.format(value); } } public static class CostPerUnitStatistic extends CostStatistic { private final int mUnit; private CostPerUnitStatistic(String value, int label, int unit) { super(value, null, label); mUnit = unit; } @Override public String format(Context context, Vehicle vehicle, double value) { return context.getString(R.string.units_per, super.format(context, vehicle, value), context.getString(mUnit)); } } public static final Statistic AVG_COST = new CostStatistic("avg_cost", AverageCostChart.class, R.string.stat_avg_cost); public static final Statistic MIN_COST = new CostStatistic("min_cost", MinimumCostChart.class, R.string.stat_min_cost); public static final Statistic MAX_COST = new CostStatistic("max_cost", MaximumCostChart.class, R.string.stat_max_cost); public static final Statistic TOTAL_COST = new CostStatistic("total_cost", TotalCostChart.class, R.string.stat_total_cost); public static final Statistic LAST_MONTH_COST = new CostStatistic("last_month_cost", LastMonthCostChart.class, R.string.stat_last_month_cost); public static final Statistic AVG_MONTHLY_COST = new CostPerUnitStatistic("monthly_cost", R.string.stat_avg_month_cost, R.string.per_month); public static final Statistic LAST_YEAR_COST = new CostStatistic("last_year_cost", LastYearCostChart.class, R.string.stat_last_year_cost); public static final Statistic AVG_YEARLY_COST = new CostPerUnitStatistic("yearly_cost", R.string.stat_avg_year_cost, R.string.per_year); public static class CostPerDistanceStatistic extends Statistic { private CostPerDistanceStatistic(String value, int label) { super(value, null, label); } @Override public String getLabel(Context context, Vehicle vehicle) { return context.getString(mLabel, Calculator.getDistanceUnitsAbbr(context, vehicle)); } @Override public String format(Context context, Vehicle vehicle, double value) { String cost = Calculator.getCurrencySymbol(vehicle) + mFormatter.format(value); String distance = Calculator.getDistanceUnitsAbbr(context, vehicle); return context.getString(R.string.units_per, cost, distance); } } public static final Statistic AVG_COST_PER_DISTANCE = new CostPerDistanceStatistic( "avg_cost_per_mi", R.string.stat_avg_cost_per_distance); public static final Statistic MIN_COST_PER_DISTANCE = new CostPerDistanceStatistic( "min_cost_per_mi", R.string.stat_min_cost_per_distance); public static final Statistic MAX_COST_PER_DISTANCE = new CostPerDistanceStatistic( "max_cost_per_mi", R.string.stat_max_cost_per_distance); public static class PriceStatistic extends Statistic { public PriceStatistic(int label) { super(label); } private PriceStatistic(String value, Class<? extends ChartActivity> chartClass, int label) { super(value, chartClass, label); } @Override public String format(Context context, Vehicle vehicle, double value) { return Calculator.getCurrencySymbol(vehicle) + mFormatter.format(value); } } public static final Statistic AVG_PRICE = new PriceStatistic("avg_price", AveragePriceChart.class, R.string.stat_avg_price); public static final Statistic MIN_PRICE = new PriceStatistic("min_price", MinimumPriceChart.class, R.string.stat_min_price); public static final Statistic MAX_PRICE = new PriceStatistic("max_price", MaximumPriceChart.class, R.string.stat_max_price); public static class FuelStatistic extends Statistic { public FuelStatistic(int label) { super(label); } private FuelStatistic(String value, Class<? extends ChartActivity> chartClass, int label) { super(value, chartClass, label); } @Override public String format(Context context, Vehicle vehicle, double value) { return mFormatter.format(value) + " " + Calculator.getVolumeUnits(context, vehicle); } } public static final Statistic MIN_FUEL = new FuelStatistic("min_fuel", MinimumVolumeChart.class, R.string.stat_min_fuel); public static final Statistic MAX_FUEL = new FuelStatistic("max_fuel", MaximumVolumeChart.class, R.string.stat_max_fuel); public static final Statistic AVG_FUEL = new FuelStatistic("avg_fuel", AverageVolumeChart.class, R.string.stat_avg_fuel); public static final Statistic TOTAL_FUEL = new FuelStatistic("total_fuel", TotalVolumeChart.class, R.string.stat_total_fuel); public static final Statistic FUEL_PER_YEAR = new FuelStatistic("fuel_per_year", null, R.string.stat_fuel_per_year) { @Override public String format(Context context, Vehicle vehicle, double value) { String amount = super.format(context, vehicle, value); return context.getString(R.string.units_per, amount, context.getString(R.string.per_year)); } }; public static class LocationStatistic extends Statistic { private LocationStatistic(String value, Class<? extends ChartActivity> chartClass, int label) { super(value, chartClass, label); } @Override public String format(Context context, Vehicle vehicle, double value) { return mFormatter.format(value); } } public static final Statistic NORTH = new LocationStatistic("north", NorthChart.class, R.string.stat_north); public static final Statistic SOUTH = new LocationStatistic("south", SouthChart.class, R.string.stat_south); public static final Statistic EAST = new LocationStatistic("east", EastChart.class, R.string.stat_east); public static final Statistic WEST = new LocationStatistic("west", WestChart.class, R.string.stat_west); }