diff --git a/app/src/main/java/protect/card_locker/CsvDatabaseExporter.java b/app/src/main/java/protect/card_locker/CsvDatabaseExporter.java
index a5aac91f0..076428bdf 100644
--- a/app/src/main/java/protect/card_locker/CsvDatabaseExporter.java
+++ b/app/src/main/java/protect/card_locker/CsvDatabaseExporter.java
@@ -4,6 +4,7 @@ import android.database.Cursor;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
+import org.json.JSONException;
import java.io.IOException;
import java.io.OutputStreamWriter;
@@ -25,7 +26,8 @@ public class CsvDatabaseExporter implements DatabaseExporter
DBHelper.LoyaltyCardDbIds.CARD_ID,
DBHelper.LoyaltyCardDbIds.HEADER_COLOR,
DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR,
- DBHelper.LoyaltyCardDbIds.BARCODE_TYPE);
+ DBHelper.LoyaltyCardDbIds.BARCODE_TYPE,
+ DBHelper.LoyaltyCardDbIds.EXTRAS);
Cursor cursor = db.getLoyaltyCardCursor();
@@ -33,13 +35,23 @@ public class CsvDatabaseExporter implements DatabaseExporter
{
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cursor);
+ String extras;
+ try {
+ extras = card.extras.toJSON().toString();
+ }
+ catch (JSONException ex)
+ {
+ throw new IOException(ex);
+ }
+
printer.printRecord(card.id,
card.store,
card.note,
card.cardId,
card.headerColor,
card.headerTextColor,
- card.barcodeType);
+ card.barcodeType,
+ extras);
if(Thread.currentThread().isInterrupted())
{
diff --git a/app/src/main/java/protect/card_locker/CsvDatabaseImporter.java b/app/src/main/java/protect/card_locker/CsvDatabaseImporter.java
index c92748afe..39a3bcc13 100644
--- a/app/src/main/java/protect/card_locker/CsvDatabaseImporter.java
+++ b/app/src/main/java/protect/card_locker/CsvDatabaseImporter.java
@@ -149,11 +149,11 @@ public class CsvDatabaseImporter implements DatabaseImporter
headerTextColor = extractInt(DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR, record, true);
}
- ExtrasHelper extras;
+ ExtrasHelper extras = new ExtrasHelper();
try
{
- extras = new ExtrasHelper().fromJSON(new JSONObject(extractString(DBHelper.LoyaltyCardDbIds.EXTRAS, record, "{}")));
+ extras.fromJSON(new JSONObject(extractString(DBHelper.LoyaltyCardDbIds.EXTRAS, record, "{}")));
helper.insertLoyaltyCard(database, id, store, note, cardId, barcodeType, headerColor, headerTextColor, extras);
}
catch (JSONException ex)
diff --git a/app/src/main/java/protect/card_locker/ExtrasHelper.java b/app/src/main/java/protect/card_locker/ExtrasHelper.java
index f2ba1bf3f..15f3fefa7 100644
--- a/app/src/main/java/protect/card_locker/ExtrasHelper.java
+++ b/app/src/main/java/protect/card_locker/ExtrasHelper.java
@@ -1,6 +1,7 @@
package protect.card_locker;
import android.support.annotation.NonNull;
+import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
diff --git a/app/src/main/java/protect/card_locker/ImportURIHelper.java b/app/src/main/java/protect/card_locker/ImportURIHelper.java
index 0378f0bf2..bfcf9d6fb 100644
--- a/app/src/main/java/protect/card_locker/ImportURIHelper.java
+++ b/app/src/main/java/protect/card_locker/ImportURIHelper.java
@@ -46,12 +46,7 @@ public class ImportURIHelper {
String barcodeType = uri.getQueryParameter(BARCODE_TYPE);
Integer headerColor = Integer.parseInt(uri.getQueryParameter(HEADER_COLOR));
Integer headerTextColor = Integer.parseInt(uri.getQueryParameter(HEADER_TEXT_COLOR));
- // Extras was added in a later version, so don't crash if it doesn't exist
- ExtrasHelper extras = new ExtrasHelper();
- if(uri.getQueryParameter(EXTRAS) != null)
- {
- extras = new ExtrasHelper().fromJSON(new JSONObject(uri.getQueryParameter(EXTRAS)));
- }
+ ExtrasHelper extras = new ExtrasHelper().fromJSON(new JSONObject(uri.getQueryParameter(EXTRAS)));
return new LoyaltyCard(-1, store, note, cardId, barcodeType, headerColor, headerTextColor, extras);
} catch (NullPointerException | NumberFormatException | JSONException ex) {
throw new InvalidObjectException("Not a valid import URI");
@@ -59,7 +54,7 @@ public class ImportURIHelper {
}
// Protected for usage in tests
- protected Uri toUri(LoyaltyCard loyaltyCard) {
+ protected Uri toUri(LoyaltyCard loyaltyCard) throws JSONException {
Uri.Builder uriBuilder = new Uri.Builder();
uriBuilder.scheme("https");
uriBuilder.authority(host);
@@ -70,7 +65,7 @@ public class ImportURIHelper {
uriBuilder.appendQueryParameter(BARCODE_TYPE, loyaltyCard.barcodeType);
uriBuilder.appendQueryParameter(HEADER_COLOR, loyaltyCard.headerColor.toString());
uriBuilder.appendQueryParameter(HEADER_TEXT_COLOR, loyaltyCard.headerTextColor.toString());
- uriBuilder.appendQueryParameter(EXTRAS, loyaltyCard.extras.toString());
+ uriBuilder.appendQueryParameter(EXTRAS, loyaltyCard.extras.toJSON().toString());
return uriBuilder.build();
}
@@ -85,7 +80,14 @@ public class ImportURIHelper {
context.startActivity(shareIntent);
}
- public void startShareIntent(LoyaltyCard loyaltyCard) {
- startShareIntent(toUri(loyaltyCard));
+ public boolean startShareIntent(LoyaltyCard loyaltyCard) {
+ try
+ {
+ startShareIntent(toUri(loyaltyCard));
+ return true;
+ }
+ catch (JSONException ex) {}
+
+ return false;
}
}
diff --git a/app/src/main/java/protect/card_locker/LoyaltyCard.java b/app/src/main/java/protect/card_locker/LoyaltyCard.java
index c61a402ba..34f350557 100644
--- a/app/src/main/java/protect/card_locker/LoyaltyCard.java
+++ b/app/src/main/java/protect/card_locker/LoyaltyCard.java
@@ -70,7 +70,7 @@ public class LoyaltyCard
{
try
{
- extras = new ExtrasHelper().fromJSON(new JSONObject(cursor.getString(extrasColumn)));
+ extras = extras.fromJSON(new JSONObject(cursor.getString(extrasColumn)));
}
catch (JSONException ex)
{
diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java
index 68b736ca1..b4e1d1f59 100644
--- a/app/src/main/java/protect/card_locker/MainActivity.java
+++ b/app/src/main/java/protect/card_locker/MainActivity.java
@@ -207,7 +207,10 @@ public class MainActivity extends AppCompatActivity
else if(item.getItemId() == R.id.action_share)
{
final ImportURIHelper importURIHelper = new ImportURIHelper(this);
- importURIHelper.startShareIntent(card);
+ if(importURIHelper.startShareIntent(card))
+ {
+ Toast.makeText(this, R.string.failedSharingCard, Toast.LENGTH_LONG).show();
+ }
return true;
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3474ea6b7..e8e5c7391 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -45,6 +45,7 @@
No Card ID entered
Could not lookup loyalty card
Could not parse the import Uri
+ Could not share card
Could not show extra information: data not correctly formatted
Could not save card
diff --git a/app/src/test/java/protect/card_locker/ImportExportTest.java b/app/src/test/java/protect/card_locker/ImportExportTest.java
index 14709c47c..064a22e2d 100644
--- a/app/src/test/java/protect/card_locker/ImportExportTest.java
+++ b/app/src/test/java/protect/card_locker/ImportExportTest.java
@@ -105,7 +105,7 @@ public class ImportExportTest
assertEquals(BARCODE_TYPE, card.barcodeType);
assertEquals(Integer.valueOf(index), card.headerColor);
assertEquals(Integer.valueOf(index*2), card.headerTextColor);
- assertEquals(EXTRAS.toJSON().toString(), card.extras.toJSON().toString());
+ assertEquals("{\"en\":{\"key\":\"value\"}}", card.extras.toJSON().toString());
index++;
}
diff --git a/app/src/test/java/protect/card_locker/ImportURITest.java b/app/src/test/java/protect/card_locker/ImportURITest.java
index 72157155f..2d4e0b6c9 100644
--- a/app/src/test/java/protect/card_locker/ImportURITest.java
+++ b/app/src/test/java/protect/card_locker/ImportURITest.java
@@ -56,7 +56,7 @@ public class ImportURITest {
assertEquals(card.headerTextColor, parsedCard.headerTextColor);
assertEquals(card.note, parsedCard.note);
assertEquals(card.store, parsedCard.store);
- assertEquals(card.extras.toString(), parsedCard.extras.toString());
+ assertEquals(card.extras.toJSON().toString(), parsedCard.extras.toJSON().toString());
}
@Test
diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java
index 8a4954d16..9f12110ab 100644
--- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java
+++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java
@@ -655,7 +655,7 @@ public class LoyaltyCardViewActivityTest
@Test
public void importCard()
{
- Uri importUri = Uri.parse("https://brarcher.github.io/loyalty-card-locker/share?store=Example%20Store¬e=&cardid=123456&barcodetype=AZTEC&headercolor=-416706&headertextcolor=-1");
+ Uri importUri = Uri.parse("https://brarcher.github.io/loyalty-card-locker/share?store=Example%20Store¬e=&cardid=123456&barcodetype=AZTEC&headercolor=-416706&headertextcolor=-1&extras={}");
Intent intent = new Intent();
intent.setData(importUri);