package com.evancharlton.mileage.io;
import com.evancharlton.mileage.ImportActivity;
import com.evancharlton.mileage.R;
import com.evancharlton.mileage.adapters.DateFormatAdapter;
import com.evancharlton.mileage.dao.Fillup;
import com.evancharlton.mileage.io.importers.CsvWizardActivity;
import com.evancharlton.mileage.tasks.CsvDateReaderTask;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.TextView;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CsvDateFormatActivity extends CsvWizardActivity {
public static final String DATE_FORMAT = "date_format";
private CsvDateReaderTask mDateReaderTask;
private TextView mRawDateView;
private Spinner mFormats;
private TextView mParsedDateView;
private DateFormat mDateFormatter;
private DateFormat mTimeFormatter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater.from(this).inflate(R.layout.import_csv_date, mContainer);
mRawDateView = (TextView) findViewById(R.id.raw_date);
mFormats = (Spinner) findViewById(R.id.date_formats);
mParsedDateView = (TextView) findViewById(R.id.parsed_date);
mDateFormatter = android.text.format.DateFormat.getDateFormat(this);
mTimeFormatter = android.text.format.DateFormat.getTimeFormat(this);
mFormats.setAdapter(new DateFormatAdapter(this));
mFormats.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
formatDate();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
restoreTask();
setHeaderText(R.string.import_csv_date_format);
}
@Override
public Object onRetainNonConfigurationInstance() {
return mDateReaderTask;
}
private void restoreTask() {
mDateReaderTask = (CsvDateReaderTask) getLastNonConfigurationInstance();
if (mDateReaderTask == null) {
mDateReaderTask = new CsvDateReaderTask(getIntent().getIntExtra(Fillup.DATE, 0));
}
mDateReaderTask.attach(this);
if (mDateReaderTask.getStatus() == AsyncTask.Status.PENDING) {
mDateReaderTask.execute(getIntent().getStringExtra(ImportActivity.FILENAME));
}
}
public void setRawDate(String date) {
mRawDateView.setText(date);
formatDate();
}
private String getFormatPattern() {
return (String) mFormats.getAdapter().getItem(mFormats.getSelectedItemPosition());
}
private void formatDate() {
String format = getFormatPattern();
SimpleDateFormat df = new SimpleDateFormat(format);
String parsed;
try {
Date d = df.parse(mRawDateView.getText().toString());
parsed = mDateFormatter.format(d) + " " + mTimeFormatter.format(d);
} catch (ParseException e) {
parsed = getString(R.string.error_could_not_parse_date);
}
mParsedDateView.setText(parsed);
}
@Override
protected boolean buildIntent(Intent intent) {
intent.setClass(this, CsvImportActivity.class);
intent.putExtra(DATE_FORMAT, getFormatPattern());
setResult(PREVIOUS);
return true;
}
}