package co.mwater.clientapp.ui.petrifilm; import java.io.IOException; import java.util.UUID; import android.app.AlertDialog; import android.content.ContentValues; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import co.mwater.clientapp.R; import co.mwater.clientapp.db.ImageStorage; import co.mwater.clientapp.db.TestsTable; import co.mwater.clientapp.db.testresults.PetrifilmResults; import co.mwater.clientapp.db.testresults.Risk; import co.mwater.clientapp.petrifilmanalysis.PetriFilmProcessingIntentService; import co.mwater.clientapp.ui.TestActivities; import co.mwater.clientapp.ui.TestDetailActivity; import com.actionbarsherlock.view.Window; public class PetrifilmTestDetailActivity extends TestDetailActivity implements OnClickListener { private static final String TAG = PetrifilmTestDetailActivity.class.getSimpleName(); static int PETRI_IMAGE_REQUEST = 1; boolean autoAnalysing = false; // TODO this could be done better @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setSupportProgressBarIndeterminateVisibility(false); setContentView(R.layout.petrifilm_detail_activity); finishCreatingViews(); } public void onRecordResultsClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Record Results"); builder.setItems(R.array.petrifilm_record_popup, this).show(); } public void onPhotoClick(View v) { displayImage(TestsTable.COLUMN_PHOTO); } @Override protected void displayData() { super.displayData(); // Get results PetrifilmResults results = new PetrifilmResults(rowValues.getAsString(TestsTable.COLUMN_RESULTS)); setControlInteger(R.id.ecoli_count, results.manualEcoli != null ? results.manualEcoli : results.autoEcoli); setControlInteger(R.id.tc_count, results.manualTC != null ? results.manualTC : results.autoTC); setControlInteger(R.id.other_count, results.manualOther != null ? results.manualOther : results.autoOther); autoAnalysing &= results.autoEcoli == null; Risk risk = results.getRisk(rowValues.getAsInteger(TestsTable.COLUMN_DILUTION)); int riskColor = TestActivities.getRiskColor(risk); ((TextView) this.findViewById(R.id.ecoli_count)).setBackgroundColor(this.getResources().getColor(riskColor)); setSupportProgressBarIndeterminateVisibility(autoAnalysing); // Display photo displayImageButton(R.id.photo, TestsTable.COLUMN_PHOTO, R.drawable.bact); // Enable/disable ((Button)findViewById(R.id.record_results)).setEnabled(isCreatedByMe()); } public void onClick(DialogInterface dialog, int which) { if (which == 0) { // Automatic count try { String photoUid = UUID.randomUUID().toString().replace("-", ""); String photoPath = ImageStorage.getTempImagePath(this, photoUid); Intent intent = new Intent(this, PetrifilmCameraActivity.class); intent.putExtra("filepath", photoPath); intent.putExtra("uid", photoUid); startActivityForResult(intent, PETRI_IMAGE_REQUEST); } catch (IOException e) { Toast.makeText(this, e.getLocalizedMessage(), Toast.LENGTH_LONG).show(); return; } } else if (which == 1) { // Record that result was read recordResultRead(); Intent intent = new Intent(this, PetrifilmManualCountActivity.class); intent.putExtra("uri", uri); startActivity(intent); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == PETRI_IMAGE_REQUEST && resultCode == RESULT_OK) { String photoUid = data.getStringExtra("uid"); // Move image to pending try { ImageStorage.moveTempImageFileToPending(this, photoUid); // Set photo ContentValues update = new ContentValues(); update.put(TestsTable.COLUMN_PHOTO, photoUid); getContentResolver().update(uri, update, null, null); // Record that result was read recordResultRead(); autoAnalysing = true; setSupportProgressBarIndeterminateVisibility(true); // Send image to be processed Intent intent = new Intent(this, PetriFilmProcessingIntentService.class); intent.putExtra("inImagePath", ImageStorage.getPendingImagePath(this, photoUid)); intent.putExtra("testUri", uri); Log.d(TAG, "Calling process image"); startService(intent); } catch (IOException e) { Toast.makeText(this, e.getLocalizedMessage(), Toast.LENGTH_LONG).show(); } } } }