package com.evancharlton.mileage.io;
import com.evancharlton.mileage.ImportActivity;
import com.evancharlton.mileage.R;
import com.evancharlton.mileage.dao.Fillup;
import com.evancharlton.mileage.dao.Vehicle;
import com.evancharlton.mileage.io.importers.CsvWizardActivity;
import com.evancharlton.mileage.provider.tables.VehiclesTable;
import com.evancharlton.mileage.tasks.CsvVehicleReaderTask;
import android.content.Intent;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
public class CsvVehicleMappingActivity extends CsvWizardActivity {
private final ArrayList<HashMap<String, String>> mVehicles = new ArrayList<HashMap<String, String>>();
private final ArrayList<SimpleAdapter> mAdapters = new ArrayList<SimpleAdapter>();
private final HashMap<Long, Spinner> mVehicleMapping = new HashMap<Long, Spinner>();
private int mRowCount = 100;
private CsvVehicleReaderTask mVehicleReaderTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = LayoutInflater.from(this);
String[] from = new String[] {
Vehicle.TITLE
};
int[] to = new int[] {
android.R.id.text1
};
Cursor vehicleCursor = getContentResolver().query(VehiclesTable.BASE_URI,
VehiclesTable.PROJECTION, null, null, null);
while (vehicleCursor.moveToNext()) {
View row = inflater.inflate(R.layout.import_csv_mapping, mContainer);
TextView label = (TextView) row.findViewById(R.id.title);
String title = vehicleCursor.getString(vehicleCursor.getColumnIndex(Vehicle.TITLE));
label.setText(title);
label.setId(title.hashCode());
SimpleAdapter vehicles = new SimpleAdapter(this, mVehicles,
android.R.layout.simple_spinner_item, from, to);
vehicles.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner spinner = (Spinner) row.findViewById(R.id.mappings);
spinner.setAdapter(vehicles);
spinner.setId(title.hashCode());
mAdapters.add(vehicles);
mVehicleMapping.put(vehicleCursor.getLong(vehicleCursor.getColumnIndex(Vehicle._ID)),
spinner);
}
vehicleCursor.close();
restoreTask();
setHeaderText(R.string.import_csv_vehicle_text);
}
@Override
public Object onRetainNonConfigurationInstance() {
return mVehicleReaderTask;
}
private void restoreTask() {
mVehicleReaderTask = (CsvVehicleReaderTask) getLastNonConfigurationInstance();
if (mVehicleReaderTask == null) {
mVehicleReaderTask = new CsvVehicleReaderTask(getIntent().getIntExtra(
Fillup.VEHICLE_ID, 0));
}
mVehicleReaderTask.attach(this);
if (mVehicleReaderTask.getStatus() == AsyncTask.Status.PENDING) {
mVehicleReaderTask.execute(getIntent().getStringExtra(ImportActivity.FILENAME));
}
}
@Override
protected boolean buildIntent(Intent intent) {
intent.setClass(this, CsvDateFormatActivity.class);
for (Long vehicleId : mVehicleMapping.keySet()) {
Spinner spinner = mVehicleMapping.get(vehicleId);
HashMap<String, String> mapping = mVehicles.get(spinner.getSelectedItemPosition());
String title = mapping.get(Vehicle.TITLE);
intent.putExtra("vehicle_" + title, vehicleId);
}
intent.putExtra(CsvImportActivity.TOTAL_ROWS, mRowCount);
setResult(PREVIOUS);
return true;
}
public void dataRead(String vehicle) {
HashMap<String, String> map = new HashMap<String, String>();
map.put(Vehicle.TITLE, vehicle);
mVehicles.add(map);
for (SimpleAdapter adapter : mAdapters) {
adapter.notifyDataSetChanged();
}
}
public void setRowCount(int rowCount) {
mRowCount = rowCount;
}
}