From 1a6cad893d7793236d0542c498a7740bca0e6503 Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Wed, 18 Dec 2019 12:15:32 +0100 Subject: [PATCH] Load icon from Pkpass if exists --- .../card_locker/CsvDatabaseImporter.java | 10 +++++- .../java/protect/card_locker/DBHelper.java | 33 +++++++++++++++++-- .../protect/card_locker/ImportURIHelper.java | 22 +++++++++++-- .../java/protect/card_locker/LoyaltyCard.java | 19 +++++++++-- .../card_locker/LoyaltyCardCursorAdapter.java | 19 ++++++++--- .../card_locker/LoyaltyCardEditActivity.java | 7 ++-- .../protect/card_locker/MainActivity.java | 3 -- .../protect/card_locker/PkpassImporter.java | 33 ++++++++++++------- .../protect/card_locker/DatabaseTest.java | 16 +++++---- .../protect/card_locker/ImportExportTest.java | 2 +- .../protect/card_locker/ImportURITest.java | 7 +++- .../LoyaltyCardCursorAdapterTest.java | 6 ++-- .../LoyaltyCardViewActivityTest.java | 28 ++++++++-------- .../protect/card_locker/MainActivityTest.java | 8 ++--- 14 files changed, 154 insertions(+), 59 deletions(-) diff --git a/app/src/main/java/protect/card_locker/CsvDatabaseImporter.java b/app/src/main/java/protect/card_locker/CsvDatabaseImporter.java index d09d41e41..228d30d37 100644 --- a/app/src/main/java/protect/card_locker/CsvDatabaseImporter.java +++ b/app/src/main/java/protect/card_locker/CsvDatabaseImporter.java @@ -1,6 +1,7 @@ package protect.card_locker; import android.database.sqlite.SQLiteDatabase; +import android.graphics.Bitmap; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; @@ -145,12 +146,19 @@ public class CsvDatabaseImporter implements DatabaseImporter headerTextColor = extractInt(DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR, record, true); } + Bitmap icon = null; + String iconData = extractString(DBHelper.LoyaltyCardDbIds.ICON, record, ""); + if(!iconData.isEmpty()) + { + icon = DBHelper.convertBitmapBlobToBitmap(iconData.getBytes("UTF-8")); + } + ExtrasHelper extras = new ExtrasHelper(); try { extras.fromJSON(new JSONObject(extractString(DBHelper.LoyaltyCardDbIds.EXTRAS, record, "{}"))); - helper.insertLoyaltyCard(database, id, store, note, cardId, barcodeType, headerColor, headerTextColor, extras); + helper.insertLoyaltyCard(database, id, store, note, cardId, barcodeType, headerColor, headerTextColor, icon, extras); } catch (JSONException ex) { diff --git a/app/src/main/java/protect/card_locker/DBHelper.java b/app/src/main/java/protect/card_locker/DBHelper.java index 345a4fbbc..f84471342 100644 --- a/app/src/main/java/protect/card_locker/DBHelper.java +++ b/app/src/main/java/protect/card_locker/DBHelper.java @@ -6,10 +6,15 @@ import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import org.json.JSONException; import org.json.JSONObject; +import java.io.ByteArrayOutputStream; +import java.nio.ByteBuffer; + public class DBHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "LoyaltyCards.db"; @@ -26,6 +31,7 @@ public class DBHelper extends SQLiteOpenHelper public static final String HEADER_TEXT_COLOR = "headertextcolor"; public static final String CARD_ID = "cardid"; public static final String BARCODE_TYPE = "barcodetype"; + public static final String ICON = "icon"; public static final String EXTRAS = "extras"; } @@ -34,6 +40,19 @@ public class DBHelper extends SQLiteOpenHelper super(context, DATABASE_NAME, null, DATABASE_VERSION); } + public static byte[] convertBitmapToBlob(Bitmap bitmap) + { + // https://stackoverflow.com/a/7620610 + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.PNG, 0, byteArrayOutputStream); + return byteArrayOutputStream.toByteArray(); + } + + public static Bitmap convertBitmapBlobToBitmap(byte[] bytes) + { + return BitmapFactory.decodeByteArray(bytes, 0, bytes.length); + } + @Override public void onCreate(SQLiteDatabase db) { @@ -46,6 +65,7 @@ public class DBHelper extends SQLiteOpenHelper LoyaltyCardDbIds.HEADER_TEXT_COLOR + " INTEGER," + LoyaltyCardDbIds.CARD_ID + " TEXT not null," + LoyaltyCardDbIds.BARCODE_TYPE + " TEXT not null," + + LoyaltyCardDbIds.ICON + " BLOB," + LoyaltyCardDbIds.EXTRAS + " TEXT)"); } @@ -71,6 +91,8 @@ public class DBHelper extends SQLiteOpenHelper // Upgrade from version 3 to version 4 if(oldVersion < 4 && newVersion >= 4) { + db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE + + " ADD COLUMN " + LoyaltyCardDbIds.ICON + " BLOB"); db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE + " ADD COLUMN " + LoyaltyCardDbIds.EXTRAS + " TEXT"); } @@ -78,7 +100,8 @@ public class DBHelper extends SQLiteOpenHelper public long insertLoyaltyCard(final String store, final String note, final String cardId, final String barcodeType, final Integer headerColor, - final Integer headerTextColor, final ExtrasHelper extras) throws JSONException + final Integer headerTextColor, final Bitmap icon, + final ExtrasHelper extras) throws JSONException { SQLiteDatabase db = getWritableDatabase(); ContentValues contentValues = new ContentValues(); @@ -88,6 +111,7 @@ public class DBHelper extends SQLiteOpenHelper contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType); contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor); contentValues.put(LoyaltyCardDbIds.HEADER_TEXT_COLOR, headerTextColor); + contentValues.put(LoyaltyCardDbIds.ICON, icon != null ? convertBitmapToBlob(icon) : null); contentValues.put(LoyaltyCardDbIds.EXTRAS, extras.toJSON().toString()); final long newId = db.insert(LoyaltyCardDbIds.TABLE, null, contentValues); return newId; @@ -96,7 +120,8 @@ public class DBHelper extends SQLiteOpenHelper public boolean insertLoyaltyCard(final SQLiteDatabase db, final int id, final String store, final String note, final String cardId, final String barcodeType, final Integer headerColor, - final Integer headerTextColor, final ExtrasHelper extras) throws JSONException + final Integer headerTextColor, final Bitmap icon, + final ExtrasHelper extras) throws JSONException { ContentValues contentValues = new ContentValues(); contentValues.put(LoyaltyCardDbIds.ID, id); @@ -106,6 +131,7 @@ public class DBHelper extends SQLiteOpenHelper contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType); contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor); contentValues.put(LoyaltyCardDbIds.HEADER_TEXT_COLOR, headerTextColor); + contentValues.put(LoyaltyCardDbIds.ICON, icon != null ? convertBitmapToBlob(icon) : null); contentValues.put(LoyaltyCardDbIds.EXTRAS, extras.toJSON().toString()); final long newId = db.insert(LoyaltyCardDbIds.TABLE, null, contentValues); return (newId != -1); @@ -115,7 +141,7 @@ public class DBHelper extends SQLiteOpenHelper public boolean updateLoyaltyCard(final int id, final String store, final String note, final String cardId, final String barcodeType, final Integer headerColor, final Integer headerTextColor, - final ExtrasHelper extras) throws JSONException + final Bitmap icon, final ExtrasHelper extras) throws JSONException { SQLiteDatabase db = getWritableDatabase(); ContentValues contentValues = new ContentValues(); @@ -125,6 +151,7 @@ public class DBHelper extends SQLiteOpenHelper contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType); contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor); contentValues.put(LoyaltyCardDbIds.HEADER_TEXT_COLOR, headerTextColor); + contentValues.put(LoyaltyCardDbIds.ICON, icon != null ? convertBitmapToBlob(icon) : null); contentValues.put(LoyaltyCardDbIds.EXTRAS, extras.toJSON().toString()); int rowsUpdated = db.update(LoyaltyCardDbIds.TABLE, contentValues, LoyaltyCardDbIds.ID + "=?", diff --git a/app/src/main/java/protect/card_locker/ImportURIHelper.java b/app/src/main/java/protect/card_locker/ImportURIHelper.java index bfcf9d6fb..e7f641ea4 100644 --- a/app/src/main/java/protect/card_locker/ImportURIHelper.java +++ b/app/src/main/java/protect/card_locker/ImportURIHelper.java @@ -2,12 +2,15 @@ package protect.card_locker; import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.net.Uri; import org.json.JSONException; import org.json.JSONObject; import java.io.InvalidObjectException; +import java.io.UnsupportedEncodingException; public class ImportURIHelper { private static final String STORE = DBHelper.LoyaltyCardDbIds.STORE; @@ -16,6 +19,7 @@ public class ImportURIHelper { private static final String BARCODE_TYPE = DBHelper.LoyaltyCardDbIds.BARCODE_TYPE; private static final String HEADER_COLOR = DBHelper.LoyaltyCardDbIds.HEADER_COLOR; private static final String HEADER_TEXT_COLOR = DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR; + private static final String ICON = DBHelper.LoyaltyCardDbIds.ICON; private static final String EXTRAS = DBHelper.LoyaltyCardDbIds.EXTRAS; private final Context context; @@ -46,15 +50,28 @@ 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)); + String iconData = uri.getQueryParameter(ICON); + Bitmap icon = null; + if(!iconData.isEmpty()) + { + byte[] iconBytes = iconData.getBytes("UTF-8"); + icon = DBHelper.convertBitmapBlobToBitmap(iconBytes); + } 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) { + return new LoyaltyCard(-1, store, note, cardId, barcodeType, headerColor, headerTextColor, icon, extras); + } catch (NullPointerException | NumberFormatException | JSONException | UnsupportedEncodingException ex) { throw new InvalidObjectException("Not a valid import URI"); } } // Protected for usage in tests protected Uri toUri(LoyaltyCard loyaltyCard) throws JSONException { + String icon = ""; + if(loyaltyCard.icon != null) + { + icon = DBHelper.convertBitmapToBlob(loyaltyCard.icon).toString(); + } + Uri.Builder uriBuilder = new Uri.Builder(); uriBuilder.scheme("https"); uriBuilder.authority(host); @@ -65,6 +82,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(ICON, icon); uriBuilder.appendQueryParameter(EXTRAS, loyaltyCard.extras.toJSON().toString()); return uriBuilder.build(); diff --git a/app/src/main/java/protect/card_locker/LoyaltyCard.java b/app/src/main/java/protect/card_locker/LoyaltyCard.java index 34f350557..40b3d4653 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCard.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCard.java @@ -1,6 +1,8 @@ package protect.card_locker; import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.support.annotation.Nullable; import org.json.JSONException; @@ -22,12 +24,15 @@ public class LoyaltyCard @Nullable public final Integer headerTextColor; + @Nullable + public final Bitmap icon; + @Nullable public final ExtrasHelper extras; public LoyaltyCard(final int id, final String store, final String note, final String cardId, final String barcodeType, final Integer headerColor, final Integer headerTextColor, - final ExtrasHelper extras) + final Bitmap icon, final ExtrasHelper extras) { this.id = id; this.store = store; @@ -36,6 +41,7 @@ public class LoyaltyCard this.barcodeType = barcodeType; this.headerColor = headerColor; this.headerTextColor = headerTextColor; + this.icon = icon; this.extras = extras; } @@ -63,6 +69,15 @@ public class LoyaltyCard headerTextColor = cursor.getInt(headerTextColorColumn); } + int iconColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ICON); + Bitmap icon = null; + + if(cursor.isNull(iconColumn) == false) + { + byte[] iconData = cursor.getBlob(iconColumn); + icon = BitmapFactory.decodeByteArray(iconData, 0, iconData.length); + } + int extrasColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXTRAS); ExtrasHelper extras = new ExtrasHelper(); @@ -80,6 +95,6 @@ public class LoyaltyCard } } - return new LoyaltyCard(id, store, note, cardId, barcodeType, headerColor, headerTextColor, extras); + return new LoyaltyCard(id, store, note, cardId, barcodeType, headerColor, headerTextColor, icon, extras); } } diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java b/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java index 07f04f9f5..da28fcf91 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java @@ -2,6 +2,7 @@ package protect.card_locker; import android.content.Context; import android.database.Cursor; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -61,10 +62,18 @@ class LoyaltyCardCursorAdapter extends CursorAdapter int tileLetterFontSize = context.getResources().getDimensionPixelSize(R.dimen.tileLetterFontSize); int pixelSize = context.getResources().getDimensionPixelSize(R.dimen.cardThumbnailSize); - Integer letterBackgroundColor = loyaltyCard.headerColor; - Integer letterTextColor = loyaltyCard.headerTextColor; - LetterBitmap letterBitmap = new LetterBitmap(context, loyaltyCard.store, loyaltyCard.store, - tileLetterFontSize, pixelSize, pixelSize, letterBackgroundColor, letterTextColor); - thumbnail.setImageBitmap(letterBitmap.getLetterTile()); + + if(loyaltyCard.icon == null) + { + Integer letterBackgroundColor = loyaltyCard.headerColor; + Integer letterTextColor = loyaltyCard.headerTextColor; + LetterBitmap letterBitmap = new LetterBitmap(context, loyaltyCard.store, loyaltyCard.store, + tileLetterFontSize, pixelSize, pixelSize, letterBackgroundColor, letterTextColor); + thumbnail.setImageBitmap(letterBitmap.getLetterTile()); + } + else + { + thumbnail.setImageBitmap(loyaltyCard.icon); + } } } diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index 972e1396e..e408a9d02 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -4,6 +4,7 @@ import android.app.Activity; import android.content.DialogInterface; import android.content.Intent; import android.content.res.TypedArray; +import android.graphics.Bitmap; import android.graphics.Color; import android.net.Uri; import android.os.Build; @@ -65,6 +66,7 @@ public class LoyaltyCardEditActivity extends AppCompatActivity String importLoyaltyCardType = null; Integer headingColorValue = null; Integer headingStoreTextColorValue = null; + Bitmap icon = null; ExtrasHelper extras = new ExtrasHelper(); DBHelper db; @@ -237,6 +239,7 @@ public class LoyaltyCardEditActivity extends AppCompatActivity barcodeTypeField.setText(importCard.barcodeType); headingColorValue = importCard.headerColor; headingStoreTextColorValue = importCard.headerTextColor; + icon = importCard.icon; extras = importCard.extras; } else @@ -415,12 +418,12 @@ public class LoyaltyCardEditActivity extends AppCompatActivity if(updateLoyaltyCard) { - db.updateLoyaltyCard(loyaltyCardId, store, note, cardId, barcodeType, headingColorValue, headingStoreTextColorValue, extras); + db.updateLoyaltyCard(loyaltyCardId, store, note, cardId, barcodeType, headingColorValue, headingStoreTextColorValue, icon, extras); Log.i(TAG, "Updated " + loyaltyCardId + " to " + cardId); } else { - loyaltyCardId = (int)db.insertLoyaltyCard(store, note, cardId, barcodeType, headingColorValue, headingStoreTextColorValue, extras); + loyaltyCardId = (int)db.insertLoyaltyCard(store, note, cardId, barcodeType, headingColorValue, headingStoreTextColorValue, icon, extras); } finish(); diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java index b4e1d1f59..466bbbe54 100644 --- a/app/src/main/java/protect/card_locker/MainActivity.java +++ b/app/src/main/java/protect/card_locker/MainActivity.java @@ -11,11 +11,9 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.database.Cursor; -import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; -import android.support.v7.app.AppCompatDelegate; import android.support.v7.widget.SearchView; import android.support.v7.widget.Toolbar; import android.util.Log; @@ -36,7 +34,6 @@ import java.util.Calendar; import java.util.Map; import protect.card_locker.intro.IntroActivity; -import protect.card_locker.preferences.Settings; import protect.card_locker.preferences.SettingsActivity; public class MainActivity extends AppCompatActivity diff --git a/app/src/main/java/protect/card_locker/PkpassImporter.java b/app/src/main/java/protect/card_locker/PkpassImporter.java index f54fe5272..7a77f61f4 100644 --- a/app/src/main/java/protect/card_locker/PkpassImporter.java +++ b/app/src/main/java/protect/card_locker/PkpassImporter.java @@ -1,12 +1,13 @@ package protect.card_locker; import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.Color; import android.net.Uri; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.google.common.primitives.Chars; import com.google.zxing.BarcodeFormat; import org.json.JSONArray; @@ -16,8 +17,6 @@ import org.json.JSONObject; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import java.nio.charset.Charset; -import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; @@ -28,6 +27,8 @@ import java.util.zip.ZipInputStream; public class PkpassImporter { private Context context; + private Bitmap icon = null; + private HashMap> translations = new HashMap<>(); public PkpassImporter(Context context) @@ -35,7 +36,7 @@ public class PkpassImporter { this.context = context; } - private String readZipInputStream(ZipInputStream zipInputStream) throws IOException + private ByteArrayOutputStream readZipInputStream(ZipInputStream zipInputStream) throws IOException { byte[] buffer = new byte[2048]; ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); @@ -46,7 +47,13 @@ public class PkpassImporter { byteArrayOutputStream.write(buffer, 0, size); } - return byteArrayOutputStream.toString("UTF-8"); + return byteArrayOutputStream; + } + + private void loadBitmap(ByteArrayOutputStream byteArrayOutputStream) + { + byte[] bytes = byteArrayOutputStream.toByteArray(); + icon = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); } // FIXME: Probably very fragile @@ -152,17 +159,21 @@ public class PkpassImporter { ZipEntry entry; // We first want to parse the translations - while ((entry = zipInputStream.getNextEntry()) != null) { - if (entry.getName().endsWith("pass.strings")) + while((entry = zipInputStream.getNextEntry()) != null) { + if(entry.getName().endsWith("pass.strings")) { // Example: en.lproj/pass.strings String language = entry.getName().substring(0, entry.getName().indexOf(".")); - parseTranslations(language, readZipInputStream(zipInputStream)); + parseTranslations(language, readZipInputStream(zipInputStream).toString("UTF-8")); } - else if (entry.getName().equals("pass.json")) + else if(entry.getName().equals("pass.json")) { - passJSONString = readZipInputStream(zipInputStream); + passJSONString = readZipInputStream(zipInputStream).toString("UTF-8"); + } + else if(entry.getName().equals("icon.png")) + { + loadBitmap(readZipInputStream(zipInputStream)); } } @@ -298,6 +309,6 @@ public class PkpassImporter { extras = appendData(extras, json, styleKey, "auxiliaryFields"); extras = appendData(extras, json, styleKey, "backFields"); - return new LoyaltyCard(-1, store, note, cardId, barcodeType, headerColor, headerTextColor, extras); + return new LoyaltyCard(-1, store, note, cardId, barcodeType, headerColor, headerTextColor, icon, extras); } } \ No newline at end of file diff --git a/app/src/test/java/protect/card_locker/DatabaseTest.java b/app/src/test/java/protect/card_locker/DatabaseTest.java index 54a231487..c2b030535 100644 --- a/app/src/test/java/protect/card_locker/DatabaseTest.java +++ b/app/src/test/java/protect/card_locker/DatabaseTest.java @@ -2,8 +2,11 @@ package protect.card_locker; import android.app.Activity; import android.content.ContentValues; +import android.content.res.Resources; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.Color; import com.google.zxing.BarcodeFormat; @@ -30,6 +33,7 @@ public class DatabaseTest private static final Integer DEFAULT_HEADER_COLOR = Color.BLACK; private static final Integer DEFAULT_HEADER_TEXT_COLOR = Color.WHITE; + private static Bitmap DEFAULT_ICON = BitmapFactory.decodeResource(Resources.getSystem(), R.drawable.app_icon_intro); private static ExtrasHelper DEFAULT_EXTRAS; @Before @@ -46,7 +50,7 @@ public class DatabaseTest public void addRemoveOneGiftCard() throws JSONException { assertEquals(0, db.getLoyaltyCardCount()); - long id = db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, DEFAULT_EXTRAS); + long id = db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, DEFAULT_ICON, DEFAULT_EXTRAS); boolean result = (id != -1); assertTrue(result); assertEquals(1, db.getLoyaltyCardCount()); @@ -67,12 +71,12 @@ public class DatabaseTest @Test public void updateGiftCard() throws JSONException { - long id = db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, DEFAULT_EXTRAS); + long id = db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, DEFAULT_ICON, DEFAULT_EXTRAS); boolean result = (id != -1); assertTrue(result); assertEquals(1, db.getLoyaltyCardCount()); - result = db.updateLoyaltyCard(1, "store1", "note1", "cardId1", BarcodeFormat.AZTEC.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, DEFAULT_EXTRAS); + result = db.updateLoyaltyCard(1, "store1", "note1", "cardId1", BarcodeFormat.AZTEC.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, DEFAULT_ICON, DEFAULT_EXTRAS); assertTrue(result); assertEquals(1, db.getLoyaltyCardCount()); @@ -91,7 +95,7 @@ public class DatabaseTest assertEquals(0, db.getLoyaltyCardCount()); boolean result = db.updateLoyaltyCard(1, "store1", "note1", "cardId1", - BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, DEFAULT_EXTRAS); + BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR, DEFAULT_ICON, DEFAULT_EXTRAS); assertEquals(false, result); assertEquals(0, db.getLoyaltyCardCount()); } @@ -99,7 +103,7 @@ public class DatabaseTest @Test public void emptyGiftCardValues() throws JSONException { - long id = db.insertLoyaltyCard("", "", "", "", null, null, new ExtrasHelper()); + long id = db.insertLoyaltyCard("", "", "", "", null, null, null, new ExtrasHelper()); boolean result = (id != -1); assertTrue(result); assertEquals(1, db.getLoyaltyCardCount()); @@ -123,7 +127,7 @@ public class DatabaseTest for(int index = CARDS_TO_ADD-1; index >= 0; index--) { long id = db.insertLoyaltyCard("store" + index, "note" + index, "cardId" + index, - BarcodeFormat.UPC_A.toString(), index, index*2, DEFAULT_EXTRAS); + BarcodeFormat.UPC_A.toString(), index, index*2, DEFAULT_ICON, DEFAULT_EXTRAS); boolean result = (id != -1); assertTrue(result); } diff --git a/app/src/test/java/protect/card_locker/ImportExportTest.java b/app/src/test/java/protect/card_locker/ImportExportTest.java index b8583bee7..f3b2ddc43 100644 --- a/app/src/test/java/protect/card_locker/ImportExportTest.java +++ b/app/src/test/java/protect/card_locker/ImportExportTest.java @@ -74,7 +74,7 @@ public class ImportExportTest { String storeName = String.format("store, \"%4d", index); String note = String.format("note, \"%4d", index); - long id = db.insertLoyaltyCard(storeName, note, BARCODE_DATA, BARCODE_TYPE, index, index*2, EXTRAS); + long id = db.insertLoyaltyCard(storeName, note, BARCODE_DATA, BARCODE_TYPE, index, index*2, null, EXTRAS); boolean result = (id != -1); assertTrue(result); } diff --git a/app/src/test/java/protect/card_locker/ImportURITest.java b/app/src/test/java/protect/card_locker/ImportURITest.java index 2d4e0b6c9..77cb2a137 100644 --- a/app/src/test/java/protect/card_locker/ImportURITest.java +++ b/app/src/test/java/protect/card_locker/ImportURITest.java @@ -1,6 +1,9 @@ package protect.card_locker; import android.app.Activity; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.Color; import android.net.Uri; import com.google.zxing.BarcodeFormat; @@ -36,9 +39,10 @@ public class ImportURITest { public void ensureNoDataLoss() throws InvalidObjectException, JSONException { // Generate card + Bitmap icon = BitmapFactory.decodeResource(Resources.getSystem(), R.drawable.app_icon_intro); ExtrasHelper extrasHelper = new ExtrasHelper(); extrasHelper.addLanguageValue("en", "key", "value"); - db.insertLoyaltyCard("store", "note", BarcodeFormat.UPC_A.toString(), LoyaltyCardDbIds.BARCODE_TYPE, Color.BLACK, Color.WHITE, extrasHelper); + db.insertLoyaltyCard("store", "note", BarcodeFormat.UPC_A.toString(), LoyaltyCardDbIds.BARCODE_TYPE, Color.BLACK, Color.WHITE, icon, extrasHelper); // Get card LoyaltyCard card = db.getLoyaltyCard(1); @@ -56,6 +60,7 @@ public class ImportURITest { assertEquals(card.headerTextColor, parsedCard.headerTextColor); assertEquals(card.note, parsedCard.note); assertEquals(card.store, parsedCard.store); + assertEquals(card.icon.getRowBytes(), parsedCard.icon.getRowBytes()); assertEquals(card.extras.toJSON().toString(), parsedCard.extras.toJSON().toString()); } diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java index 8f32997a1..b02f8ed2c 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java @@ -85,7 +85,7 @@ public class LoyaltyCardCursorAdapterTest @Test public void TestCursorAdapterEmptyNote() throws JSONException { - db.insertLoyaltyCard("store", "", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE, new ExtrasHelper()); + db.insertLoyaltyCard("store", "", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE, null, new ExtrasHelper()); LoyaltyCard card = db.getLoyaltyCard(1); Cursor cursor = db.getLoyaltyCardCursor(); @@ -99,7 +99,7 @@ public class LoyaltyCardCursorAdapterTest @Test public void TestCursorAdapterWithNote() throws JSONException { - db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE, new ExtrasHelper()); + db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE, null, new ExtrasHelper()); LoyaltyCard card = db.getLoyaltyCard(1); Cursor cursor = db.getLoyaltyCardCursor(); @@ -113,7 +113,7 @@ public class LoyaltyCardCursorAdapterTest @Test public void TestCursorAdapterFontSizes() throws JSONException { - db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE, new ExtrasHelper()); + db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE, null, new ExtrasHelper()); LoyaltyCard card = db.getLoyaltyCard(1); Cursor cursor = db.getLoyaltyCardCursor(); diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index 0aba11445..7b88463e1 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -360,7 +360,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, new ExtrasHelper()); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, null, new ExtrasHelper()); activityController.start(); activityController.visible(); @@ -376,7 +376,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, new ExtrasHelper()); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, null, new ExtrasHelper()); activityController.start(); activityController.visible(); @@ -392,7 +392,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", EAN_BARCODE_DATA, EAN_BARCODE_TYPE, Color.BLACK, Color.WHITE, new ExtrasHelper()); + db.insertLoyaltyCard("store", "note", EAN_BARCODE_DATA, EAN_BARCODE_TYPE, Color.BLACK, Color.WHITE, null, new ExtrasHelper()); activityController.start(); activityController.visible(); @@ -413,7 +413,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", EAN_BARCODE_DATA, EAN_BARCODE_TYPE, Color.BLACK, Color.WHITE, new ExtrasHelper()); + db.insertLoyaltyCard("store", "note", EAN_BARCODE_DATA, EAN_BARCODE_TYPE, Color.BLACK, Color.WHITE, null, new ExtrasHelper()); activityController.start(); activityController.visible(); @@ -439,7 +439,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, new ExtrasHelper()); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, null, new ExtrasHelper()); activityController.start(); activityController.visible(); @@ -484,7 +484,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, new ExtrasHelper()); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, null, new ExtrasHelper()); activityController.start(); activityController.visible(); @@ -502,7 +502,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, null, null, new ExtrasHelper()); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, null, null, null, new ExtrasHelper()); activityController.start(); activityController.visible(); @@ -520,7 +520,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, null, null, new ExtrasHelper()); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, null, null, null, new ExtrasHelper()); activityController.start(); activityController.visible(); @@ -537,7 +537,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", BARCODE_DATA, "", Color.BLACK, Color.WHITE, new ExtrasHelper()); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, "", Color.BLACK, Color.WHITE, null, new ExtrasHelper()); activityController.start(); activityController.visible(); @@ -554,7 +554,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, new ExtrasHelper()); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, null, new ExtrasHelper()); final int STORE_FONT_SIZE = 50; final int CARD_FONT_SIZE = 40; @@ -596,7 +596,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, new ExtrasHelper()); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, null, new ExtrasHelper()); SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity); settings.edit() @@ -631,7 +631,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, new ExtrasHelper()); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, null, new ExtrasHelper()); activityController.start(); activityController.resume(); @@ -653,7 +653,7 @@ public class LoyaltyCardViewActivityTest ExtrasHelper extrasHelper = new ExtrasHelper(); extrasHelper.addLanguageValue("en", "key", "value"); - db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, extrasHelper); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE, null, extrasHelper); activityController.start(); activityController.resume(); @@ -668,7 +668,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&extras={}"); + Uri importUri = Uri.parse("https://brarcher.github.io/loyalty-card-locker/share?store=Example%20Store¬e=&cardid=123456&barcodetype=AZTEC&headercolor=-416706&headertextcolor=-1&icon=&extras={}"); Intent intent = new Intent(); intent.setData(importUri); diff --git a/app/src/test/java/protect/card_locker/MainActivityTest.java b/app/src/test/java/protect/card_locker/MainActivityTest.java index 15db3361f..623ca931c 100644 --- a/app/src/test/java/protect/card_locker/MainActivityTest.java +++ b/app/src/test/java/protect/card_locker/MainActivityTest.java @@ -8,7 +8,6 @@ import android.content.SharedPreferences; import android.database.Cursor; import android.graphics.Color; import android.os.Bundle; -import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.View; import android.widget.ListView; @@ -17,7 +16,6 @@ import android.widget.TextView; import com.google.zxing.BarcodeFormat; import org.json.JSONException; -import org.json.JSONObject; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -111,7 +109,7 @@ public class MainActivityTest assertEquals(0, list.getCount()); DBHelper db = new DBHelper(mainActivity); - db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE, new ExtrasHelper()); + db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE, null, new ExtrasHelper()); assertEquals(View.VISIBLE, helpText.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); @@ -143,8 +141,8 @@ public class MainActivityTest ListView list = mainActivity.findViewById(R.id.list); DBHelper db = new DBHelper(mainActivity); - db.insertLoyaltyCard("The First Store", "Initial note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE, new ExtrasHelper()); - db.insertLoyaltyCard("The Second Store", "Secondary note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE, new ExtrasHelper()); + db.insertLoyaltyCard("The First Store", "Initial note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE, null, new ExtrasHelper()); + db.insertLoyaltyCard("The Second Store", "Secondary note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE, null, new ExtrasHelper()); activityController.pause(); activityController.resume();