From 981c0b9ca67d2339f5a390fc4877ef17cb1f4cfb Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Wed, 31 Mar 2021 22:25:38 +0200 Subject: [PATCH] Support setting a different barcode value than card ID --- CHANGELOG.md | 6 + .../java/protect/card_locker/DBHelper.java | 141 ++++++++++++-- .../protect/card_locker/ImportURIHelper.java | 29 ++- .../java/protect/card_locker/LoyaltyCard.java | 33 ++-- .../card_locker/LoyaltyCardEditActivity.java | 183 ++++++++++++------ .../card_locker/LoyaltyCardViewActivity.java | 17 +- .../importexport/CsvDatabaseImporter.java | 13 +- .../importexport/FidmeImporter.java | 4 +- .../importexport/VoucherVaultImporter.java | 12 +- .../res/layout/loyalty_card_edit_activity.xml | 44 ++++- app/src/main/res/values/strings.xml | 3 + .../protect/card_locker/DatabaseTest.java | 33 ++-- .../protect/card_locker/ImportExportTest.java | 44 ++--- .../protect/card_locker/ImportURITest.java | 10 +- .../LoyaltyCardCursorAdapterTest.java | 20 +- .../LoyaltyCardViewActivityTest.java | 176 +++++++++-------- .../protect/card_locker/MainActivityTest.java | 14 +- 17 files changed, 525 insertions(+), 257 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62dc08ee7..17e889253 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +Changes: + +- Add option to set a separate barcode value from card ID + ## v1.12 (2021-03-30) Changes: diff --git a/app/src/main/java/protect/card_locker/DBHelper.java b/app/src/main/java/protect/card_locker/DBHelper.java index c81cbcddf..140a786df 100644 --- a/app/src/main/java/protect/card_locker/DBHelper.java +++ b/app/src/main/java/protect/card_locker/DBHelper.java @@ -8,6 +8,8 @@ import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; import android.graphics.Color; +import com.google.zxing.BarcodeFormat; + import java.math.BigDecimal; import java.util.Currency; import java.util.Date; @@ -18,7 +20,7 @@ public class DBHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "Catima.db"; public static final int ORIGINAL_DATABASE_VERSION = 1; - public static final int DATABASE_VERSION = 8; + public static final int DATABASE_VERSION = 10; public static class LoyaltyCardDbGroups { @@ -39,6 +41,7 @@ public class DBHelper extends SQLiteOpenHelper public static final String HEADER_COLOR = "headercolor"; public static final String HEADER_TEXT_COLOR = "headertextcolor"; public static final String CARD_ID = "cardid"; + public static final String BARCODE_ID = "barcodeid"; public static final String BARCODE_TYPE = "barcodetype"; public static final String STAR_STATUS = "starstatus"; } @@ -73,9 +76,9 @@ public class DBHelper extends SQLiteOpenHelper LoyaltyCardDbIds.BALANCE + " TEXT not null DEFAULT '0'," + LoyaltyCardDbIds.BALANCE_TYPE + " TEXT," + LoyaltyCardDbIds.HEADER_COLOR + " INTEGER," + - LoyaltyCardDbIds.HEADER_TEXT_COLOR + " INTEGER," + LoyaltyCardDbIds.CARD_ID + " TEXT not null," + - LoyaltyCardDbIds.BARCODE_TYPE + " TEXT not null," + + LoyaltyCardDbIds.BARCODE_ID + " TEXT," + + LoyaltyCardDbIds.BARCODE_TYPE + " TEXT," + LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0' )"); // create associative table for cards in groups @@ -143,12 +146,113 @@ public class DBHelper extends SQLiteOpenHelper db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE + " ADD COLUMN " + LoyaltyCardDbIds.BALANCE_TYPE + " TEXT"); } + + if(oldVersion < 9 && newVersion >= 9) + { + db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE + + " ADD COLUMN " + LoyaltyCardDbIds.BARCODE_ID + " TEXT"); + } + + if(oldVersion < 10 && newVersion >= 10) + { + // SQLite doesn't support modify column + // So we need to create a temp column to make barcode type nullable + // Let's drop header text colour too while we're at it + // https://www.sqlite.org/faq.html#q11 + db.beginTransaction(); + + db.execSQL("CREATE TEMPORARY TABLE tmp (" + + LoyaltyCardDbIds.ID + " INTEGER primary key autoincrement," + + LoyaltyCardDbIds.STORE + " TEXT not null," + + LoyaltyCardDbIds.NOTE + " TEXT not null," + + LoyaltyCardDbIds.EXPIRY + " INTEGER," + + LoyaltyCardDbIds.BALANCE + " TEXT not null DEFAULT '0'," + + LoyaltyCardDbIds.BALANCE_TYPE + " TEXT," + + LoyaltyCardDbIds.HEADER_COLOR + " INTEGER," + + LoyaltyCardDbIds.CARD_ID + " TEXT not null," + + LoyaltyCardDbIds.BARCODE_ID + " TEXT," + + LoyaltyCardDbIds.BARCODE_TYPE + " TEXT," + + LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0' )"); + + db.execSQL("INSERT INTO tmp (" + + LoyaltyCardDbIds.ID + " ," + + LoyaltyCardDbIds.STORE + " ," + + LoyaltyCardDbIds.NOTE + " ," + + LoyaltyCardDbIds.EXPIRY + " ," + + LoyaltyCardDbIds.BALANCE + " ," + + LoyaltyCardDbIds.BALANCE_TYPE + " ," + + LoyaltyCardDbIds.HEADER_COLOR + " ," + + LoyaltyCardDbIds.CARD_ID + " ," + + LoyaltyCardDbIds.BARCODE_ID + " ," + + LoyaltyCardDbIds.BARCODE_TYPE + " ," + + LoyaltyCardDbIds.STAR_STATUS + ")" + + " SELECT " + + LoyaltyCardDbIds.ID + " ," + + LoyaltyCardDbIds.STORE + " ," + + LoyaltyCardDbIds.NOTE + " ," + + LoyaltyCardDbIds.EXPIRY + " ," + + LoyaltyCardDbIds.BALANCE + " ," + + LoyaltyCardDbIds.BALANCE_TYPE + " ," + + LoyaltyCardDbIds.HEADER_COLOR + " ," + + LoyaltyCardDbIds.CARD_ID + " ," + + LoyaltyCardDbIds.BARCODE_ID + " ," + + " NULLIF(" + LoyaltyCardDbIds.BARCODE_TYPE + ",'') ," + + LoyaltyCardDbIds.STAR_STATUS + + " FROM " + LoyaltyCardDbIds.TABLE); + + db.execSQL("DROP TABLE " + LoyaltyCardDbIds.TABLE); + + db.execSQL("create table " + LoyaltyCardDbIds.TABLE + "(" + + LoyaltyCardDbIds.ID + " INTEGER primary key autoincrement," + + LoyaltyCardDbIds.STORE + " TEXT not null," + + LoyaltyCardDbIds.NOTE + " TEXT not null," + + LoyaltyCardDbIds.EXPIRY + " INTEGER," + + LoyaltyCardDbIds.BALANCE + " TEXT not null DEFAULT '0'," + + LoyaltyCardDbIds.BALANCE_TYPE + " TEXT," + + LoyaltyCardDbIds.HEADER_COLOR + " INTEGER," + + LoyaltyCardDbIds.CARD_ID + " TEXT not null," + + LoyaltyCardDbIds.BARCODE_ID + " TEXT," + + LoyaltyCardDbIds.BARCODE_TYPE + " TEXT," + + LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0' )"); + + db.execSQL("INSERT INTO " + LoyaltyCardDbIds.TABLE + "(" + + LoyaltyCardDbIds.ID + " ," + + LoyaltyCardDbIds.STORE + " ," + + LoyaltyCardDbIds.NOTE + " ," + + LoyaltyCardDbIds.EXPIRY + " ," + + LoyaltyCardDbIds.BALANCE + " ," + + LoyaltyCardDbIds.BALANCE_TYPE + " ," + + LoyaltyCardDbIds.HEADER_COLOR + " ," + + LoyaltyCardDbIds.CARD_ID + " ," + + LoyaltyCardDbIds.BARCODE_ID + " ," + + LoyaltyCardDbIds.BARCODE_TYPE + " ," + + LoyaltyCardDbIds.STAR_STATUS + ")" + + " SELECT " + + LoyaltyCardDbIds.ID + " ," + + LoyaltyCardDbIds.STORE + " ," + + LoyaltyCardDbIds.NOTE + " ," + + LoyaltyCardDbIds.EXPIRY + " ," + + LoyaltyCardDbIds.BALANCE + " ," + + LoyaltyCardDbIds.BALANCE_TYPE + " ," + + LoyaltyCardDbIds.HEADER_COLOR + " ," + + LoyaltyCardDbIds.CARD_ID + " ," + + LoyaltyCardDbIds.BARCODE_ID + " ," + + LoyaltyCardDbIds.BARCODE_TYPE + " ," + + LoyaltyCardDbIds.STAR_STATUS + + " FROM tmp"); + + db.execSQL("DROP TABLE tmp"); + + db.setTransactionSuccessful(); + db.endTransaction(); + } } public long insertLoyaltyCard(final String store, final String note, final Date expiry, final BigDecimal balance, final Currency balanceType, - final String cardId, final String barcodeType, - final Integer headerColor, final int starStatus) + final String cardId, final String barcodeId, + final BarcodeFormat barcodeType, final Integer headerColor, + final int starStatus) { SQLiteDatabase db = getWritableDatabase(); ContentValues contentValues = new ContentValues(); @@ -158,9 +262,9 @@ public class DBHelper extends SQLiteOpenHelper contentValues.put(LoyaltyCardDbIds.BALANCE, balance.toString()); contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType != null ? balanceType.getCurrencyCode() : null); contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId); - contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType); + contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId); + contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.toString() : null); contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor); - contentValues.put(LoyaltyCardDbIds.HEADER_TEXT_COLOR, Color.WHITE); contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus); final long newId = db.insert(LoyaltyCardDbIds.TABLE, null, contentValues); return newId; @@ -169,8 +273,8 @@ public class DBHelper extends SQLiteOpenHelper public boolean insertLoyaltyCard(final SQLiteDatabase db, final String store, final String note, final Date expiry, final BigDecimal balance, final Currency balanceType, final String cardId, - final String barcodeType, final Integer headerColor, - final int starStatus) + final String barcodeId, final BarcodeFormat barcodeType, + final Integer headerColor, final int starStatus) { ContentValues contentValues = new ContentValues(); contentValues.put(LoyaltyCardDbIds.STORE, store); @@ -179,9 +283,9 @@ public class DBHelper extends SQLiteOpenHelper contentValues.put(LoyaltyCardDbIds.BALANCE, balance.toString()); contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType != null ? balanceType.getCurrencyCode() : null); contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId); - contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType); + contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId); + contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.toString() : null); contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor); - contentValues.put(LoyaltyCardDbIds.HEADER_TEXT_COLOR, Color.WHITE); contentValues.put(LoyaltyCardDbIds.STAR_STATUS,starStatus); final long newId = db.insert(LoyaltyCardDbIds.TABLE, null, contentValues); return (newId != -1); @@ -190,8 +294,8 @@ public class DBHelper extends SQLiteOpenHelper public boolean insertLoyaltyCard(final SQLiteDatabase db, final int id, final String store, final String note, final Date expiry, final BigDecimal balance, final Currency balanceType, final String cardId, - final String barcodeType, final Integer headerColor, - final int starStatus) + final String barcodeId, final BarcodeFormat barcodeType, + final Integer headerColor, final int starStatus) { ContentValues contentValues = new ContentValues(); contentValues.put(LoyaltyCardDbIds.ID, id); @@ -201,9 +305,9 @@ public class DBHelper extends SQLiteOpenHelper contentValues.put(LoyaltyCardDbIds.BALANCE, balance.toString()); contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType != null ? balanceType.getCurrencyCode() : null); contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId); - contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType); + contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId); + contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.toString() : null); contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor); - contentValues.put(LoyaltyCardDbIds.HEADER_TEXT_COLOR, Color.WHITE); contentValues.put(LoyaltyCardDbIds.STAR_STATUS,starStatus); final long newId = db.insert(LoyaltyCardDbIds.TABLE, null, contentValues); return (newId != -1); @@ -212,7 +316,8 @@ public class DBHelper extends SQLiteOpenHelper public boolean updateLoyaltyCard(final int id, final String store, final String note, final Date expiry, final BigDecimal balance, final Currency balanceType, final String cardId, - final String barcodeType, final Integer headerColor) + final String barcodeId, final BarcodeFormat barcodeType, + final Integer headerColor) { SQLiteDatabase db = getWritableDatabase(); ContentValues contentValues = new ContentValues(); @@ -222,9 +327,9 @@ public class DBHelper extends SQLiteOpenHelper contentValues.put(LoyaltyCardDbIds.BALANCE, balance.toString()); contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType != null ? balanceType.getCurrencyCode() : null); contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId); - contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType); + contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId); + contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.toString() : null); contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor); - contentValues.put(LoyaltyCardDbIds.HEADER_TEXT_COLOR, Color.WHITE); int rowsUpdated = db.update(LoyaltyCardDbIds.TABLE, contentValues, LoyaltyCardDbIds.ID + "=?", new String[]{Integer.toString(id)}); diff --git a/app/src/main/java/protect/card_locker/ImportURIHelper.java b/app/src/main/java/protect/card_locker/ImportURIHelper.java index 54add450f..ed2d7f1df 100644 --- a/app/src/main/java/protect/card_locker/ImportURIHelper.java +++ b/app/src/main/java/protect/card_locker/ImportURIHelper.java @@ -3,6 +3,9 @@ package protect.card_locker; import android.content.Context; import android.content.Intent; import android.net.Uri; + +import com.google.zxing.BarcodeFormat; + import java.io.InvalidObjectException; import java.math.BigDecimal; import java.util.Currency; @@ -15,6 +18,7 @@ public class ImportURIHelper { private static final String BALANCE = DBHelper.LoyaltyCardDbIds.BALANCE; private static final String BALANCE_TYPE = DBHelper.LoyaltyCardDbIds.BALANCE_TYPE; private static final String CARD_ID = DBHelper.LoyaltyCardDbIds.CARD_ID; + private static final String BARCODE_ID = DBHelper.LoyaltyCardDbIds.BARCODE_ID; private static final String BARCODE_TYPE = DBHelper.LoyaltyCardDbIds.BARCODE_TYPE; private static final String HEADER_COLOR = DBHelper.LoyaltyCardDbIds.HEADER_COLOR; @@ -46,17 +50,23 @@ public class ImportURIHelper { try { // These values are allowed to be null + BarcodeFormat barcodeType = null; Date expiry = null; BigDecimal balance = new BigDecimal("0"); Currency balanceType = null; Integer headerColor = null; - Integer headerTextColor = null; String store = uri.getQueryParameter(STORE); String note = uri.getQueryParameter(NOTE); String cardId = uri.getQueryParameter(CARD_ID); - String barcodeType = uri.getQueryParameter(BARCODE_TYPE); - if (store == null || note == null || cardId == null || barcodeType == null) throw new InvalidObjectException("Not a valid import URI"); + String barcodeId = uri.getQueryParameter(BARCODE_ID); + if (store == null || note == null || cardId == null) throw new InvalidObjectException("Not a valid import URI"); + + String unparsedBarcodeType = uri.getQueryParameter(BARCODE_TYPE); + if(unparsedBarcodeType != null && !unparsedBarcodeType.equals("")) + { + barcodeType = BarcodeFormat.valueOf(unparsedBarcodeType); + } String unparsedBalance = uri.getQueryParameter(BALANCE); if(unparsedBalance != null && !unparsedBalance.equals("")) @@ -80,7 +90,7 @@ public class ImportURIHelper { headerColor = Integer.parseInt(unparsedHeaderColor); } - return new LoyaltyCard(-1, store, note, expiry, balance, balanceType, cardId, barcodeType, headerColor, headerTextColor, 0); + return new LoyaltyCard(-1, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, 0); } catch (NullPointerException | NumberFormatException ex) { throw new InvalidObjectException("Not a valid import URI"); } @@ -102,9 +112,14 @@ public class ImportURIHelper { uriBuilder.appendQueryParameter(EXPIRY, String.valueOf(loyaltyCard.expiry.getTime())); } uriBuilder.appendQueryParameter(CARD_ID, loyaltyCard.cardId); - uriBuilder.appendQueryParameter(BARCODE_TYPE, loyaltyCard.barcodeType); - if(loyaltyCard.headerColor != null) - { + if(loyaltyCard.barcodeId != null) { + uriBuilder.appendQueryParameter(BARCODE_ID, loyaltyCard.barcodeId); + } + + if(loyaltyCard.barcodeType != null) { + uriBuilder.appendQueryParameter(BARCODE_TYPE, loyaltyCard.barcodeType.toString()); + } + if(loyaltyCard.headerColor != null) { uriBuilder.appendQueryParameter(HEADER_COLOR, loyaltyCard.headerColor.toString()); } //StarStatus will not be exported diff --git a/app/src/main/java/protect/card_locker/LoyaltyCard.java b/app/src/main/java/protect/card_locker/LoyaltyCard.java index 64461a0e1..e2fc98473 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCard.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCard.java @@ -2,6 +2,8 @@ package protect.card_locker; import android.database.Cursor; +import com.google.zxing.BarcodeFormat; + import java.math.BigDecimal; import java.util.Currency; import java.util.Date; @@ -17,19 +19,20 @@ public class LoyaltyCard public final BigDecimal balance; public final Currency balanceType; public final String cardId; - public final String barcodeType; + + @Nullable + public final String barcodeId; + + public final BarcodeFormat barcodeType; @Nullable public final Integer headerColor; - @Nullable - public final Integer headerTextColor; - public final int starStatus; public LoyaltyCard(final int id, final String store, final String note, final Date expiry, final BigDecimal balance, final Currency balanceType, final String cardId, - final String barcodeType, final Integer headerColor, final Integer headerTextColor, + final String barcodeId, final BarcodeFormat barcodeType, final Integer headerColor, final int starStatus) { this.id = id; @@ -39,9 +42,9 @@ public class LoyaltyCard this.balance = balance; this.balanceType = balanceType; this.cardId = cardId; + this.barcodeId = barcodeId; this.barcodeType = barcodeType; this.headerColor = headerColor; - this.headerTextColor = headerTextColor; this.starStatus = starStatus; } @@ -53,17 +56,22 @@ public class LoyaltyCard long expiryLong = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXPIRY)); BigDecimal balance = new BigDecimal(cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE))); String cardId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID)); - String barcodeType = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE)); + String barcodeId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ID)); int starred = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STAR_STATUS)); + int barcodeTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE); int balanceTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE); int headerColorColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR); - int headerTextColorColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR); + BarcodeFormat barcodeType = null; Currency balanceType = null; Date expiry = null; Integer headerColor = null; - Integer headerTextColor = null; + + if (cursor.isNull(barcodeTypeColumn) == false) + { + barcodeType = BarcodeFormat.valueOf(cursor.getString(barcodeTypeColumn)); + } if (cursor.isNull(balanceTypeColumn) == false) { @@ -80,11 +88,6 @@ public class LoyaltyCard headerColor = cursor.getInt(headerColorColumn); } - if(cursor.isNull(headerTextColorColumn) == false) - { - headerTextColor = cursor.getInt(headerTextColorColumn); - } - - return new LoyaltyCard(id, store, note, expiry, balance, balanceType, cardId, barcodeType, headerColor, headerTextColor, starred); + return new LoyaltyCard(id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starred); } } diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index 095b859d4..1b57605ea 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -24,6 +24,7 @@ import androidx.fragment.app.DialogFragment; import android.os.LocaleList; import android.text.Editable; +import android.text.InputType; import android.text.TextWatcher; import android.util.Log; import android.view.Menu; @@ -31,6 +32,7 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewTreeObserver; +import android.view.WindowManager; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.Button; @@ -72,19 +74,19 @@ public class LoyaltyCardEditActivity extends AppCompatActivity EditText balanceField; AutoCompleteTextView balanceCurrencyField; TextView cardIdFieldView; + AutoCompleteTextView barcodeIdField; AutoCompleteTextView barcodeTypeField; ImageView barcodeImage; View barcodeImageLayout; View barcodeCaptureLayout; - Button captureButton; - Button importImageButton; Button enterButton; int loyaltyCardId; boolean updateLoyaltyCard; - String barcodeType; String cardId; + String barcodeId; + String barcodeType; Uri importLoyaltyCardUri = null; Integer headingColorValue = null; @@ -106,13 +108,14 @@ public class LoyaltyCardEditActivity extends AppCompatActivity loyaltyCardId = b != null ? b.getInt("id") : 0; updateLoyaltyCard = b != null && b.getBoolean("update", false); - barcodeType = b != null ? b.getString("barcodeType") : null; cardId = b != null ? b.getString("cardId") : null; + barcodeId = b != null ? b.getString("barcodeId") : null; + barcodeType = b != null ? b.getString("barcodeType") : null; importLoyaltyCardUri = intent.getData(); Log.d(TAG, "View activity: id=" + loyaltyCardId - + ", updateLoyaltyCard=" + Boolean.toString(updateLoyaltyCard)); + + ", updateLoyaltyCard=" + updateLoyaltyCard); } @Override @@ -147,6 +150,7 @@ public class LoyaltyCardEditActivity extends AppCompatActivity balanceField = findViewById(R.id.balanceField); balanceCurrencyField = findViewById(R.id.balanceCurrencyField); cardIdFieldView = findViewById(R.id.cardIdView); + barcodeIdField = findViewById(R.id.barcodeIdField); barcodeTypeField = findViewById(R.id.barcodeTypeField); barcodeImage = findViewById(R.id.barcode); barcodeImageLayout = findViewById(R.id.barcodeLayout); @@ -302,14 +306,8 @@ public class LoyaltyCardEditActivity extends AppCompatActivity public void onTextChanged(CharSequence s, int start, int before, int count) { hasChanged = true; - String formatString = barcodeTypeField.getText().toString(); - - if (!formatString.isEmpty()) { - if (formatString.equals(getString(R.string.noBarcode))) { - hideBarcode(); - } else { - generateBarcode(s.toString(), BarcodeFormat.valueOf(formatString)); - } + if (!s.toString().isEmpty()) { + generateOrHideBarcode(); } } @@ -317,6 +315,66 @@ public class LoyaltyCardEditActivity extends AppCompatActivity public void afterTextChanged(Editable s) { } }); + barcodeIdField.addTextChangedListener(new TextWatcher() { + CharSequence lastValue; + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + lastValue = s; + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + hasChanged = true; + + if (s.toString().equals(getString(R.string.sameAsCardId))) { + barcodeIdField.setTag(null); + } else if (s.toString().equals(getString(R.string.setBarcodeId))) { + if (!lastValue.toString().equals(getString(R.string.setBarcodeId))) { + barcodeIdField.setText(lastValue); + }; + + AlertDialog.Builder builder = new AlertDialog.Builder(LoyaltyCardEditActivity.this); + builder.setTitle(R.string.setBarcodeId); + final EditText input = new EditText(LoyaltyCardEditActivity.this); + input.setInputType(InputType.TYPE_CLASS_TEXT); + if (barcodeIdField.getTag() != null) { + input.setText((String) barcodeIdField.getTag()); + } + builder.setView(input); + + builder.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + barcodeIdField.setTag(input.getText().toString()); + barcodeIdField.setText(input.getText()); + } + }); + builder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.cancel(); + } + }); + AlertDialog dialog = builder.create(); + dialog.show(); + dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); + input.requestFocus(); + } + + generateOrHideBarcode(); + } + + @Override + public void afterTextChanged(Editable s) { + ArrayList barcodeIdList = new ArrayList<>(); + barcodeIdList.add(0, getString(R.string.sameAsCardId)); + barcodeIdList.add(1, getString(R.string.setBarcodeId)); + ArrayAdapter barcodeIdAdapter = new ArrayAdapter<>(LoyaltyCardEditActivity.this, android.R.layout.select_dialog_item, barcodeIdList); + barcodeIdField.setAdapter(barcodeIdAdapter); + } + }); + barcodeTypeField.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @@ -327,10 +385,14 @@ public class LoyaltyCardEditActivity extends AppCompatActivity if (!s.toString().isEmpty()) { if (s.toString().equals(getString(R.string.noBarcode))) { - hideBarcode(); + barcodeTypeField.setTag(null); } else { - generateBarcode(cardIdFieldView.getText().toString(), BarcodeFormat.valueOf(s.toString())); + try { + barcodeTypeField.setTag(BarcodeFormat.valueOf(s.toString())); + } catch (IllegalArgumentException e) {} } + + generateOrHideBarcode(); } } @@ -378,6 +440,8 @@ public class LoyaltyCardEditActivity extends AppCompatActivity balanceField.setTag(null); balanceField.setText(""); cardIdFieldView.setText(""); + barcodeIdField.setTag(null); + barcodeIdField.setText(""); barcodeTypeField.setText(""); } @@ -433,9 +497,15 @@ public class LoyaltyCardEditActivity extends AppCompatActivity cardIdFieldView.setText(loyaltyCard.cardId); } + if(barcodeIdField.getText().length() == 0) + { + barcodeIdField.setTag(loyaltyCard.barcodeId); + barcodeIdField.setText(loyaltyCard.barcodeId != null ? loyaltyCard.barcodeId : getString(R.string.sameAsCardId)); + } + if(barcodeTypeField.getText().length() == 0) { - barcodeTypeField.setText(loyaltyCard.barcodeType.isEmpty() ? getString(R.string.noBarcode) : loyaltyCard.barcodeType); + barcodeTypeField.setText(loyaltyCard.barcodeType != null ? loyaltyCard.barcodeType.toString() : getString(R.string.noBarcode)); } if(headingColorValue == null) @@ -469,7 +539,9 @@ public class LoyaltyCardEditActivity extends AppCompatActivity balanceCurrencyField.setTag(importCard.balanceType); formatBalanceCurrencyField(importCard.balanceType); cardIdFieldView.setText(importCard.cardId); - barcodeTypeField.setText(importCard.barcodeType); + barcodeIdField.setTag(importCard.barcodeId); + barcodeIdField.setText(importCard.barcodeId != null ? importCard.barcodeId : getString(R.string.sameAsCardId)); + barcodeTypeField.setText(importCard.barcodeType != null ? importCard.barcodeType.toString() : getString(R.string.noBarcode)); headingColorValue = importCard.headerColor; } else @@ -477,6 +549,8 @@ public class LoyaltyCardEditActivity extends AppCompatActivity setTitle(R.string.addCardTitle); expiryField.setTag(null); expiryField.setText(getString(R.string.never)); + barcodeIdField.setTag(null); + barcodeIdField.setText(getString(R.string.sameAsCardId)); balanceField.setTag(new BigDecimal("0")); balanceCurrencyField.setTag(null); formatBalanceCurrencyField(null); @@ -535,31 +609,27 @@ public class LoyaltyCardEditActivity extends AppCompatActivity // Update from intent if (barcodeType != null) { - barcodeTypeField.setText(barcodeType.isEmpty() ? getString(R.string.noBarcode) : barcodeType); - barcodeType = null; + try { + barcodeTypeField.setText(BarcodeFormat.valueOf(barcodeType).name()); + } catch (IllegalArgumentException e) { + barcodeTypeField.setText(getString(R.string.noBarcode)); + } } + if (cardId != null) { cardIdFieldView.setText(cardId); - cardId = null; } - if(cardIdFieldView.getText().length() > 0 && barcodeTypeField.getText().length() > 0) - { - String formatString = barcodeTypeField.getText().toString(); - - if(formatString.isEmpty() || formatString.equals(getString(R.string.noBarcode))) - { - hideBarcode(); - } - else - { - final BarcodeFormat format = BarcodeFormat.valueOf(formatString); - final String cardIdString = cardIdFieldView.getText().toString(); - - generateBarcode(cardIdString, format); + if (barcodeId != null) { + if (!barcodeId.isEmpty()) { + barcodeIdField.setText(barcodeId); + } else { + barcodeIdField.setText(getString(R.string.sameAsCardId)); } } + generateOrHideBarcode(); + enterButton.setOnClickListener(new EditCardIdAndBarcode()); barcodeImage.setOnClickListener(new EditCardIdAndBarcode()); @@ -727,14 +797,8 @@ public class LoyaltyCardEditActivity extends AppCompatActivity BigDecimal balance = (BigDecimal) balanceField.getTag(); Currency balanceType = balanceCurrencyField.getTag() != null ? ((Currency) balanceCurrencyField.getTag()) : null; String cardId = cardIdFieldView.getText().toString(); - String barcodeType = barcodeTypeField.getText().toString(); - - // We do not want to save the no barcode string to the database - // it is simply an empty there for no barcode - if(barcodeType.equals(getString(R.string.noBarcode))) - { - barcodeType = ""; - } + String barcodeId = (String) barcodeIdField.getTag(); + BarcodeFormat barcodeType = (BarcodeFormat) barcodeTypeField.getTag(); if(store.isEmpty()) { @@ -763,12 +827,12 @@ public class LoyaltyCardEditActivity extends AppCompatActivity if(updateLoyaltyCard) { //update of "starStatus" not necessary, since it cannot be changed in this activity (only in ViewActivity) - db.updateLoyaltyCard(loyaltyCardId, store, note, expiry, balance, balanceType, cardId, barcodeType, headingColorValue); + db.updateLoyaltyCard(loyaltyCardId, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headingColorValue); Log.i(TAG, "Updated " + loyaltyCardId + " to " + cardId); } else { - loyaltyCardId = (int)db.insertLoyaltyCard(store, note, expiry, balance, balanceType, cardId, barcodeType, headingColorValue, 0); + loyaltyCardId = (int)db.insertLoyaltyCard(store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headingColorValue, 0); } db.setLoyaltyCardGroups(loyaltyCardId, selectedGroups); @@ -846,8 +910,11 @@ public class LoyaltyCardEditActivity extends AppCompatActivity BarcodeValues barcodeValues = Utils.parseSetBarcodeActivityResult(requestCode, resultCode, intent, this); - barcodeType = barcodeValues.format(); - cardId = barcodeValues.content(); + if (resultCode == RESULT_OK) { + cardId = barcodeValues.content(); + barcodeType = barcodeValues.format(); + barcodeId = ""; + } onResume(); } @@ -860,7 +927,18 @@ public class LoyaltyCardEditActivity extends AppCompatActivity barcodeImageLayout.setVisibility(View.GONE); } - private void generateBarcode(final String cardId, final BarcodeFormat barcodeFormat) { + private void generateOrHideBarcode() { + String cardIdString = barcodeIdField.getTag() != null ? barcodeIdField.getTag().toString() : cardIdFieldView.getText().toString(); + BarcodeFormat barcodeFormat = (BarcodeFormat) barcodeTypeField.getTag(); + + if (barcodeFormat == null || cardIdString.isEmpty()) { + hideBarcode(); + } else { + generateBarcode(cardIdString, barcodeFormat); + } + } + + private void generateBarcode(String cardIdString, BarcodeFormat barcodeFormat) { if (barcodeImage.getHeight() == 0) { Log.d(TAG, "ImageView size is not known known at start, waiting for load"); // The size of the ImageView is not yet available as it has not @@ -872,12 +950,12 @@ public class LoyaltyCardEditActivity extends AppCompatActivity barcodeImage.getViewTreeObserver().removeOnGlobalLayoutListener(this); Log.d(TAG, "ImageView size now known"); - new BarcodeImageWriterTask(barcodeImage, cardId, barcodeFormat).execute(); + new BarcodeImageWriterTask(barcodeImage, cardIdString, barcodeFormat).execute(); } }); } else { Log.d(TAG, "ImageView size known known, creating barcode"); - new BarcodeImageWriterTask(barcodeImage, cardId, barcodeFormat).execute(); + new BarcodeImageWriterTask(barcodeImage, cardIdString, barcodeFormat).execute(); } showBarcode(); @@ -916,12 +994,7 @@ public class LoyaltyCardEditActivity extends AppCompatActivity barcodePart.setVisibility(View.VISIBLE); // Redraw barcode due to size change (Visibility.GONE sets it to 0) - String formatString = barcodeTypeField.getText().toString(); - if (formatString.isEmpty() || formatString.equals(getString(R.string.noBarcode))) { - hideBarcode(); - } else { - generateBarcode(cardIdFieldView.getText().toString(), BarcodeFormat.valueOf(formatString)); - } + generateOrHideBarcode(); } else { throw new UnsupportedOperationException(); } diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index 6ae355190..332edf417 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -71,6 +71,7 @@ public class LoyaltyCardViewActivity extends AppCompatActivity Settings settings; String cardIdString; + String barcodeIdString; BarcodeFormat format; FloatingActionButton editButton; @@ -268,9 +269,9 @@ public class LoyaltyCardViewActivity extends AppCompatActivity setupOrientation(); - String formatString = loyaltyCard.barcodeType; - format = !formatString.isEmpty() ? BarcodeFormat.valueOf(formatString) : null; + format = loyaltyCard.barcodeType; cardIdString = loyaltyCard.cardId; + barcodeIdString = loyaltyCard.barcodeId; cardIdFieldView.setText(loyaltyCard.cardId); TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(cardIdFieldView, @@ -398,7 +399,11 @@ public class LoyaltyCardViewActivity extends AppCompatActivity else { Log.d(TAG, "ImageView size known known, creating barcode"); - new BarcodeImageWriterTask(barcodeImage, cardIdString, format).execute(); + new BarcodeImageWriterTask( + barcodeImage, + barcodeIdString != null ? barcodeIdString : cardIdString, + format) + .execute(); } // Force redraw fullscreen state @@ -568,7 +573,11 @@ public class LoyaltyCardViewActivity extends AppCompatActivity barcodeImage.getViewTreeObserver().removeOnGlobalLayoutListener(this); Log.d(TAG, "ImageView size now known"); - new BarcodeImageWriterTask(barcodeImage, cardIdString, format).execute(); + new BarcodeImageWriterTask( + barcodeImage, + barcodeIdString != null ? barcodeIdString : cardIdString, + format) + .execute(); } }); }; diff --git a/app/src/main/java/protect/card_locker/importexport/CsvDatabaseImporter.java b/app/src/main/java/protect/card_locker/importexport/CsvDatabaseImporter.java index 2054521c7..10f68be27 100644 --- a/app/src/main/java/protect/card_locker/importexport/CsvDatabaseImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/CsvDatabaseImporter.java @@ -2,6 +2,8 @@ package protect.card_locker.importexport; import android.database.sqlite.SQLiteDatabase; +import com.google.zxing.BarcodeFormat; + import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; @@ -250,7 +252,14 @@ public class CsvDatabaseImporter implements DatabaseImporter throw new FormatException("No card ID listed, but is required"); } - String barcodeType = CSVHelpers.extractString(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE, record, ""); + String barcodeId = CSVHelpers.extractString(DBHelper.LoyaltyCardDbIds.BARCODE_ID, record, ""); + + BarcodeFormat barcodeType = null; + String unparsedBarcodeType = CSVHelpers.extractString(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE, record, ""); + if(!unparsedBarcodeType.isEmpty()) + { + barcodeType = BarcodeFormat.valueOf(unparsedBarcodeType); + } Integer headerColor = null; @@ -267,7 +276,7 @@ public class CsvDatabaseImporter implements DatabaseImporter // We catch this exception so we can still import old backups } if (starStatus != 1) starStatus = 0; - helper.insertLoyaltyCard(database, id, store, note, expiry, balance, balanceType, cardId, barcodeType, headerColor, starStatus); + helper.insertLoyaltyCard(database, id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus); } /** diff --git a/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java b/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java index 1f57cf1fd..05fa9051e 100644 --- a/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java @@ -137,11 +137,11 @@ public class FidmeImporter implements DatabaseImporter // Sadly, Fidme exports don't contain the card type // I guess they have an online DB of all the different companies and what type they use // TODO: Hook this into our own loyalty card DB if we ever get one - String barcodeType = ""; + BarcodeFormat barcodeType = null; // No favourite data in the export either int starStatus = 0; - helper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, barcodeType, null, starStatus); + helper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, starStatus); } } \ No newline at end of file diff --git a/app/src/main/java/protect/card_locker/importexport/VoucherVaultImporter.java b/app/src/main/java/protect/card_locker/importexport/VoucherVaultImporter.java index 30c6bcb66..bb53619dc 100644 --- a/app/src/main/java/protect/card_locker/importexport/VoucherVaultImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/VoucherVaultImporter.java @@ -71,21 +71,21 @@ public class VoucherVaultImporter implements DatabaseImporter String cardId = jsonCard.getString("code"); - String barcodeType = null; + BarcodeFormat barcodeType = null; String codeTypeFromJSON = jsonCard.getString("codeType"); switch (codeTypeFromJSON) { case "CODE128": - barcodeType = BarcodeFormat.CODE_128.name(); + barcodeType = BarcodeFormat.CODE_128; break; case "CODE39": - barcodeType = BarcodeFormat.CODE_39.name(); + barcodeType = BarcodeFormat.CODE_39; break; case "EAN13": - barcodeType = BarcodeFormat.EAN_13.name(); + barcodeType = BarcodeFormat.EAN_13; break; case "QR": - barcodeType = BarcodeFormat.QR_CODE.name(); + barcodeType = BarcodeFormat.QR_CODE; break; case "TEXT": break; @@ -122,7 +122,7 @@ public class VoucherVaultImporter implements DatabaseImporter throw new FormatException("Unknown colour type foun: " + colorFromJSON); } - db.insertLoyaltyCard(store, "", expiry, balance, balanceType, cardId, barcodeType, headerColor, 0); + db.insertLoyaltyCard(store, "", expiry, balance, balanceType, cardId, null, barcodeType, headerColor, 0); } database.setTransactionSuccessful(); diff --git a/app/src/main/res/layout/loyalty_card_edit_activity.xml b/app/src/main/res/layout/loyalty_card_edit_activity.xml index 50f850b63..cd156ebd9 100644 --- a/app/src/main/res/layout/loyalty_card_edit_activity.xml +++ b/app/src/main/res/layout/loyalty_card_edit_activity.xml @@ -96,6 +96,30 @@ + + + + + + + + + + - + - + + android:hint="@string/barcodeId" + android:labelFor="@+id/barcodeIdView"> - + android:inputType="none"/> - + Please select your Loyalty Card Keychain export file. It is most likely named LoyaltyCardKeychain.csv.\n\nA Loyalty Card Keychain export file can be created by going to the Import/Export menu and pressing "Export". Import from Voucher Vault Please select your Voucher Vault export file. It is most likely named vouchervault.json.\n\nA Voucher Vault export file can be created by pressing "Export". + Barcode value + Same as card ID + Set barcode value diff --git a/app/src/test/java/protect/card_locker/DatabaseTest.java b/app/src/test/java/protect/card_locker/DatabaseTest.java index a1f6b11da..287a3bc02 100644 --- a/app/src/test/java/protect/card_locker/DatabaseTest.java +++ b/app/src/test/java/protect/card_locker/DatabaseTest.java @@ -45,7 +45,7 @@ public class DatabaseTest public void addRemoveOneGiftCard() { assertEquals(0, db.getLoyaltyCardCount()); - long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, 0); + long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, DEFAULT_HEADER_COLOR, 0); boolean result = (id != -1); assertTrue(result); assertEquals(1, db.getLoyaltyCardCount()); @@ -59,7 +59,7 @@ public class DatabaseTest assertEquals(null, loyaltyCard.balanceType); assertEquals("cardId", loyaltyCard.cardId); assertEquals(0, loyaltyCard.starStatus); - assertEquals(BarcodeFormat.UPC_A.toString(), loyaltyCard.barcodeType); + assertEquals(BarcodeFormat.UPC_A, loyaltyCard.barcodeType); result = db.deleteLoyaltyCard(1); assertTrue(result); @@ -70,12 +70,12 @@ public class DatabaseTest @Test public void updateGiftCard() { - long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, 0); + long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, DEFAULT_HEADER_COLOR, 0); boolean result = (id != -1); assertTrue(result); assertEquals(1, db.getLoyaltyCardCount()); - result = db.updateLoyaltyCard(1, "store1", "note1", null, new BigDecimal("10.00"), Currency.getInstance("EUR"), "cardId1", BarcodeFormat.AZTEC.toString(), DEFAULT_HEADER_COLOR); + result = db.updateLoyaltyCard(1, "store1", "note1", null, new BigDecimal("10.00"), Currency.getInstance("EUR"), "cardId1", null, BarcodeFormat.AZTEC, DEFAULT_HEADER_COLOR); assertTrue(result); assertEquals(1, db.getLoyaltyCardCount()); @@ -88,13 +88,13 @@ public class DatabaseTest assertEquals(Currency.getInstance("EUR"), loyaltyCard.balanceType); assertEquals("cardId1", loyaltyCard.cardId); assertEquals(0, loyaltyCard.starStatus); - assertEquals(BarcodeFormat.AZTEC.toString(), loyaltyCard.barcodeType); + assertEquals(BarcodeFormat.AZTEC, loyaltyCard.barcodeType); } @Test public void updateGiftCardOnlyStar() { - long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, 0); + long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, DEFAULT_HEADER_COLOR, 0); boolean result = (id != -1); assertTrue(result); assertEquals(1, db.getLoyaltyCardCount()); @@ -112,7 +112,7 @@ public class DatabaseTest assertEquals(null, loyaltyCard.balanceType); assertEquals("cardId", loyaltyCard.cardId); assertEquals(1, loyaltyCard.starStatus); - assertEquals(BarcodeFormat.UPC_A.toString(), loyaltyCard.barcodeType); + assertEquals(BarcodeFormat.UPC_A, loyaltyCard.barcodeType); } @Test @@ -121,7 +121,7 @@ public class DatabaseTest assertEquals(0, db.getLoyaltyCardCount()); boolean result = db.updateLoyaltyCard(1, "store1", "note1", null, new BigDecimal("0"), null, "cardId1", - BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR); + null, BarcodeFormat.UPC_A, DEFAULT_HEADER_COLOR); assertEquals(false, result); assertEquals(0, db.getLoyaltyCardCount()); } @@ -129,7 +129,7 @@ public class DatabaseTest @Test public void emptyGiftCardValues() { - long id = db.insertLoyaltyCard("", "", null, new BigDecimal("0"), null, "", "", null, 0); + long id = db.insertLoyaltyCard("", "", null, new BigDecimal("0"), null, "", "", null, null, 0); boolean result = (id != -1); assertTrue(result); assertEquals(1, db.getLoyaltyCardCount()); @@ -142,7 +142,7 @@ public class DatabaseTest assertEquals(new BigDecimal("0"), loyaltyCard.balance); assertEquals(null, loyaltyCard.balanceType); assertEquals("", loyaltyCard.cardId); - assertEquals("", loyaltyCard.barcodeType); + assertEquals(null, loyaltyCard.barcodeType); } @Test @@ -155,7 +155,7 @@ public class DatabaseTest for(int index = CARDS_TO_ADD-1; index >= 0; index--) { long id = db.insertLoyaltyCard("store" + index, "note" + index, null, new BigDecimal("0"), null, "cardId" + index, - BarcodeFormat.UPC_A.toString(), index, 0); + null, BarcodeFormat.UPC_A, index, 0); boolean result = (id != -1); assertTrue(result); } @@ -200,12 +200,12 @@ public class DatabaseTest { if (index == CARDS_TO_ADD-1) { id = db.insertLoyaltyCard("store" + index, "note" + index, null, new BigDecimal("0"), null, "cardId" + index, - BarcodeFormat.UPC_A.toString(), index, 1); + null, BarcodeFormat.UPC_A, index, 1); } else { id = db.insertLoyaltyCard("store" + index, "note" + index, null, new BigDecimal("0"), null, "cardId" + index, - BarcodeFormat.UPC_A.toString(), index, 0); + null, BarcodeFormat.UPC_A, index, 0); } boolean result = (id != -1); assertTrue(result); @@ -304,7 +304,7 @@ public class DatabaseTest { // Create card assertEquals(0, db.getLoyaltyCardCount()); - long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, 0); + long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, DEFAULT_HEADER_COLOR, 0); boolean result = (id != -1); assertTrue(result); assertEquals(1, db.getLoyaltyCardCount()); @@ -421,7 +421,7 @@ public class DatabaseTest { // Create card assertEquals(0, db.getLoyaltyCardCount()); - long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, 0); + long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, DEFAULT_HEADER_COLOR, 0); boolean result = (id != -1); assertTrue(result); assertEquals(1, db.getLoyaltyCardCount()); @@ -484,10 +484,9 @@ public class DatabaseTest assertEquals(new BigDecimal("0"), card.balance); assertEquals(null, card.balanceType); assertEquals("cardId", card.cardId); - assertEquals(BarcodeFormat.UPC_A.toString(), card.barcodeType); + assertEquals(BarcodeFormat.UPC_A, card.barcodeType); assertEquals("", card.note); assertEquals(null, card.headerColor); - assertEquals(null, card.headerTextColor); database.close(); } diff --git a/app/src/test/java/protect/card_locker/ImportExportTest.java b/app/src/test/java/protect/card_locker/ImportExportTest.java index 645583942..2f25f2c8e 100644 --- a/app/src/test/java/protect/card_locker/ImportExportTest.java +++ b/app/src/test/java/protect/card_locker/ImportExportTest.java @@ -54,7 +54,7 @@ public class ImportExportTest private final int MONTHS_PER_YEAR = 12; private final String BARCODE_DATA = "428311627547"; - private final String BARCODE_TYPE = BarcodeFormat.UPC_A.name(); + private final BarcodeFormat BARCODE_TYPE = BarcodeFormat.UPC_A; @Before public void setUp() @@ -80,7 +80,7 @@ public class ImportExportTest { String storeName = String.format("store, \"%4d", index); String note = String.format("note, \"%4d", index); - long id = db.insertLoyaltyCard(storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, BARCODE_TYPE, index, 0); + long id = db.insertLoyaltyCard(storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0); boolean result = (id != -1); assertTrue(result); } @@ -96,7 +96,7 @@ public class ImportExportTest { String storeName = String.format("store, \"%4d", index); String note = String.format("note, \"%4d", index); - long id = db.insertLoyaltyCard(storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, BARCODE_TYPE, index, 1); + long id = db.insertLoyaltyCard(storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 1); boolean result = (id != -1); assertTrue(result); } @@ -105,7 +105,7 @@ public class ImportExportTest String storeName = String.format("store, \"%4d", index); String note = String.format("note, \"%4d", index); //if index is even - long id = db.insertLoyaltyCard(storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, BARCODE_TYPE, index, 0); + long id = db.insertLoyaltyCard(storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0); boolean result = (id != -1); assertTrue(result); } @@ -115,7 +115,7 @@ public class ImportExportTest @Test public void addLoyaltyCardsWithExpiryNeverPastTodayFuture() { - long id = db.insertLoyaltyCard("No Expiry", "", null, new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, 0, 0); + long id = db.insertLoyaltyCard("No Expiry", "", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0); boolean result = (id != -1); assertTrue(result); @@ -130,7 +130,7 @@ public class ImportExportTest assertEquals(Integer.valueOf(0), card.headerColor); assertEquals(0, card.starStatus); - id = db.insertLoyaltyCard("Past", "", new Date((long) 1), new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, 0, 0); + id = db.insertLoyaltyCard("Past", "", new Date((long) 1), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0); result = (id != -1); assertTrue(result); @@ -145,7 +145,7 @@ public class ImportExportTest assertEquals(Integer.valueOf(0), card.headerColor); assertEquals(0, card.starStatus); - id = db.insertLoyaltyCard("Today", "", new Date(), new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, 0, 0); + id = db.insertLoyaltyCard("Today", "", new Date(), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0); result = (id != -1); assertTrue(result); @@ -163,7 +163,7 @@ public class ImportExportTest // This will break after 19 January 2038 // If someone is still maintaining this code base by then: I love you - id = db.insertLoyaltyCard("Future", "", new Date(2147483648000L), new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, 0, 0); + id = db.insertLoyaltyCard("Future", "", new Date(2147483648000L), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0); result = (id != -1); assertTrue(result); @@ -601,7 +601,7 @@ public class ImportExportTest DBHelper.LoyaltyCardDbIds.BARCODE_TYPE + "," + DBHelper.LoyaltyCardDbIds.STAR_STATUS + "\n"; - csvText += "1,store,note,12345,type,0"; + csvText += "1,store,note,12345,AZTEC,0"; ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8)); @@ -618,7 +618,7 @@ public class ImportExportTest assertEquals(new BigDecimal("0"), card.balance); assertEquals(null, card.balanceType); assertEquals("12345", card.cardId); - assertEquals("type", card.barcodeType); + assertEquals(BarcodeFormat.AZTEC, card.barcodeType); assertEquals(0, card.starStatus); assertNull(card.headerColor); @@ -638,7 +638,7 @@ public class ImportExportTest DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR + "," + DBHelper.LoyaltyCardDbIds.STAR_STATUS + "\n"; - csvText += "1,store,note,12345,type,,,0"; + csvText += "1,store,note,12345,AZTEC,,,0"; ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8)); @@ -655,7 +655,7 @@ public class ImportExportTest assertEquals(new BigDecimal("0"), card.balance); assertEquals(null, card.balanceType); assertEquals("12345", card.cardId); - assertEquals("type", card.barcodeType); + assertEquals(BarcodeFormat.AZTEC, card.barcodeType); assertEquals(0, card.starStatus); assertNull(card.headerColor); @@ -717,7 +717,7 @@ public class ImportExportTest assertEquals(new BigDecimal("0"), card.balance); assertEquals(null, card.balanceType); assertEquals("12345", card.cardId); - assertEquals("", card.barcodeType); + assertEquals(null, card.barcodeType); assertEquals(0, card.starStatus); assertEquals(1, (long) card.headerColor); @@ -737,7 +737,7 @@ public class ImportExportTest DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR + "," + DBHelper.LoyaltyCardDbIds.STAR_STATUS + "\n"; - csvText += "1,store,note,12345,type,1,1,1"; + csvText += "1,store,note,12345,AZTEC,1,1,1"; ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8)); @@ -754,7 +754,7 @@ public class ImportExportTest assertEquals(new BigDecimal("0"), card.balance); assertEquals(null, card.balanceType); assertEquals("12345", card.cardId); - assertEquals("type", card.barcodeType); + assertEquals(BarcodeFormat.AZTEC, card.barcodeType); assertEquals(1, card.starStatus); assertEquals(1, (long) card.headerColor); @@ -774,7 +774,7 @@ public class ImportExportTest DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR + "," + DBHelper.LoyaltyCardDbIds.STAR_STATUS + "\n"; - csvText += "1,store,note,12345,type,1,1,"; + csvText += "1,store,note,12345,AZTEC,1,1,"; ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8)); @@ -791,7 +791,7 @@ public class ImportExportTest assertEquals(new BigDecimal("0"), card.balance); assertEquals(null, card.balanceType); assertEquals("12345", card.cardId); - assertEquals("type", card.barcodeType); + assertEquals(BarcodeFormat.AZTEC, card.barcodeType); assertEquals(0, card.starStatus); assertEquals(1, (long) card.headerColor); @@ -811,7 +811,7 @@ public class ImportExportTest DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR + "," + DBHelper.LoyaltyCardDbIds.STAR_STATUS + "\n"; - csvText += "1,store,note,12345,type,1,1,2"; + csvText += "1,store,note,12345,AZTEC,1,1,2"; ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8)); @@ -830,7 +830,7 @@ public class ImportExportTest DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR + "," + DBHelper.LoyaltyCardDbIds.STAR_STATUS + "\n"; - csvText += "1,store,note,12345,type,1,1,text"; + csvText += "1,store,note,12345,AZTEC,1,1,text"; inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8)); @@ -847,7 +847,7 @@ public class ImportExportTest assertEquals(new BigDecimal("0"), card.balance); assertEquals(null, card.balanceType); assertEquals("12345", card.cardId); - assertEquals("type", card.barcodeType); + assertEquals(BarcodeFormat.AZTEC, card.barcodeType); assertEquals(0, card.starStatus); assertEquals(1, (long) card.headerColor); @@ -894,7 +894,7 @@ public class ImportExportTest assertEquals(new BigDecimal("0"), card.balance); assertEquals(Currency.getInstance("USD"), card.balanceType); assertEquals("123456", card.cardId); - assertEquals(BarcodeFormat.CODE_128.name(), card.barcodeType); + assertEquals(BarcodeFormat.CODE_128, card.barcodeType); assertEquals(0, card.starStatus); assertEquals(Color.GRAY, (long) card.headerColor); @@ -906,7 +906,7 @@ public class ImportExportTest assertEquals(new BigDecimal("3.5"), card.balance); assertEquals(Currency.getInstance("USD"), card.balanceType); assertEquals("26846363", card.cardId); - assertEquals(BarcodeFormat.CODE_39.name(), card.barcodeType); + assertEquals(BarcodeFormat.CODE_39, card.barcodeType); assertEquals(0, card.starStatus); assertEquals(Color.rgb(128, 0, 128), (long) card.headerColor); diff --git a/app/src/test/java/protect/card_locker/ImportURITest.java b/app/src/test/java/protect/card_locker/ImportURITest.java index 2b29c47cb..e0fbe261a 100644 --- a/app/src/test/java/protect/card_locker/ImportURITest.java +++ b/app/src/test/java/protect/card_locker/ImportURITest.java @@ -40,7 +40,7 @@ public class ImportURITest { // Generate card Date date = new Date(); - db.insertLoyaltyCard("store", "note", date, new BigDecimal("100"), null, BarcodeFormat.UPC_A.toString(), LoyaltyCardDbIds.BARCODE_TYPE, Color.BLACK, 1); + db.insertLoyaltyCard("store", "note", date, new BigDecimal("100"), null, BarcodeFormat.UPC_E.toString(), BarcodeFormat.UPC_A.toString(), BarcodeFormat.QR_CODE, Color.BLACK, 1); // Get card LoyaltyCard card = db.getLoyaltyCard(1); @@ -53,6 +53,7 @@ public class ImportURITest { // Compare everything assertEquals(card.barcodeType, parsedCard.barcodeType); + assertEquals(card.barcodeId, parsedCard.barcodeId); assertEquals(card.cardId, parsedCard.cardId); assertEquals(card.headerColor, parsedCard.headerColor); assertEquals(card.note, parsedCard.note); @@ -68,7 +69,7 @@ public class ImportURITest { public void ensureNoCrashOnMissingHeaderFields() throws InvalidObjectException { // Generate card - db.insertLoyaltyCard("store", "note", null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), LoyaltyCardDbIds.BARCODE_TYPE, null, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, BarcodeFormat.QR_CODE, null, 0); // Get card LoyaltyCard card = db.getLoyaltyCard(1); @@ -81,6 +82,7 @@ public class ImportURITest { // Compare everything assertEquals(card.barcodeType, parsedCard.barcodeType); + assertEquals(card.barcodeId, parsedCard.barcodeId); assertEquals(card.cardId, parsedCard.cardId); assertEquals(card.note, parsedCard.note); assertEquals(card.expiry, parsedCard.expiry); @@ -88,7 +90,6 @@ public class ImportURITest { assertEquals(card.balanceType, parsedCard.balanceType); assertEquals(card.store, parsedCard.store); assertNull(parsedCard.headerColor); - assertNull(parsedCard.headerTextColor); } @Test @@ -125,7 +126,8 @@ public class ImportURITest { } // Compare everything - assertEquals("ITF", parsedCard.barcodeType); + assertEquals(BarcodeFormat.ITF, parsedCard.barcodeType); + assertEquals(null, parsedCard.barcodeId); assertEquals("12345", parsedCard.cardId); assertEquals("note", parsedCard.note); assertEquals("store", parsedCard.store); diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java index 8055e8026..149edac9a 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java @@ -115,7 +115,7 @@ public class LoyaltyCardCursorAdapterTest @Test public void TestCursorAdapterEmptyNote() { - db.insertLoyaltyCard("store", "", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 0); + db.insertLoyaltyCard("store", "", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 0); LoyaltyCard card = db.getLoyaltyCard(1); Cursor cursor = db.getLoyaltyCardCursor(); @@ -131,7 +131,7 @@ public class LoyaltyCardCursorAdapterTest @Test public void TestCursorAdapterWithNote() { - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 0); LoyaltyCard card = db.getLoyaltyCard(1); Cursor cursor = db.getLoyaltyCardCursor(); @@ -151,7 +151,7 @@ public class LoyaltyCardCursorAdapterTest Date expiryDate = new Date(); String dateString = context.getString(R.string.expiryStateSentence, DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate)); - db.insertLoyaltyCard("store", "note", expiryDate, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", expiryDate, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 0); LoyaltyCard card = db.getLoyaltyCard(1); Cursor cursor = db.getLoyaltyCardCursor(); @@ -172,9 +172,9 @@ public class LoyaltyCardCursorAdapterTest @Test public void TestCursorAdapterStarring() { - db.insertLoyaltyCard("storeA", "note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 0); - db.insertLoyaltyCard("storeB", "note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 1); - db.insertLoyaltyCard("storeC", "note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 1); + db.insertLoyaltyCard("storeA", "note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 0); + db.insertLoyaltyCard("storeB", "note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 1); + db.insertLoyaltyCard("storeC", "note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 1); Cursor cursor = db.getLoyaltyCardCursor(); cursor.moveToFirst(); @@ -198,7 +198,7 @@ public class LoyaltyCardCursorAdapterTest @Test public void TestCursorAdapter0Points() { - db.insertLoyaltyCard("store", "", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 0); + db.insertLoyaltyCard("store", "", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 0); LoyaltyCard card = db.getLoyaltyCard(1); Cursor cursor = db.getLoyaltyCardCursor(); @@ -214,7 +214,7 @@ public class LoyaltyCardCursorAdapterTest @Test public void TestCursorAdapter0EUR() { - db.insertLoyaltyCard("store", "", null, new BigDecimal("0"), Currency.getInstance("EUR"), "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 0); + db.insertLoyaltyCard("store", "", null, new BigDecimal("0"), Currency.getInstance("EUR"), "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 0); LoyaltyCard card = db.getLoyaltyCard(1); Cursor cursor = db.getLoyaltyCardCursor(); @@ -230,7 +230,7 @@ public class LoyaltyCardCursorAdapterTest @Test public void TestCursorAdapter100Points() { - db.insertLoyaltyCard("store", "note", null, new BigDecimal("100"), null, "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("100"), null, "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 0); LoyaltyCard card = db.getLoyaltyCard(1); Cursor cursor = db.getLoyaltyCardCursor(); @@ -246,7 +246,7 @@ public class LoyaltyCardCursorAdapterTest @Test public void TestCursorAdapter10USD() { - db.insertLoyaltyCard("store", "note", null, new BigDecimal("10.00"), Currency.getInstance("USD"), "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("10.00"), Currency.getInstance("USD"), "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 0); 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 3fa5926ae..893fef04d 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -41,6 +41,7 @@ import com.google.zxing.client.android.Intents; import java.io.IOException; import java.math.BigDecimal; import java.text.DateFormat; +import java.text.ParseException; import java.util.Currency; import java.util.Date; import org.junit.Before; @@ -61,10 +62,10 @@ import org.robolectric.shadows.ShadowLog; public class LoyaltyCardViewActivityTest { private final String BARCODE_DATA = "428311627547"; - private final String BARCODE_TYPE = BarcodeFormat.UPC_A.name(); + private final BarcodeFormat BARCODE_TYPE = BarcodeFormat.UPC_A; private final String EAN_BARCODE_DATA = "4763705295336"; - private final String EAN_BARCODE_TYPE = BarcodeFormat.EAN_13.name(); + private final BarcodeFormat EAN_BARCODE_TYPE = BarcodeFormat.EAN_13; enum ViewMode { @@ -109,13 +110,13 @@ public class LoyaltyCardViewActivityTest */ private void saveLoyaltyCardWithArguments(final Activity activity, final String store, final String note, - final Date expiry, + final String expiry, final BigDecimal balance, - final Currency balanceType, + final String balanceType, final String cardId, + final String barcodeId, final String barcodeType, - boolean creatingNewCard) - { + boolean creatingNewCard) throws ParseException { DBHelper db = new DBHelper(activity); if(creatingNewCard) { @@ -132,18 +133,16 @@ public class LoyaltyCardViewActivityTest final EditText balanceView = activity.findViewById(R.id.balanceField); final EditText balanceCurrencyField = activity.findViewById(R.id.balanceCurrencyField); final TextView cardIdField = activity.findViewById(R.id.cardIdView); + final TextView barcodeIdField = activity.findViewById(R.id.barcodeIdField); final TextView barcodeTypeField = activity.findViewById(R.id.barcodeTypeField); storeField.setText(store); noteField.setText(note); expiryView.setTag(expiry); - if (balance != null) { - balanceView.setText(balance.toPlainString()); - } - if (balanceType != null) { - balanceCurrencyField.setText(balanceType.getSymbol()); - } + balanceView.setText(balance.toPlainString()); + balanceCurrencyField.setText(balanceType); cardIdField.setText(cardId); + barcodeIdField.setText(barcodeId); barcodeTypeField.setText(barcodeType); assertEquals(false, activity.isFinishing()); @@ -155,26 +154,49 @@ public class LoyaltyCardViewActivityTest LoyaltyCard card = db.getLoyaltyCard(1); assertEquals(store, card.store); assertEquals(note, card.note); - assertEquals(expiry, card.expiry); - if (balance != null) { - assertEquals(balance, card.balance); - } else { - assertEquals(new BigDecimal("0"), card.balance); + assertEquals(balance, card.balance); + + // The special "Never" string shouldn't actually be written to the loyalty card + if(expiry.equals(activity.getApplicationContext().getString(R.string.never))) + { + assertEquals(null, card.expiry); + } + else + { + assertEquals(DateFormat.getDateInstance().parse(expiry), card.expiry); + } + + // The special "Points" string shouldn't actually be written to the loyalty card + if(balanceType.equals(activity.getApplicationContext().getString(R.string.points))) + { + assertEquals(null, card.balanceType); + } + else + { + assertEquals(Currency.getInstance(balanceType), card.balanceType); } - assertEquals(balanceType, card.balanceType); assertEquals(cardId, card.cardId); + // The special "Same as barcode ID" string shouldn't actually be written to the loyalty card + if(barcodeId.equals(activity.getApplicationContext().getString(R.string.sameAsCardId))) + { + assertEquals(null, card.barcodeId); + } + else + { + assertEquals(barcodeId, card.barcodeId); + } + // The special "No barcode" string shouldn't actually be written to the loyalty card if(barcodeType.equals(activity.getApplicationContext().getString(R.string.noBarcode))) { - assertEquals("", card.barcodeType); + assertEquals(null, card.barcodeType); } else { - assertEquals(barcodeType, card.barcodeType); + assertEquals(BarcodeFormat.valueOf(barcodeType), card.barcodeType); } assertNotNull(card.headerColor); - assertNotNull(card.headerTextColor); db.close(); } @@ -201,7 +223,7 @@ public class LoyaltyCardViewActivityTest Intent resultIntent = new Intent(intent); Bundle resultBundle = new Bundle(); resultBundle.putString(BarcodeSelectorActivity.BARCODE_CONTENTS, BARCODE_DATA); - resultBundle.putString(BarcodeSelectorActivity.BARCODE_FORMAT, BARCODE_TYPE); + resultBundle.putString(BarcodeSelectorActivity.BARCODE_FORMAT, String.valueOf(BARCODE_TYPE)); resultIntent.putExtras(resultBundle); // Respond to image capture, success @@ -274,7 +296,8 @@ public class LoyaltyCardViewActivityTest private void checkAllFields(final Activity activity, ViewMode mode, final String store, final String note, final String expiryString, final String balanceString, final String balanceTypeString, - final String cardId, final String barcodeType) + final String cardId, final String barcodeId, + final String barcodeType) { if(mode == ViewMode.VIEW_CARD) { @@ -290,6 +313,7 @@ public class LoyaltyCardViewActivityTest checkFieldProperties(activity, R.id.balanceField, editVisibility, balanceString); checkFieldProperties(activity, R.id.balanceCurrencyField, editVisibility, balanceTypeString); checkFieldProperties(activity, R.id.cardIdView, View.VISIBLE, cardId); + checkFieldProperties(activity, R.id.barcodeIdField, View.VISIBLE, barcodeId); checkFieldProperties(activity, R.id.barcodeTypeField, View.VISIBLE, barcodeType); checkFieldProperties(activity, R.id.barcode, View.VISIBLE, null); } @@ -306,7 +330,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); final Context context = ApplicationProvider.getApplicationContext(); - checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never) , "0", context.getString(R.string.points), "", ""); + checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never) , "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId),""); } @Test @@ -355,8 +379,7 @@ public class LoyaltyCardViewActivityTest } @Test - public void startWithoutParametersCaptureBarcodeCreateLoyaltyCard() throws IOException - { + public void startWithoutParametersCaptureBarcodeCreateLoyaltyCard() throws IOException, ParseException { registerMediaStoreIntentHandler(); ActivityController activityController = Robolectric.buildActivity(LoyaltyCardEditActivity.class).create(); @@ -367,17 +390,17 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); final Context context = ApplicationProvider.getApplicationContext(); - checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", ""); + checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId),""); // Complete barcode capture successfully captureBarcodeWithResult(activity, true); - checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, BARCODE_TYPE); + checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.toString()); shadowOf(getMainLooper()).idle(); // Save and check the loyalty card - saveLoyaltyCardWithArguments(activity, "store", "note", null, null, null, BARCODE_DATA, BARCODE_TYPE, true); + saveLoyaltyCardWithArguments(activity, "store", "note", context.getString(R.string.never), new BigDecimal("0"), context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.name(), true); } @Test @@ -391,12 +414,12 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); final Context context = ApplicationProvider.getApplicationContext(); - checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", ""); + checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), ""); // Complete barcode capture in failure captureBarcodeWithResult(activity, false); - checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", ""); + checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId),""); } @Test @@ -410,12 +433,12 @@ public class LoyaltyCardViewActivityTest LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get(); final Context context = ApplicationProvider.getApplicationContext(); - checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", ""); + checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId),""); // Complete barcode capture successfully captureBarcodeWithResult(activity, true); - checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, BARCODE_TYPE); + checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.toString()); // Cancel the loyalty card creation assertEquals(false, activity.isFinishing()); @@ -465,13 +488,13 @@ public class LoyaltyCardViewActivityTest final Context context = ApplicationProvider.getApplicationContext(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0); activityController.start(); activityController.visible(); activityController.resume(); - checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", null, "0", context.getString(R.string.points), BARCODE_DATA, BARCODE_TYPE); + checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", null, "0", context.getString(R.string.points), BARCODE_DATA, null, BARCODE_TYPE.toString()); db.close(); } @@ -484,13 +507,13 @@ public class LoyaltyCardViewActivityTest final Context context = ApplicationProvider.getApplicationContext(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0); activityController.start(); activityController.visible(); activityController.resume(); - checkAllFields(activity, ViewMode.VIEW_CARD, "store", "note", null, "0", context.getString(R.string.points), BARCODE_DATA, BARCODE_TYPE); + checkAllFields(activity, ViewMode.VIEW_CARD, "store", "note", null, "0", context.getString(R.string.points), BARCODE_DATA, null, BARCODE_TYPE.toString()); db.close(); } @@ -503,18 +526,18 @@ public class LoyaltyCardViewActivityTest final Context context = ApplicationProvider.getApplicationContext(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, EAN_BARCODE_TYPE, Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0); activityController.start(); activityController.visible(); activityController.resume(); - checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", null, "0", context.getString(R.string.points), EAN_BARCODE_DATA, EAN_BARCODE_TYPE); + checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", null, "0", context.getString(R.string.points), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE.toString()); // Complete barcode capture successfully captureBarcodeWithResult(activity, true); - checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", null, "0", context.getString(R.string.points), BARCODE_DATA, BARCODE_TYPE); + checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", null, "0", context.getString(R.string.points), BARCODE_DATA, null, BARCODE_TYPE.toString()); db.close(); } @@ -527,18 +550,18 @@ public class LoyaltyCardViewActivityTest final Context context = ApplicationProvider.getApplicationContext(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, EAN_BARCODE_TYPE, Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0); activityController.start(); activityController.visible(); activityController.resume(); - checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", null, "0", context.getString(R.string.points), EAN_BARCODE_DATA, EAN_BARCODE_TYPE); + checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", null, "0", context.getString(R.string.points), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE.toString()); // Complete barcode capture successfully captureBarcodeWithResult(activity, true); - checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", null, "0", context.getString(R.string.points), BARCODE_DATA, BARCODE_TYPE); + checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", null, "0", context.getString(R.string.points), BARCODE_DATA, null, BARCODE_TYPE.toString()); // Cancel the loyalty card creation assertEquals(false, activity.isFinishing()); @@ -565,13 +588,13 @@ public class LoyaltyCardViewActivityTest final Context context = ApplicationProvider.getApplicationContext(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, EAN_BARCODE_TYPE, Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0); activityController.start(); activityController.visible(); activityController.resume(); - checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, EAN_BARCODE_TYPE); + checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE.toString()); // Set date to today MaterialAutoCompleteTextView expiryField = activity.findViewById(R.id.expiryField); @@ -585,7 +608,7 @@ public class LoyaltyCardViewActivityTest shadowOf(getMainLooper()).idle(); - checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "0", context.getString(R.string.points), EAN_BARCODE_DATA, EAN_BARCODE_TYPE); + checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "0", context.getString(R.string.points), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE.toString()); db.close(); } @@ -598,19 +621,19 @@ public class LoyaltyCardViewActivityTest final Context context = ApplicationProvider.getApplicationContext(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", new Date(), new BigDecimal("0"), null, EAN_BARCODE_DATA, EAN_BARCODE_TYPE, Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", new Date(), new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0); activityController.start(); activityController.visible(); activityController.resume(); - checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "0", context.getString(R.string.points), EAN_BARCODE_DATA, EAN_BARCODE_TYPE); + checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "0", context.getString(R.string.points), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE.toString()); // Set date to never MaterialAutoCompleteTextView expiryField = activity.findViewById(R.id.expiryField); expiryField.setText(expiryField.getAdapter().getItem(0).toString(), false); - checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, EAN_BARCODE_TYPE); + checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE.toString()); db.close(); } @@ -623,13 +646,13 @@ public class LoyaltyCardViewActivityTest final Context context = ApplicationProvider.getApplicationContext(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, EAN_BARCODE_TYPE, Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0); activityController.start(); activityController.visible(); activityController.resume(); - checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, EAN_BARCODE_TYPE); + checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE.toString()); // Set balance to 10 points EditText balanceField = activity.findViewById(R.id.balanceField); @@ -658,7 +681,7 @@ public class LoyaltyCardViewActivityTest shadowOf(getMainLooper()).idle(); - checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "10.00", "€", EAN_BARCODE_DATA, EAN_BARCODE_TYPE); + checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "10.00", "€", EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE.toString()); db.close(); } @@ -674,13 +697,13 @@ public class LoyaltyCardViewActivityTest final Context context = ApplicationProvider.getApplicationContext(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("10.00"), Currency.getInstance("USD"), EAN_BARCODE_DATA, EAN_BARCODE_TYPE, Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("10.00"), Currency.getInstance("USD"), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0); activityController.start(); activityController.visible(); activityController.resume(); - checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "10.00", "$", EAN_BARCODE_DATA, EAN_BARCODE_TYPE); + checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "10.00", "$", EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE.toString()); shadowOf(getMainLooper()).idle(); @@ -702,7 +725,7 @@ public class LoyaltyCardViewActivityTest shadowOf(getMainLooper()).idle(); - checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", "₩", EAN_BARCODE_DATA, EAN_BARCODE_TYPE); + checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", "₩", EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE.toString()); db.close(); } @@ -714,7 +737,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0); activityController.start(); activityController.visible(); @@ -762,7 +785,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0); activityController.start(); activityController.visible(); @@ -782,7 +805,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, null, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0); activityController.start(); activityController.visible(); @@ -796,69 +819,66 @@ public class LoyaltyCardViewActivityTest } @Test - public void startLoyaltyCardWithoutColorsSave() throws IOException - { + public void startLoyaltyCardWithoutColorsSave() throws IOException, ParseException { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, null, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0); activityController.start(); activityController.visible(); activityController.resume(); // Save and check the loyalty card - saveLoyaltyCardWithArguments(activity, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, false); + saveLoyaltyCardWithArguments(activity, "store", "note", activity.getApplicationContext().getString(R.string.never), new BigDecimal("0"), activity.getApplicationContext().getString(R.string.points), BARCODE_DATA, activity.getApplicationContext().getString(R.string.sameAsCardId), BARCODE_TYPE.toString(), false); db.close(); } @Test - public void startLoyaltyCardWithExplicitNoBarcodeSave() throws IOException - { + public void startLoyaltyCardWithExplicitNoBarcodeSave() throws IOException, ParseException { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, "", Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0); activityController.start(); activityController.visible(); activityController.resume(); // Save and check the loyalty card - saveLoyaltyCardWithArguments(activity, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, activity.getApplicationContext().getString(R.string.noBarcode), false); + saveLoyaltyCardWithArguments(activity, "store", "note", activity.getApplicationContext().getString(R.string.never), new BigDecimal("0"), activity.getApplicationContext().getString(R.string.points), BARCODE_DATA, activity.getApplicationContext().getString(R.string.sameAsCardId), activity.getApplicationContext().getString(R.string.noBarcode), false); db.close(); } @Test - public void removeBarcodeFromLoyaltyCard() throws IOException - { + public void removeBarcodeFromLoyaltyCard() throws IOException, ParseException { ActivityController activityController = createActivityWithLoyaltyCard(true); Activity activity = (Activity)activityController.get(); final Context context = ApplicationProvider.getApplicationContext(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0); activityController.start(); activityController.visible(); activityController.resume(); // First check if the card is as expected - checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, BARCODE_TYPE); + checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, null, BARCODE_TYPE.toString()); // Complete empty barcode selection successfully selectBarcodeWithResult(activity, BARCODE_DATA, "", true); // Check if the barcode type is NO_BARCODE as expected - checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, activity.getApplicationContext().getString(R.string.noBarcode)); + checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, null, context.getString(R.string.noBarcode)); assertEquals(View.GONE, activity.findViewById(R.id.barcodeLayout).getVisibility()); // Check if the special NO_BARCODE string doesn't get saved - saveLoyaltyCardWithArguments(activity, "store", "note", null, null, null, BARCODE_DATA, activity.getApplicationContext().getString(R.string.noBarcode), false); + saveLoyaltyCardWithArguments(activity, "store", "note", context.getString(R.string.never), new BigDecimal("0"), context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), false); db.close(); } @@ -870,7 +890,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0); final int STORE_FONT_SIZE = 50; final int CARD_FONT_SIZE = 40; @@ -910,7 +930,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0); SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity); settings.edit() @@ -947,7 +967,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity) activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, Color.BLACK,0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK,0); activityController.start(); activityController.visible(); activityController.resume(); @@ -982,7 +1002,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); DBHelper db = new DBHelper(activity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, BARCODE_TYPE, Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0); activityController.start(); activityController.visible(); @@ -1096,7 +1116,7 @@ public class LoyaltyCardViewActivityTest shadowOf(getMainLooper()).idle(); - checkAllFields(activity, ViewMode.ADD_CARD, "Example Store", "", DateFormat.getDateInstance(DateFormat.LONG).format(date), "10.00", "$", "123456", "AZTEC"); + checkAllFields(activity, ViewMode.ADD_CARD, "Example Store", "", DateFormat.getDateInstance(DateFormat.LONG).format(date), "10.00", "$", "123456", null, "AZTEC"); assertEquals(-416706, ((ColorDrawable) activity.findViewById(R.id.thumbnail).getBackground()).getColor()); } @@ -1117,7 +1137,7 @@ public class LoyaltyCardViewActivityTest Activity activity = (Activity)activityController.get(); final Context context = ApplicationProvider.getApplicationContext(); - checkAllFields(activity, ViewMode.ADD_CARD, "Example Store", "", context.getString(R.string.never), "0", context.getString(R.string.points), "123456", "AZTEC"); + checkAllFields(activity, ViewMode.ADD_CARD, "Example Store", "", context.getString(R.string.never), "0", context.getString(R.string.points), "123456", null, "AZTEC"); assertEquals(-416706, ((ColorDrawable) activity.findViewById(R.id.thumbnail).getBackground()).getColor()); } } diff --git a/app/src/test/java/protect/card_locker/MainActivityTest.java b/app/src/test/java/protect/card_locker/MainActivityTest.java index a849fd7bf..b702ea127 100644 --- a/app/src/test/java/protect/card_locker/MainActivityTest.java +++ b/app/src/test/java/protect/card_locker/MainActivityTest.java @@ -97,7 +97,7 @@ public class MainActivityTest assertEquals(0, list.getCount()); DBHelper db = new DBHelper(mainActivity); - db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 0); + db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 0); assertEquals(View.VISIBLE, helpText.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); @@ -133,10 +133,10 @@ public class MainActivityTest assertEquals(0, list.getCount()); DBHelper db = new DBHelper(mainActivity); - db.insertLoyaltyCard("storeB", "note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 0); - db.insertLoyaltyCard("storeA", "note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 0); - db.insertLoyaltyCard("storeD", "note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 1); - db.insertLoyaltyCard("storeC", "note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 1); + db.insertLoyaltyCard("storeB", "note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 0); + db.insertLoyaltyCard("storeA", "note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 0); + db.insertLoyaltyCard("storeD", "note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 1); + db.insertLoyaltyCard("storeC", "note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 1); assertEquals(View.VISIBLE, helpText.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); @@ -234,8 +234,8 @@ public class MainActivityTest TabLayout groupTabs = mainActivity.findViewById(R.id.groups); DBHelper db = new DBHelper(mainActivity); - db.insertLoyaltyCard("The First Store", "Initial note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 0); - db.insertLoyaltyCard("The Second Store", "Secondary note", null, new BigDecimal("0"), null, "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, 0); + db.insertLoyaltyCard("The First Store", "Initial note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 0); + db.insertLoyaltyCard("The Second Store", "Secondary note", null, new BigDecimal("0"), null, "cardId", null, BarcodeFormat.UPC_A, Color.BLACK, 0); db.insertGroup("Group one"); List groups = new ArrayList<>();