From 520b3368f63b9faf711efbdbcf9c3f8d546425ee Mon Sep 17 00:00:00 2001 From: Seamus Brown Date: Tue, 8 Jun 2021 18:18:37 -0700 Subject: [PATCH 1/3] first pass csvopenwriter implemented method created --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 2 ++ .../trueproof/TrueProofApplication.java | 1 - .../trueproof/trueproof/utils/BatchToCsv.java | 35 +++++++++++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/trueproof/trueproof/utils/BatchToCsv.java diff --git a/app/build.gradle b/app/build.gradle index 6c10b6c..17685f0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -44,6 +44,7 @@ dependencies { testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + implementation 'com.opencsv:opencsv:5.4' // Utility methods implementation 'com.google.code.gson:gson:2.8.6' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6c0fb84..f0eaf0f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + batchMeasurements = batch.getMeasurements(); + csvWriter.writeNext(new String[] {"Type", "Number", "Identifier", "Created At", "Updated At"}); + csvWriter.writeNext(new String [] {batch.getType(), String.valueOf(batch.getBatchNumber()), batch.getBatchIdentifier()}); + csvWriter.writeNext(new String [] {""}); + csvWriter.writeNext(new String [] {"True Proof", "Temperature", "Temp. Correction", "Hydrometer", "Hydro Correction"}); + for (Measurement m : batchMeasurements + ) { + csvWriter.writeNext(new String [] {String.valueOf(m.getTrueProof()), String.valueOf(m.getTemperature()), + String.valueOf(m.getTemperatureCorrection()), String.valueOf(m.getHydrometer()), String.valueOf(m.getHydrometerCorrection())}); + } + csvWriter.close(); + } +} From e6fd102c44960d5e0c866dbcec8ee85c98c15e93 Mon Sep 17 00:00:00 2001 From: Seamus Brown Date: Wed, 9 Jun 2021 14:16:48 -0700 Subject: [PATCH 2/3] send csv as email --- .../activities/BatchDetailActivity.java | 42 +++++++++++++++++++ .../trueproof/trueproof/utils/BatchToCsv.java | 24 +++++++++-- 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/trueproof/trueproof/activities/BatchDetailActivity.java b/app/src/main/java/com/trueproof/trueproof/activities/BatchDetailActivity.java index 2ca952b..f2bd8f8 100644 --- a/app/src/main/java/com/trueproof/trueproof/activities/BatchDetailActivity.java +++ b/app/src/main/java/com/trueproof/trueproof/activities/BatchDetailActivity.java @@ -1,8 +1,10 @@ package com.trueproof.trueproof.activities; import android.content.Intent; +import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.os.Environment; import android.util.Log; import android.view.Menu; import android.view.MenuItem; @@ -33,6 +35,10 @@ import com.trueproof.trueproof.utils.UserSettings; import com.trueproof.trueproof.viewmodels.BatchDetailViewModel; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -85,6 +91,7 @@ protected void onCreate(Bundle savedInstanceState) { observeLiveData(); setUpMeasurementList(); setUpSpinner(); + } @Override @@ -175,6 +182,7 @@ private void onClickUpdateButton() { .status(status) .build(); viewModel.updateBatch(newBatch); + } private void populateTextFields(Batch batch) { @@ -190,6 +198,40 @@ private void populateTextFields(Batch batch) { } } } + public void sendAsEmail (Batch batch){ + String batchHeader = "\"Type\",\"Number\", \"Identifier\", \"Created At\", \"Updated At\""; + String batchInfo = "\"" + batch.getType() + "\",\"" + batch.getBatchNumber() +"\",\"" + + batch.getBatchIdentifier()+ "\""; +// +"\",\"" + batch.getCreatedAt().toString()+"\",\"" + batch.getUpdatedAt().toString() + String combinedString = batchHeader + "\n" + batchInfo; + File file = null; + File root = Environment.getExternalStorageDirectory(); + if (root.canWrite()){ + File directory = new File (root.getAbsolutePath() + "/BatchData"); + directory.mkdirs(); + file = new File (directory, "Data.csv"); + FileOutputStream out = null; + try{ + out = new FileOutputStream(file); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + try{ + out.write(combinedString.getBytes()); + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + Uri uri; + uri = Uri.fromFile(file); + Intent send = new Intent(Intent.ACTION_SEND); + send.putExtra(Intent.EXTRA_SUBJECT, batch.getBatchIdentifier()); + send.putExtra(Intent.EXTRA_STREAM, uri); + send.setType("text/html"); + startActivity(send); + } @Override public boolean onCreateOptionsMenu(Menu menu) { diff --git a/app/src/main/java/com/trueproof/trueproof/utils/BatchToCsv.java b/app/src/main/java/com/trueproof/trueproof/utils/BatchToCsv.java index 26e957e..ae2c24f 100644 --- a/app/src/main/java/com/trueproof/trueproof/utils/BatchToCsv.java +++ b/app/src/main/java/com/trueproof/trueproof/utils/BatchToCsv.java @@ -1,10 +1,16 @@ package com.trueproof.trueproof.utils; +import android.content.Intent; +import android.net.Uri; +import android.os.Environment; + import com.amplifyframework.datastore.generated.model.Batch; import com.amplifyframework.datastore.generated.model.Measurement; import com.opencsv.CSVWriter; import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; @@ -13,23 +19,33 @@ public class BatchToCsv { String baseDir = android.os.Environment.getExternalStorageDirectory().getAbsolutePath(); - CSVWriter csvWriter = new CSVWriter(new FileWriter(baseDir)); + CSVWriter csvWriter; public BatchToCsv() throws IOException { } public void convertToCsv (Batch batch) throws IOException { + String path = baseDir + File.separator + "BatchData.csv"; + File f = new File(path); + if (f.exists()&& f.isDirectory()){ + csvWriter= new CSVWriter(new FileWriter(path, true)); + } else{ + csvWriter= new CSVWriter(new FileWriter(path)); + } + // still need to use intent to save file or email List batchMeasurements = batch.getMeasurements(); csvWriter.writeNext(new String[] {"Type", "Number", "Identifier", "Created At", "Updated At"}); - csvWriter.writeNext(new String [] {batch.getType(), String.valueOf(batch.getBatchNumber()), batch.getBatchIdentifier()}); + csvWriter.writeNext(new String [] {batch.getType(), String.valueOf(batch.getBatchNumber()), batch.getBatchIdentifier(), batch.getCreatedAt().toString(), batch.getUpdatedAt().toString()}); csvWriter.writeNext(new String [] {""}); - csvWriter.writeNext(new String [] {"True Proof", "Temperature", "Temp. Correction", "Hydrometer", "Hydro Correction"}); + csvWriter.writeNext(new String [] {"True Proof", "Temperature", "Temp. Correction", "Hydrometer", "Hydro Correction", "Created At"}); for (Measurement m : batchMeasurements ) { csvWriter.writeNext(new String [] {String.valueOf(m.getTrueProof()), String.valueOf(m.getTemperature()), - String.valueOf(m.getTemperatureCorrection()), String.valueOf(m.getHydrometer()), String.valueOf(m.getHydrometerCorrection())}); + String.valueOf(m.getTemperatureCorrection()), String.valueOf(m.getHydrometer()), String.valueOf(m.getHydrometerCorrection()) + , m.getCreatedAt().toString()}); } csvWriter.close(); } + } From 08e30a9f5f7f0b93654e335aededdadfc663a13b Mon Sep 17 00:00:00 2001 From: Seamus Brown Date: Wed, 9 Jun 2021 14:19:59 -0700 Subject: [PATCH 3/3] fix main activity merge issue --- .../com/trueproof/trueproof/activities/BatchDetailActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/trueproof/trueproof/activities/BatchDetailActivity.java b/app/src/main/java/com/trueproof/trueproof/activities/BatchDetailActivity.java index f2bd8f8..6463e23 100644 --- a/app/src/main/java/com/trueproof/trueproof/activities/BatchDetailActivity.java +++ b/app/src/main/java/com/trueproof/trueproof/activities/BatchDetailActivity.java @@ -182,7 +182,7 @@ private void onClickUpdateButton() { .status(status) .build(); viewModel.updateBatch(newBatch); - + } private void populateTextFields(Batch batch) {