package com.evancharlton.mileage.views;
import java.util.List;
import org.achartengine.ChartFactory;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import com.evancharlton.mileage.HelpDialog;
import com.evancharlton.mileage.Mileage;
import com.evancharlton.mileage.PreferencesProvider;
import com.evancharlton.mileage.R;
import com.evancharlton.mileage.TabChildActivity;
import com.evancharlton.mileage.binders.VehicleBinder;
import com.evancharlton.mileage.models.FillUp;
import com.evancharlton.mileage.models.Vehicle;
public class ChartsView extends TabChildActivity {
private Button m_fuelPriceBtn;
private Button m_fuelAmountBtn;
private Button m_distanceBtn;
private Button m_fuelEconomyBtn;
private Button m_costBtn;
private Button m_odometerBtn;
private Spinner m_vehicles;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.charts);
}
public void onResume() {
super.onResume();
initUI();
}
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
Mileage.createMenu(menu);
HelpDialog.injectHelp(menu, 'h');
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
boolean ret = Mileage.parseMenuItem(item, this);
if (ret) {
return true;
}
switch (item.getItemId()) {
case HelpDialog.MENU_HELP:
HelpDialog.create(this, R.string.help_title_charts, R.string.help_charts);
break;
}
return super.onOptionsItemSelected(item);
}
private int calculateSkip(int size, int max) {
if (size > max) {
return (int) (Math.ceil((double) size) / ((double) max));
}
return 1;
}
private void initUI() {
m_vehicles = (Spinner) findViewById(R.id.stats_vehicle_spinner);
m_fuelPriceBtn = (Button) findViewById(R.id.fuel_price_btn);
m_fuelAmountBtn = (Button) findViewById(R.id.fuel_amount_btn);
m_distanceBtn = (Button) findViewById(R.id.delta_distance_btn);
m_fuelEconomyBtn = (Button) findViewById(R.id.fuel_economy_btn);
m_costBtn = (Button) findViewById(R.id.fillup_cost_btn);
m_odometerBtn = (Button) findViewById(R.id.vehicle_odometer_btn);
m_fuelPriceBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
XYSeries series = new XYSeries(getString(R.string.charts_fuel_price));
Vehicle v = new Vehicle(m_vehicles.getSelectedItemId());
List<FillUp> fillups = v.getAllFillUps(PreferencesProvider.getInstance(ChartsView.this).getCalculator());
int size = fillups.size();
int skip = calculateSkip(size, 50);
for (int i = 0; i < size; i += skip) {
FillUp fillup = fillups.get(i);
series.add(fillup.getDate().getTimeInMillis(), fillup.getPrice());
}
showChart(series);
}
});
m_fuelAmountBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
XYSeries series = new XYSeries(getString(R.string.charts_fuel_amount));
Vehicle v = new Vehicle(m_vehicles.getSelectedItemId());
List<FillUp> fillups = v.getAllFillUps(PreferencesProvider.getInstance(ChartsView.this).getCalculator());
int size = fillups.size();
int skip = calculateSkip(size, 50);
for (int i = 0; i < size; i += skip) {
FillUp fillup = fillups.get(i);
series.add(fillup.getDate().getTimeInMillis(), fillup.getAmount());
}
showChart(series);
}
});
m_costBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
XYSeries series = new XYSeries(getString(R.string.charts_fillup_cost));
Vehicle v = new Vehicle(m_vehicles.getSelectedItemId());
List<FillUp> fillups = v.getAllFillUps(PreferencesProvider.getInstance(ChartsView.this).getCalculator());
int size = fillups.size();
int skip = calculateSkip(size, 50);
for (int i = 0; i < size; i += skip) {
FillUp fillup = fillups.get(i);
series.add(fillup.getDate().getTimeInMillis(), fillup.calcCost());
}
showChart(series);
}
});
m_distanceBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
XYSeries series = new XYSeries(getString(R.string.charts_delta_distance));
Vehicle v = new Vehicle(m_vehicles.getSelectedItemId());
List<FillUp> fillups = v.getAllFillUps(PreferencesProvider.getInstance(ChartsView.this).getCalculator());
int size = fillups.size();
int skip = calculateSkip(size, 50);
for (int i = 1; i < size; i += skip) {
FillUp fillup = fillups.get(i);
series.add(fillup.getDate().getTimeInMillis(), fillup.calcDistance());
}
showChart(series);
}
});
m_odometerBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
XYSeries series = new XYSeries(getString(R.string.charts_odometer));
Vehicle v = new Vehicle(m_vehicles.getSelectedItemId());
List<FillUp> fillups = v.getAllFillUps(PreferencesProvider.getInstance(ChartsView.this).getCalculator());
int size = fillups.size();
int skip = calculateSkip(size, 50);
for (int i = 1; i < size; i += skip) {
FillUp fillup = fillups.get(i);
series.add(fillup.getDate().getTimeInMillis(), fillup.getOdometer());
}
showChart(series);
}
});
m_fuelEconomyBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
XYSeries series = new XYSeries(getString(R.string.charts_fuel_economy));
Vehicle v = new Vehicle(m_vehicles.getSelectedItemId());
List<FillUp> fillups = v.getAllFillUps(PreferencesProvider.getInstance(ChartsView.this).getCalculator());
int size = fillups.size();
int skip = calculateSkip(size, 50);
for (int i = 1; i < size; i += skip) {
FillUp fillup = fillups.get(i);
series.add(fillup.getDate().getTimeInMillis(), fillup.calcEconomy());
}
showChart(series);
}
});
m_vehicles.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapter, View view, int position, long id) {
updateVehicleSelection(position);
}
public void onNothingSelected(AdapterView<?> arg0) {
}
});
populateSpinner();
}
private void populateSpinner() {
Cursor c = managedQuery(Vehicle.CONTENT_URI, Vehicle.getProjection(), null, null, Vehicle.DEFAULT_SORT_ORDER);
SimpleCursorAdapter vehicleAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, c, new String[] {
Vehicle.TITLE
}, new int[] {
android.R.id.text1
});
vehicleAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
vehicleAdapter.setViewBinder(new VehicleBinder());
m_vehicles.setAdapter(vehicleAdapter);
setVehicleSelection(m_vehicles);
if (vehicleAdapter.getCount() == 1) {
m_vehicles.setVisibility(View.GONE);
}
}
private void showChart(XYSeries series) {
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
dataset.addSeries(series);
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
XYSeriesRenderer seriesRenderer = new XYSeriesRenderer();
seriesRenderer.setColor(0xFFFF9C24);
renderer.addSeriesRenderer(seriesRenderer);
renderer.setShowLegend(false);
renderer.setAxesColor(0x66666666);
PreferencesProvider prefs = PreferencesProvider.getInstance(this);
String format = prefs.getString(PreferencesProvider.DATE, "MM/dd/yy");
startActivity(ChartFactory.getTimeChartIntent(ChartsView.this, dataset, renderer, format));
}
}