From 62e4fa402ca740c3a5262b79f750e3ce646efb52 Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Sun, 20 Mar 2016 17:46:50 -0400 Subject: [PATCH 1/5] split parts of test into separate methods in the future additional tests will be added, and this will allow for more reuse --- .../LoyaltyCardCursorAdapterTest.java | 51 +++++++++++++------ 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java index 0c6ccc14d..7dcf7ab1a 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java @@ -7,12 +7,12 @@ import android.widget.TextView; import com.google.zxing.BarcodeFormat; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricGradleTestRunner; import org.robolectric.annotation.Config; -import org.robolectric.util.ActivityController; import static org.junit.Assert.assertEquals; @@ -20,32 +20,51 @@ import static org.junit.Assert.assertEquals; @Config(constants = BuildConfig.class, sdk = 17) public class LoyaltyCardCursorAdapterTest { - @Test - public void TestCursorAdapter() + private Activity activity; + private DBHelper db; + + @Before + public void setUp() { - ActivityController activityController = Robolectric.buildActivity(MainActivity.class).create(); - Activity activity = (Activity)activityController.get(); - - DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "cardId", BarcodeFormat.UPC_A.toString()); - LoyaltyCard card = db.getLoyaltyCard(1); - - Cursor cursor = db.getLoyaltyCardCursor(); - cursor.moveToFirst(); + activity = Robolectric.setupActivity(MainActivity.class); + db = new DBHelper(activity); + } + private View createView(Cursor cursor) + { LoyaltyCardCursorAdapter adapter = new LoyaltyCardCursorAdapter(activity.getApplicationContext(), cursor); View view = adapter.newView(activity.getApplicationContext(), cursor, null); adapter.bindView(view, activity.getApplicationContext(), cursor); - final TextView storeField = (TextView) view.findViewById(R.id.store); + return view; + } - assertEquals(card.store, storeField.getText().toString()); + private void checkView(final View view, final String store, final String cardId) + { + final TextView storeField = (TextView) view.findViewById(R.id.store); + assertEquals(store, storeField.getText().toString()); final TextView cardIdField = (TextView) view.findViewById(R.id.cardId); + assertEquals(cardId, cardIdField.getText().toString()); + } + + + @Test + public void TestCursorAdapter() + { + db.insertLoyaltyCard("store", "", "cardId", BarcodeFormat.UPC_A.toString()); + LoyaltyCard card = db.getLoyaltyCard(1); + + Cursor cursor = db.getLoyaltyCardCursor(); + cursor.moveToFirst(); + + View view = createView(cursor); + final String cardIdLabel = activity.getResources().getString(R.string.cardId); final String cardIdFormat = activity.getResources().getString(R.string.cardIdFormat); - String cardIdText = String.format(cardIdFormat, cardIdLabel, "cardId"); - assertEquals(cardIdText, cardIdField.getText().toString()); + String cardIdText = String.format(cardIdFormat, cardIdLabel, card.cardId); + + checkView(view, card.store, cardIdText); } } From 9306e1a3d948139c7b0eca3d8a5573c954baaabd Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Sun, 20 Mar 2016 17:56:11 -0400 Subject: [PATCH 2/5] Add ability to store a note with loyalty card --- .../java/protect/card_locker/DBHelper.java | 23 ++++-- .../java/protect/card_locker/LoyaltyCard.java | 7 +- .../card_locker/LoyaltyCardViewActivity.java | 12 +++- .../res/layout/loyalty_card_view_activity.xml | 22 ++++++ app/src/main/res/values/strings.xml | 1 + .../protect/card_locker/DatabaseTest.java | 70 +++++++++++++++++-- .../LoyaltyCardViewActivityTest.java | 52 ++++++++------ .../protect/card_locker/MainActivityTest.java | 2 +- 8 files changed, 150 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/protect/card_locker/DBHelper.java b/app/src/main/java/protect/card_locker/DBHelper.java index 9e51043f2..616dbba96 100644 --- a/app/src/main/java/protect/card_locker/DBHelper.java +++ b/app/src/main/java/protect/card_locker/DBHelper.java @@ -10,13 +10,15 @@ import android.database.sqlite.SQLiteOpenHelper; public class DBHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "LoyaltyCards.db"; - public static final int DATABASE_VERSION = 1; + public static final int ORIGINAL_DATABASE_VERSION = 1; + public static final int DATABASE_VERSION = 2; static class LoyaltyCardDbIds { public static final String TABLE = "cards"; public static final String ID = "_id"; public static final String STORE = "store"; + public static final String NOTE = "note"; public static final String CARD_ID = "cardid"; public static final String BARCODE_TYPE = "barcodetype"; } @@ -33,6 +35,7 @@ public class DBHelper extends SQLiteOpenHelper db.execSQL("create table " + LoyaltyCardDbIds.TABLE + "(" + LoyaltyCardDbIds.ID + " INTEGER primary key autoincrement," + LoyaltyCardDbIds.STORE + " TEXT not null," + + LoyaltyCardDbIds.NOTE + " TEXT not null," + LoyaltyCardDbIds.CARD_ID + " TEXT not null," + LoyaltyCardDbIds.BARCODE_TYPE + " TEXT not null)"); } @@ -40,16 +43,21 @@ public class DBHelper extends SQLiteOpenHelper @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - // Do not support versioning yet - db.execSQL("DROP TABLE IF EXISTS " + LoyaltyCardDbIds.TABLE); - onCreate(db); + // Upgrade from version 1 to version 2 + if(oldVersion < 2 && newVersion >= 2) + { + db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE + + " ADD COLUMN " + LoyaltyCardDbIds.NOTE + " TEXT not null default ''"); + } } - public boolean insertLoyaltyCard(final String store, final String cardId, final String barcodeType) + public boolean insertLoyaltyCard(final String store, final String note, final String cardId, + final String barcodeType) { SQLiteDatabase db = getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(LoyaltyCardDbIds.STORE, store); + contentValues.put(LoyaltyCardDbIds.NOTE, note); contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId); contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType); final long newId = db.insert(LoyaltyCardDbIds.TABLE, null, contentValues); @@ -57,12 +65,13 @@ public class DBHelper extends SQLiteOpenHelper } - public boolean updateLoyaltyCard(final int id, final String store, final String cardId, - final String barcodeType) + public boolean updateLoyaltyCard(final int id, final String store, final String note, + final String cardId, final String barcodeType) { SQLiteDatabase db = getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(LoyaltyCardDbIds.STORE, store); + contentValues.put(LoyaltyCardDbIds.NOTE, note); contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId); contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType); int rowsUpdated = db.update(LoyaltyCardDbIds.TABLE, contentValues, diff --git a/app/src/main/java/protect/card_locker/LoyaltyCard.java b/app/src/main/java/protect/card_locker/LoyaltyCard.java index 504692fac..591491344 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCard.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCard.java @@ -6,13 +6,15 @@ public class LoyaltyCard { public final int id; public final String store; + public final String note; public final String cardId; public final String barcodeType; - public LoyaltyCard(final int id, final String store, final String cardId, final String barcodeType) + public LoyaltyCard(final int id, final String store, final String note, final String cardId, final String barcodeType) { this.id = id; this.store = store; + this.note = note; this.cardId = cardId; this.barcodeType = barcodeType; } @@ -21,9 +23,10 @@ public class LoyaltyCard { int id = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ID)); String store = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STORE)); + String note = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.NOTE)); String cardId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID)); String barcodeType = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE)); - return new LoyaltyCard(id, store, cardId, barcodeType); + return new LoyaltyCard(id, store, note, cardId, barcodeType); } } diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index a53236a00..937e93b61 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -77,6 +77,7 @@ public class LoyaltyCardViewActivity extends AppCompatActivity Log.i(TAG, "To view card: " + loyaltyCardId); final EditText storeField = (EditText) findViewById(R.id.storeName); + final EditText noteField = (EditText) findViewById(R.id.note); final EditText cardIdField = (EditText) findViewById(R.id.cardId); final EditText barcodeTypeField = (EditText) findViewById(R.id.barcodeType); final ImageView barcodeImage = (ImageView) findViewById(R.id.barcode); @@ -97,6 +98,11 @@ public class LoyaltyCardViewActivity extends AppCompatActivity storeField.setText(loyaltyCard.store); + if(noteField.getText().length() == 0) + { + noteField.setText(loyaltyCard.note); + } + if(cardIdField.getText().length() == 0) { cardIdField.setText(loyaltyCard.cardId); @@ -110,6 +116,7 @@ public class LoyaltyCardViewActivity extends AppCompatActivity if(viewLoyaltyCard) { storeField.setEnabled(false); + noteField.setEnabled(false); } if(updateLoyaltyCard) @@ -213,6 +220,7 @@ public class LoyaltyCardViewActivity extends AppCompatActivity public void onClick(final View v) { String store = storeField.getText().toString(); + String note = noteField.getText().toString(); String cardId = cardIdField.getText().toString(); String barcodeType = barcodeTypeField.getText().toString(); @@ -230,12 +238,12 @@ public class LoyaltyCardViewActivity extends AppCompatActivity if(updateLoyaltyCard) { - db.updateLoyaltyCard(loyaltyCardId, store, cardId, barcodeType); + db.updateLoyaltyCard(loyaltyCardId, store, note, cardId, barcodeType); Log.i(TAG, "Updated " + loyaltyCardId + " to " + cardId); } else { - db.insertLoyaltyCard(store, cardId, barcodeType); + db.insertLoyaltyCard(store, note, cardId, barcodeType); } finish(); diff --git a/app/src/main/res/layout/loyalty_card_view_activity.xml b/app/src/main/res/layout/loyalty_card_view_activity.xml index 5e53fbb1b..03aedbadb 100644 --- a/app/src/main/res/layout/loyalty_card_view_activity.xml +++ b/app/src/main/res/layout/loyalty_card_view_activity.xml @@ -52,6 +52,28 @@ android:inputType="text"/> + + + + + + You don\'t have any loyalty cards at the moment. Click the "+" (plus) button up top to get started.\n\nLoyalty Card Locker lets you carry your loyalty cards on your phone, so they are always within reach. Store + Note Card ID Barcode Type diff --git a/app/src/test/java/protect/card_locker/DatabaseTest.java b/app/src/test/java/protect/card_locker/DatabaseTest.java index 0de2deb75..88761c8a3 100644 --- a/app/src/test/java/protect/card_locker/DatabaseTest.java +++ b/app/src/test/java/protect/card_locker/DatabaseTest.java @@ -1,7 +1,9 @@ package protect.card_locker; import android.app.Activity; +import android.content.ContentValues; import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; import com.google.zxing.BarcodeFormat; @@ -34,13 +36,14 @@ public class DatabaseTest public void addRemoveOneGiftCard() { assertEquals(0, db.getLoyaltyCardCount()); - boolean result = db.insertLoyaltyCard("store", "cardId", BarcodeFormat.UPC_A.toString()); + boolean result = db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString()); assertTrue(result); assertEquals(1, db.getLoyaltyCardCount()); LoyaltyCard loyaltyCard = db.getLoyaltyCard(1); assertNotNull(loyaltyCard); assertEquals("store", loyaltyCard.store); + assertEquals("note", loyaltyCard.note); assertEquals("cardId", loyaltyCard.cardId); assertEquals(BarcodeFormat.UPC_A.toString(), loyaltyCard.barcodeType); @@ -53,17 +56,18 @@ public class DatabaseTest @Test public void updateGiftCard() { - boolean result = db.insertLoyaltyCard("store", "cardId", BarcodeFormat.UPC_A.toString()); + boolean result = db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString()); assertTrue(result); assertEquals(1, db.getLoyaltyCardCount()); - result = db.updateLoyaltyCard(1, "store1", "cardId1", BarcodeFormat.AZTEC.toString()); + result = db.updateLoyaltyCard(1, "store1", "note1", "cardId1", BarcodeFormat.AZTEC.toString()); assertTrue(result); assertEquals(1, db.getLoyaltyCardCount()); LoyaltyCard loyaltyCard = db.getLoyaltyCard(1); assertNotNull(loyaltyCard); assertEquals("store1", loyaltyCard.store); + assertEquals("note1", loyaltyCard.note); assertEquals("cardId1", loyaltyCard.cardId); assertEquals(BarcodeFormat.AZTEC.toString(), loyaltyCard.barcodeType); } @@ -73,7 +77,8 @@ public class DatabaseTest { assertEquals(0, db.getLoyaltyCardCount()); - boolean result = db.updateLoyaltyCard(1, "store1", "cardId1", BarcodeFormat.UPC_A.toString()); + boolean result = db.updateLoyaltyCard(1, "store1", "note1", "cardId1", + BarcodeFormat.UPC_A.toString()); assertEquals(false, result); assertEquals(0, db.getLoyaltyCardCount()); } @@ -81,13 +86,14 @@ public class DatabaseTest @Test public void emptyGiftCardValues() { - boolean result = db.insertLoyaltyCard("", "", ""); + boolean result = db.insertLoyaltyCard("", "", "", ""); assertTrue(result); assertEquals(1, db.getLoyaltyCardCount()); LoyaltyCard loyaltyCard = db.getLoyaltyCard(1); assertNotNull(loyaltyCard); assertEquals("", loyaltyCard.store); + assertEquals("", loyaltyCard.note); assertEquals("", loyaltyCard.cardId); assertEquals("", loyaltyCard.barcodeType); } @@ -101,7 +107,8 @@ public class DatabaseTest // that they are sorted for(int index = CARDS_TO_ADD-1; index >= 0; index--) { - boolean result = db.insertLoyaltyCard("store" + index, "cardId" + index, BarcodeFormat.UPC_A.toString()); + boolean result = db.insertLoyaltyCard("store" + index, "note" + index, "cardId" + index, + BarcodeFormat.UPC_A.toString()); assertTrue(result); } @@ -117,6 +124,7 @@ public class DatabaseTest for(int index = 0; index < CARDS_TO_ADD; index++) { assertEquals("store"+index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STORE))); + assertEquals("note"+index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.NOTE))); assertEquals("cardId"+index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID))); assertEquals(BarcodeFormat.UPC_A.toString(), cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE))); @@ -125,4 +133,54 @@ public class DatabaseTest assertTrue(cursor.isAfterLast()); } + + private void setupDatabaseVersion1(SQLiteDatabase database) + { + // Delete the tables as they exist now + database.execSQL("drop table " + DBHelper.LoyaltyCardDbIds.TABLE); + + // Create the table as it existed in revision 1 + database.execSQL("create table " + DBHelper.LoyaltyCardDbIds.TABLE + "(" + + DBHelper.LoyaltyCardDbIds.ID + " INTEGER primary key autoincrement," + + DBHelper.LoyaltyCardDbIds.STORE + " TEXT not null," + + DBHelper.LoyaltyCardDbIds.CARD_ID + " TEXT not null," + + DBHelper.LoyaltyCardDbIds.BARCODE_TYPE + " TEXT not null)"); + } + + private int insertCardVersion1(SQLiteDatabase database, + final String store, final String cardId, + final String barcodeType) + { + ContentValues contentValues = new ContentValues(); + contentValues.put(DBHelper.LoyaltyCardDbIds.STORE, store); + contentValues.put(DBHelper.LoyaltyCardDbIds.CARD_ID, cardId); + contentValues.put(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE, barcodeType); + final long newId = database.insert(DBHelper.LoyaltyCardDbIds.TABLE, null, contentValues); + assertTrue(newId != -1); + return (int)newId; + } + + @Test + public void databaseUpgradeFromVersion1() + { + SQLiteDatabase database = db.getWritableDatabase(); + + // Setup the database as it appeared in revision 1 + setupDatabaseVersion1(database); + + // Insert a budget and transaction + int newCardId = insertCardVersion1(database, "store", "cardId", BarcodeFormat.UPC_A.toString()); + + // Upgrade database + db.onUpgrade(database, DBHelper.ORIGINAL_DATABASE_VERSION, DBHelper.DATABASE_VERSION); + + // Determine that the entries are queryable and the fields are correct + LoyaltyCard card = db.getLoyaltyCard(newCardId); + assertEquals("store", card.store); + assertEquals("cardId", card.cardId); + assertEquals(BarcodeFormat.UPC_A.toString(), card.barcodeType); + assertEquals("", card.note); + + database.close(); + } } diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index cbe51d0ec..17350d5b0 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -68,7 +68,8 @@ public class LoyaltyCardViewActivityTest * expected values */ private void saveLoyaltyCardWithArguments(final Activity activity, - final String store, final String cardId, + final String store, final String note, + final String cardId, final String barcodeType, boolean creatingNewCard) { @@ -83,12 +84,14 @@ public class LoyaltyCardViewActivityTest } final EditText storeField = (EditText) activity.findViewById(R.id.storeName); + final EditText noteField = (EditText) activity.findViewById(R.id.note); final EditText cardIdField = (EditText) activity.findViewById(R.id.cardId); final EditText barcodeTypeField = (EditText) activity.findViewById(R.id.barcodeType); final Button saveButton = (Button) activity.findViewById(R.id.saveButton); storeField.setText(store); + noteField.setText(note); cardIdField.setText(cardId); barcodeTypeField.setText(barcodeType); @@ -100,6 +103,7 @@ public class LoyaltyCardViewActivityTest LoyaltyCard card = db.getLoyaltyCard(1); assertEquals(store, card.store); + assertEquals(note, card.note); assertEquals(cardId, card.cardId); assertEquals(barcodeType, card.barcodeType); } @@ -154,13 +158,14 @@ public class LoyaltyCardViewActivityTest } } - private void checkAllFields(final Activity activity, boolean editMode, final String store, final String cardId, - final String barcodeType) + private void checkAllFields(final Activity activity, boolean editMode, final String store, + final String note, final String cardId, final String barcodeType) { int cardIdVisibility = cardId.isEmpty() ? View.GONE : View.VISIBLE; int captureVisibility = editMode ? View.VISIBLE : View.GONE; checkFieldProperties(activity, R.id.storeName, View.VISIBLE, editMode, store); + checkFieldProperties(activity, R.id.note, View.VISIBLE, editMode, note); checkFieldProperties(activity, R.id.cardId, View.VISIBLE, false, cardId); checkFieldProperties(activity, R.id.barcodeType, View.VISIBLE, false, barcodeType); checkFieldProperties(activity, R.id.captureButton, captureVisibility, true, null); @@ -183,7 +188,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); - checkAllFields(activity, true, "", "", ""); + checkAllFields(activity, true, "", "", "", ""); } @Test @@ -199,6 +204,7 @@ public class LoyaltyCardViewActivityTest assertEquals(0, db.getLoyaltyCardCount()); final EditText storeField = (EditText) activity.findViewById(R.id.storeName); + final EditText noteField = (EditText) activity.findViewById(R.id.note); final EditText cardIdField = (EditText) activity.findViewById(R.id.cardId); final Button saveButton = (Button) activity.findViewById(R.id.saveButton); @@ -210,6 +216,10 @@ public class LoyaltyCardViewActivityTest saveButton.performClick(); assertEquals(0, db.getLoyaltyCardCount()); + noteField.setText("note"); + saveButton.performClick(); + assertEquals(0, db.getLoyaltyCardCount()); + cardIdField.setText("cardId"); saveButton.performClick(); assertEquals(0, db.getLoyaltyCardCount()); @@ -244,15 +254,15 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); - checkAllFields(activity, true, "", "", ""); + checkAllFields(activity, true, "", "", "", ""); // Complete barcode capture successfully captureBarcodeWithResult(activity, R.id.captureButton, true); - checkAllFields(activity, true, "", BARCODE_DATA, BARCODE_TYPE); + checkAllFields(activity, true, "", "", BARCODE_DATA, BARCODE_TYPE); // Save and check the gift card - saveLoyaltyCardWithArguments(activity, "store", BARCODE_DATA, BARCODE_TYPE, true); + saveLoyaltyCardWithArguments(activity, "store", "note", BARCODE_DATA, BARCODE_TYPE, true); } @Test @@ -265,12 +275,12 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); - checkAllFields(activity, true, "", "", ""); + checkAllFields(activity, true, "", "", "", ""); // Complete barcode capture in failure captureBarcodeWithResult(activity, R.id.captureButton, false); - checkAllFields(activity, true, "", "", ""); + checkAllFields(activity, true, "", "", "", ""); } @Test @@ -283,12 +293,12 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); - checkAllFields(activity, true, "", "", ""); + checkAllFields(activity, true, "", "", "", ""); // Complete barcode capture successfully captureBarcodeWithResult(activity, R.id.captureButton, true); - checkAllFields(activity, true, "", BARCODE_DATA, BARCODE_TYPE); + checkAllFields(activity, true, "", "", BARCODE_DATA, BARCODE_TYPE); // Cancel the gift card creation final Button cancelButton = (Button) activity.findViewById(R.id.cancelButton); @@ -324,13 +334,13 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", BARCODE_DATA, BARCODE_TYPE); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE); activityController.start(); activityController.visible(); activityController.resume(); - checkAllFields(activity, true, "store", BARCODE_DATA, BARCODE_TYPE); + checkAllFields(activity, true, "store", "note", BARCODE_DATA, BARCODE_TYPE); } @Test @@ -340,13 +350,13 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", BARCODE_DATA, BARCODE_TYPE); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE); activityController.start(); activityController.visible(); activityController.resume(); - checkAllFields(activity, false, "store", BARCODE_DATA, BARCODE_TYPE); + checkAllFields(activity, false, "store", "note", BARCODE_DATA, BARCODE_TYPE); } @Test @@ -356,18 +366,18 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", EAN_BARCODE_DATA, EAN_BARCODE_TYPE); + db.insertLoyaltyCard("store", "note", EAN_BARCODE_DATA, EAN_BARCODE_TYPE); activityController.start(); activityController.visible(); activityController.resume(); - checkAllFields(activity, true, "store", EAN_BARCODE_DATA, EAN_BARCODE_TYPE); + checkAllFields(activity, true, "store", "note", EAN_BARCODE_DATA, EAN_BARCODE_TYPE); // Complete barcode capture successfully captureBarcodeWithResult(activity, R.id.captureButton, true); - checkAllFields(activity, true, "store", BARCODE_DATA, BARCODE_TYPE); + checkAllFields(activity, true, "store", "note", BARCODE_DATA, BARCODE_TYPE); } @Test @@ -377,18 +387,18 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", EAN_BARCODE_DATA, EAN_BARCODE_TYPE); + db.insertLoyaltyCard("store", "note", EAN_BARCODE_DATA, EAN_BARCODE_TYPE); activityController.start(); activityController.visible(); activityController.resume(); - checkAllFields(activity, true, "store", EAN_BARCODE_DATA, EAN_BARCODE_TYPE); + checkAllFields(activity, true, "store", "note", EAN_BARCODE_DATA, EAN_BARCODE_TYPE); // Complete barcode capture successfully captureBarcodeWithResult(activity, R.id.captureButton, true); - checkAllFields(activity, true, "store", BARCODE_DATA, BARCODE_TYPE); + checkAllFields(activity, true, "store", "note", BARCODE_DATA, BARCODE_TYPE); // Cancel the gift card creation final Button cancelButton = (Button) activity.findViewById(R.id.cancelButton); diff --git a/app/src/test/java/protect/card_locker/MainActivityTest.java b/app/src/test/java/protect/card_locker/MainActivityTest.java index 185142455..d345ba669 100644 --- a/app/src/test/java/protect/card_locker/MainActivityTest.java +++ b/app/src/test/java/protect/card_locker/MainActivityTest.java @@ -83,7 +83,7 @@ public class MainActivityTest assertEquals(0, list.getCount()); DBHelper db = new DBHelper(mainActivity); - db.insertLoyaltyCard("store", "cardId", BarcodeFormat.UPC_A.toString()); + db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString()); assertEquals(View.VISIBLE, helpText.getVisibility()); assertEquals(View.GONE, list.getVisibility()); From 61dec10e744c7a5fd479509975843bb526a29734 Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Sun, 20 Mar 2016 17:56:35 -0400 Subject: [PATCH 3/5] Do not overwrite store field when capturing barcode --- .../java/protect/card_locker/LoyaltyCardViewActivity.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index 937e93b61..3cc42d7cf 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -96,7 +96,10 @@ public class LoyaltyCardViewActivity extends AppCompatActivity { final LoyaltyCard loyaltyCard = db.getLoyaltyCard(loyaltyCardId); - storeField.setText(loyaltyCard.store); + if(storeField.getText().length() == 0) + { + storeField.setText(loyaltyCard.store); + } if(noteField.getText().length() == 0) { From f6f749de1c1e38aa1b17458279212063f6a5f689 Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Sun, 20 Mar 2016 17:57:00 -0400 Subject: [PATCH 4/5] Use multi exception catch for idential exceptions --- .../java/protect/card_locker/LoyaltyCardViewActivity.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index 3cc42d7cf..015a76d7d 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -191,11 +191,7 @@ public class LoyaltyCardViewActivity extends AppCompatActivity barcodeIdLayout.setVisibility(View.VISIBLE); barcodeImageLayout.setVisibility(View.VISIBLE); } - catch (WriterException e) - { - Log.e(TAG, "Failed to generate barcode", e); - } - catch(IllegalArgumentException e) + catch (WriterException | IllegalArgumentException e) { Log.e(TAG, "Failed to generate barcode", e); } From e0a77e9628ea8574c96d5a1f330363021d3c012e Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Sat, 9 Apr 2016 22:11:20 -0400 Subject: [PATCH 5/5] display store and note on card summary view Dutch translation provided by PanderMusubi Related issues: https://github.com/brarcher/loyalty-card-locker/issues/23 https://github.com/brarcher/loyalty-card-locker/issues/24 --- .../card_locker/LoyaltyCardCursorAdapter.java | 9 +++++++- .../main/res/layout/loyalty_card_layout.xml | 3 ++- app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-nl/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + .../LoyaltyCardCursorAdapterTest.java | 23 ++++++++++++++++++- 6 files changed, 35 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java b/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java index 4bec48ca0..85110ac16 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java @@ -36,7 +36,14 @@ class LoyaltyCardCursorAdapter extends CursorAdapter LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(cursor); // Populate fields with extracted properties - storeField.setText(loyaltyCard.store); + String storeAndNote = loyaltyCard.store; + if(loyaltyCard.note.isEmpty() == false) + { + String storeNameAndNoteFormat = view.getResources().getString(R.string.storeNameAndNoteFormat); + storeAndNote = String.format(storeNameAndNoteFormat, loyaltyCard.store, loyaltyCard.note); + } + + storeField.setText(storeAndNote); String cardIdFormat = view.getResources().getString(R.string.cardIdFormat); String cardIdLabel = view.getResources().getString(R.string.cardId); diff --git a/app/src/main/res/layout/loyalty_card_layout.xml b/app/src/main/res/layout/loyalty_card_layout.xml index 6679ab575..1232c0517 100644 --- a/app/src/main/res/layout/loyalty_card_layout.xml +++ b/app/src/main/res/layout/loyalty_card_layout.xml @@ -13,7 +13,8 @@ android:id="@+id/store" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_weight="1.0"/> + android:layout_weight="1.0" + android:maxLines="1"/> Nessun codice carta inserito %1$s: %2$s + Nota diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index c1e6b3831..659985c44 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -25,4 +25,5 @@ Geen kaart-ID toegevoegd %1$s: %2$s + Notitie diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cdd9d5482..c1de29597 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -26,4 +26,5 @@ No Card ID entered %1$s: %2$s + %1$s - %2$s \ No newline at end of file diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java index 7dcf7ab1a..8a2ff854f 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java @@ -51,7 +51,7 @@ public class LoyaltyCardCursorAdapterTest @Test - public void TestCursorAdapter() + public void TestCursorAdapterEmptyNote() { db.insertLoyaltyCard("store", "", "cardId", BarcodeFormat.UPC_A.toString()); LoyaltyCard card = db.getLoyaltyCard(1); @@ -67,4 +67,25 @@ public class LoyaltyCardCursorAdapterTest checkView(view, card.store, cardIdText); } + + @Test + public void TestCursorAdapterWithNote() + { + db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString()); + LoyaltyCard card = db.getLoyaltyCard(1); + + Cursor cursor = db.getLoyaltyCardCursor(); + cursor.moveToFirst(); + + View view = createView(cursor); + + final String storeNameAndNoteFormat = activity.getResources().getString(R.string.storeNameAndNoteFormat); + String storeAndNoteText = String.format(storeNameAndNoteFormat, card.store, card.note); + + final String cardIdLabel = activity.getResources().getString(R.string.cardId); + final String cardIdFormat = activity.getResources().getString(R.string.cardIdFormat); + String cardIdText = String.format(cardIdFormat, cardIdLabel, card.cardId); + + checkView(view, storeAndNoteText, cardIdText); + } }