package com.evancharlton.mileage.io.input;
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import com.evancharlton.mileage.HelpDialog;
import com.evancharlton.mileage.R;
public abstract class ImportView extends Activity {
protected final static String MESSAGE = "msg";
protected final static String TITLE = "title";
protected final static String SUCCESS = "success";
protected final static int DIALOG_FINISHED = 1;
protected final static int DIALOG_IMPORTING = 2;
protected TextView m_title;
protected String m_ext = "";
protected Spinner m_fileSelector;
protected Button m_startBtn;
protected static int s_title;
protected static String s_message;
protected static boolean s_success = false;
public void onCreate(Bundle savedInstanceState, String ext) {
super.onCreate(savedInstanceState);
setContentView(R.layout.import_layout);
m_ext = ext;
}
public void onResume() {
super.onResume();
initUI();
}
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
HelpDialog.injectHelp(menu, 'h');
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case HelpDialog.MENU_HELP:
createHelp();
return true;
}
return super.onOptionsItemSelected(item);
}
protected void createHelp() {
HelpDialog.create(this, getHelpTitle(), getHelp());
}
protected abstract String getHelpTitle();
protected abstract String getHelp();
protected void initUI() {
m_title = (TextView) findViewById(R.id.title);
m_fileSelector = (Spinner) findViewById(R.id.filename);
m_startBtn = (Button) findViewById(R.id.start);
m_startBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
input();
}
});
populateFileSelector();
}
protected void populateFileSelector() {
File directory = Environment.getExternalStorageDirectory();
String[] files = directory.list(m_filter);
Arrays.sort(files);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
for (String file : files) {
adapter.add(file);
}
m_fileSelector.setAdapter(adapter);
}
public String getInput() {
return Environment.getExternalStorageDirectory() + "/" + (String) m_fileSelector.getSelectedItem();
}
protected void postProcessing() {
}
protected void input() {
s_success = false;
new Thread(m_importer).start();
showDialog(DIALOG_IMPORTING);
}
@Override
protected Dialog onCreateDialog(int which) {
switch (which) {
case DIALOG_FINISHED:
return new AlertDialog.Builder(ImportView.this).setTitle(s_title).setMessage(s_message).setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dismissDialog(DIALOG_FINISHED);
if (s_success) {
postProcessing();
}
}
}).create();
case DIALOG_IMPORTING:
ProgressDialog dlg = new ProgressDialog(this);
dlg.setTitle(R.string.importing_title);
dlg.setMessage(getString(R.string.importing));
return dlg;
}
return null;
}
protected Runnable m_importer = null;
protected FilenameFilter m_filter = new FilenameFilter() {
public boolean accept(File dir, String filename) {
// get the extension
int dot_loc = filename.lastIndexOf(".");
if (dot_loc >= 0) {
String ext = filename.substring(dot_loc + 1);
return ext.equalsIgnoreCase(m_ext);
}
return false;
}
};
protected Handler m_handler = new Handler() {
public void handleMessage(Message msg) {
dismissDialog(DIALOG_IMPORTING);
final Bundle data = msg.getData();
final boolean success = data.getBoolean(SUCCESS, false);
s_title = success ? R.string.success : R.string.error;
s_success = success;
s_message = data.getString(MESSAGE);
showDialog(DIALOG_FINISHED);
}
};
}