package co.mwater.clientapp.ui; import java.text.DateFormat; import java.util.Date; import android.app.AlertDialog; import android.content.ContentValues; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.widget.Button; import co.mwater.clientapp.R; import co.mwater.clientapp.db.MWaterContentProvider; import co.mwater.clientapp.db.SamplesTable; import co.mwater.clientapp.db.SourcesTable; import co.mwater.clientapp.db.TestsTable; import co.mwater.clientapp.db.testresults.PetrifilmResults; import co.mwater.clientapp.db.testresults.Results; import co.mwater.clientapp.db.testresults.TestType; import co.mwater.clientapp.ui.PreferenceWidget.OnChangeListener; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; import com.actionbarsherlock.view.MenuItem.OnMenuItemClickListener; public abstract class TestDetailActivity extends DetailActivity { /** * Must be called at end of onCreate in subclasses. */ protected void finishCreatingViews() { ((PreferenceWidget) findViewById(R.id.notes)).setOnChangeListener(new OnChangeListener() { public void onChange(Object value) { TestDetailActivity.this.updateRow(TestsTable.COLUMN_NOTES, value.toString()); } }); } protected void recordResultRead() { if (rowValues.getAsString(TestsTable.COLUMN_RESULTS) == null) { TestType testType = TestType.fromInt(rowValues.getAsInteger(TestsTable.COLUMN_TEST_TYPE)); // Record initial results ContentValues update = new ContentValues(); update.put(TestsTable.COLUMN_RESULTS, Results.getResults(testType, null).toJson()); update.put(TestsTable.COLUMN_READ_ON, System.currentTimeMillis() / 1000); getContentResolver().update(uri, update, null, null); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.test_detail_menu, menu); menu.findItem(R.id.menu_delete).setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { deleteTest(); return true; } }); menu.findItem(R.id.menu_delete).setEnabled(isCreatedByMe()); return super.onCreateOptionsMenu(menu); } public abstract void onRecordResultsClick(View v); @Override protected void displayData() { getSupportActionBar().setTitle("Test " + rowValues.getAsString(TestsTable.COLUMN_CODE)); // Get results String results = rowValues.getAsString(TestsTable.COLUMN_RESULTS); ((Button) findViewById(R.id.record_results)).setText(results != null ? "Edit Results" : "Record Results"); Long started_on = rowValues.getAsLong(TestsTable.COLUMN_STARTED_ON); if (started_on != null) { setControlText(R.id.started_on, "Started: " + DateFormat.getDateTimeInstance().format(new Date(started_on * 1000))); } Long read_on = rowValues.getAsLong(TestsTable.COLUMN_READ_ON); if (read_on != null) { setControlText(R.id.read_on, "Read: " + DateFormat.getDateTimeInstance().format(new Date(read_on * 1000))); } setPreferenceWidget(R.id.notes, "Notes", rowValues.getAsString(TestsTable.COLUMN_NOTES), isCreatedByMe()); // Get sample String sampleUid = rowValues.getAsString(TestsTable.COLUMN_SAMPLE); ContentValues sample = null; ContentValues source = null; if (sampleUid != null) { sample = MWaterContentProvider.getSingleRow(this, MWaterContentProvider.SAMPLES_URI, sampleUid); String sourceUid = sample.getAsString(SamplesTable.COLUMN_SOURCE); if (sourceUid != null) source = MWaterContentProvider.getSingleRow(this, MWaterContentProvider.SOURCES_URI, sourceUid); } // TODO other options if (source != null && sample != null) { setPreferenceWidget(R.id.source, "Source", String.format("%s sample %s", source.getAsString(SourcesTable.COLUMN_NAME), sample.getAsString(SamplesTable.COLUMN_CODE)), false); } else { setPreferenceWidget(R.id.source, "Source", "", false); } } void deleteTest() { DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { getContentResolver().delete(uri, null, null); finish(); } }; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Permanently delete test?").setPositiveButton("Yes", dialogClickListener).setNegativeButton("No", null).show(); } }