package com.evancharlton.mileage.io; import com.evancharlton.mileage.ImportActivity; import com.evancharlton.mileage.R; import com.evancharlton.mileage.adapters.CsvFieldAdapter; import com.evancharlton.mileage.io.importers.CsvWizardActivity; import com.evancharlton.mileage.tasks.CsvColumnReaderTask; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.Spinner; import android.widget.TextView; import java.util.ArrayList; public class CsvColumnMappingActivity extends CsvWizardActivity { private CsvColumnReaderTask mColumnReaderTask; private final ArrayList<Spinner> mColumnSpinners = new ArrayList<Spinner>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); restoreTask(); setHeaderText(R.string.import_csv_mapping_text); } @Override public Object onRetainNonConfigurationInstance() { return mColumnReaderTask; } private void restoreTask() { mColumnReaderTask = (CsvColumnReaderTask) getLastNonConfigurationInstance(); if (mColumnReaderTask == null) { mColumnReaderTask = new CsvColumnReaderTask(); } mColumnReaderTask.attach(this); if (mColumnReaderTask.getStatus() == AsyncTask.Status.PENDING) { mColumnReaderTask.execute(getIntent().getStringExtra(ImportActivity.FILENAME)); } } public void setColumns(String[] columnNames) { mColumnSpinners.clear(); LayoutInflater inflater = LayoutInflater.from(this); final int length = columnNames.length; for (int i = 0; i < length; i++) { String columnName = columnNames[i]; Log.d("CsvImportActivity", "Adding a UI mapping for " + columnName); View v = inflater.inflate(R.layout.import_csv_mapping, mContainer); TextView title = (TextView) v.findViewById(R.id.title); title.setText(columnName); title.setId(columnName.hashCode()); Spinner spinner = (Spinner) v.findViewById(R.id.mappings); spinner.setAdapter(new CsvFieldAdapter(this)); spinner.setId(columnName.hashCode()); spinner.setSelection(i); spinner.setTag(i); mColumnSpinners.add(spinner); } } @Override protected boolean buildIntent(Intent intent) { intent.setClass(this, CsvVehicleMappingActivity.class); for (Spinner columnSpinner : mColumnSpinners) { String dbField = columnSpinner.getSelectedItem().toString(); int csvIndex = ((Integer) columnSpinner.getTag()).intValue(); intent.putExtra(dbField, csvIndex); } setResult(PREVIOUS); return true; } }