package com.evancharlton.mileage.views; import java.util.ArrayList; import java.util.Calendar; import android.os.Bundle; import com.evancharlton.mileage.calculators.CalculationEngine; import com.evancharlton.mileage.models.FillUp; public class FuelEconomyChart extends ChartDisplay { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle("Fuel Economy"); } @Override protected void buildChart() { m_chart.freeze(); CalculationEngine calc = m_prefs.getCalculator(); m_chart.setYAxisLabel(calc.getEconomyUnits()); ArrayList<Float> data = new ArrayList<Float>(); final int size = m_fillups.size(); FillUp f; double total_fuel = 0F; double total_distance = m_fillups.get(m_fillups.size() - 1).getOdometer() - m_fillups.get(0).getOdometer(); float economy; float min = Float.MAX_VALUE; float max = Float.MIN_VALUE; if (calc.isInverted()) { max = Float.MAX_VALUE; min = 0F; } String min_label = ""; String max_label = ""; for (int i = 1; i < size; i++) { f = m_fillups.get(i); economy = (float) f.calcEconomy(); total_fuel += (float) f.getAmount(); if (economy == -1F) { continue; } data.add((float) i); data.add(economy); if (calc.worse(economy, min)) { min = economy; Calendar d = f.getDate(); min_label = m_prefs.format(d.getTime()); } if (calc.better(economy, max)) { max = economy; Calendar d = f.getDate(); max_label = m_prefs.format(d.getTime()); } } m_chart.setXAxisLabels(min_label, max_label); m_chart.setYAxisLabels(m_format.format(min) + calc.getEconomyUnits(), m_format.format(max) + calc.getEconomyUnits()); float avg = (float) calc.calculateEconomy(total_distance, total_fuel); m_chart.setAverageLabel(m_format.format(avg) + calc.getEconomyUnits()); m_chart.setDataPoints(data.toArray(new Float[data.size()])); m_chart.thaw(); } }