diff --git a/app/src/main/java/protect/card_locker/DBHelper.java b/app/src/main/java/protect/card_locker/DBHelper.java index 88ad9167bb..f17f874eda 100644 --- a/app/src/main/java/protect/card_locker/DBHelper.java +++ b/app/src/main/java/protect/card_locker/DBHelper.java @@ -23,7 +23,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 = 17; + public static final int DATABASE_VERSION = 18; // NB: changing these values requires a migration public static final int DEFAULT_ZOOM_LEVEL = 100; @@ -42,6 +42,7 @@ public static class LoyaltyCardDbIds { public static final String VALID_FROM = "validfrom"; public static final String EXPIRY = "expiry"; public static final String BALANCE = "balance"; + public static final String DEFAULT_BALANCE_CHANGE = "defaultbalancechange"; public static final String BALANCE_TYPE = "balancetype"; public static final String NOTE = "note"; public static final String HEADER_COLOR = "headercolor"; @@ -107,6 +108,7 @@ public void onCreate(SQLiteDatabase db) { LoyaltyCardDbIds.VALID_FROM + " INTEGER," + LoyaltyCardDbIds.EXPIRY + " INTEGER," + LoyaltyCardDbIds.BALANCE + " TEXT not null DEFAULT '0'," + + LoyaltyCardDbIds.DEFAULT_BALANCE_CHANGE + " TEXT," + LoyaltyCardDbIds.BALANCE_TYPE + " TEXT," + LoyaltyCardDbIds.HEADER_COLOR + " INTEGER," + LoyaltyCardDbIds.CARD_ID + " TEXT not null," + @@ -335,6 +337,11 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE + " ADD COLUMN " + LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH + " INTEGER DEFAULT '100' "); } + + if (oldVersion < 18 && newVersion >= 18) { + db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE + + " ADD COLUMN " + LoyaltyCardDbIds.DEFAULT_BALANCE_CHANGE + " TEXT "); + } } public static Set imageFiles(Context context, final SQLiteDatabase database) { @@ -395,7 +402,7 @@ private static void updateFTS(final SQLiteDatabase db, final int id, final Strin public static long insertLoyaltyCard( final SQLiteDatabase database, final String store, final String note, final Date validFrom, - final Date expiry, final BigDecimal balance, final Currency balanceType, final String cardId, + final Date expiry, final BigDecimal balance, final BigDecimal defaultBalanceChange, final Currency balanceType, final String cardId, final String barcodeId, final CatimaBarcode barcodeType, final Integer headerColor, final int starStatus, final Long lastUsed, final int archiveStatus) { database.beginTransaction(); @@ -407,6 +414,7 @@ public static long insertLoyaltyCard( contentValues.put(LoyaltyCardDbIds.VALID_FROM, validFrom != null ? validFrom.getTime() : null); contentValues.put(LoyaltyCardDbIds.EXPIRY, expiry != null ? expiry.getTime() : null); contentValues.put(LoyaltyCardDbIds.BALANCE, balance.toString()); + contentValues.put(LoyaltyCardDbIds.DEFAULT_BALANCE_CHANGE, defaultBalanceChange != null ? defaultBalanceChange.toString() : null); contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType != null ? balanceType.getCurrencyCode() : null); contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId); contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId); @@ -428,7 +436,7 @@ public static long insertLoyaltyCard( public static long insertLoyaltyCard( final SQLiteDatabase database, final int id, final String store, final String note, - final Date validFrom, final Date expiry, final BigDecimal balance, + final Date validFrom, final Date expiry, final BigDecimal balance, final BigDecimal defaultBalanceChange, final Currency balanceType, final String cardId, final String barcodeId, final CatimaBarcode barcodeType, final Integer headerColor, final int starStatus, final Long lastUsed, final int archiveStatus) { @@ -442,6 +450,7 @@ public static long insertLoyaltyCard( contentValues.put(LoyaltyCardDbIds.VALID_FROM, validFrom != null ? validFrom.getTime() : null); contentValues.put(LoyaltyCardDbIds.EXPIRY, expiry != null ? expiry.getTime() : null); contentValues.put(LoyaltyCardDbIds.BALANCE, balance.toString()); + contentValues.put(LoyaltyCardDbIds.DEFAULT_BALANCE_CHANGE, defaultBalanceChange != null ? defaultBalanceChange.toString() : null); contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType != null ? balanceType.getCurrencyCode() : null); contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId); contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId); @@ -463,7 +472,7 @@ public static long insertLoyaltyCard( public static boolean updateLoyaltyCard( SQLiteDatabase database, final int id, final String store, final String note, - final Date validFrom, final Date expiry, final BigDecimal balance, + final Date validFrom, final Date expiry, final BigDecimal balance, final BigDecimal defaultBalanceChange, final Currency balanceType, final String cardId, final String barcodeId, final CatimaBarcode barcodeType, final Integer headerColor, final int starStatus, final Long lastUsed, final int archiveStatus) { @@ -476,6 +485,7 @@ public static boolean updateLoyaltyCard( contentValues.put(LoyaltyCardDbIds.VALID_FROM, validFrom != null ? validFrom.getTime() : null); contentValues.put(LoyaltyCardDbIds.EXPIRY, expiry != null ? expiry.getTime() : null); contentValues.put(LoyaltyCardDbIds.BALANCE, balance.toString()); + contentValues.put(LoyaltyCardDbIds.DEFAULT_BALANCE_CHANGE, defaultBalanceChange != null ? defaultBalanceChange.toString() : null); contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType != null ? balanceType.getCurrencyCode() : null); contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId); contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId); diff --git a/app/src/main/java/protect/card_locker/ImportURIHelper.java b/app/src/main/java/protect/card_locker/ImportURIHelper.java index 99c904b7e4..4a760db0e1 100644 --- a/app/src/main/java/protect/card_locker/ImportURIHelper.java +++ b/app/src/main/java/protect/card_locker/ImportURIHelper.java @@ -21,6 +21,7 @@ public class ImportURIHelper { private static final String VALID_FROM = DBHelper.LoyaltyCardDbIds.VALID_FROM; private static final String EXPIRY = DBHelper.LoyaltyCardDbIds.EXPIRY; private static final String BALANCE = DBHelper.LoyaltyCardDbIds.BALANCE; + private static final String DEFAULT_BALANCE_CHANGE = DBHelper.LoyaltyCardDbIds.DEFAULT_BALANCE_CHANGE; 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; @@ -69,6 +70,9 @@ public LoyaltyCard parse(Uri uri) throws InvalidObjectException { Date validFrom = null; Date expiry = null; BigDecimal balance = new BigDecimal("0"); + + BigDecimal defaultBalanceChange = null; + Currency balanceType = null; Integer headerColor = null; @@ -107,6 +111,10 @@ public LoyaltyCard parse(Uri uri) throws InvalidObjectException { if (unparsedBalance != null && !unparsedBalance.equals("")) { balance = new BigDecimal(unparsedBalance); } + String unparsedDefaultBalanceChange = kv.get(DEFAULT_BALANCE_CHANGE); + if (unparsedDefaultBalanceChange != null && !unparsedDefaultBalanceChange.equals("")) { + defaultBalanceChange = new BigDecimal(unparsedDefaultBalanceChange); + } String unparsedBalanceType = kv.get(BALANCE_TYPE); if (unparsedBalanceType != null && !unparsedBalanceType.equals("")) { balanceType = Currency.getInstance(unparsedBalanceType); @@ -132,6 +140,7 @@ public LoyaltyCard parse(Uri uri) throws InvalidObjectException { validFrom, expiry, balance, + defaultBalanceChange, balanceType, cardId, barcodeId, @@ -178,6 +187,9 @@ protected Uri toUri(LoyaltyCard loyaltyCard) throws UnsupportedEncodingException fragment = appendFragment(fragment, STORE, loyaltyCard.store); fragment = appendFragment(fragment, NOTE, loyaltyCard.note); fragment = appendFragment(fragment, BALANCE, loyaltyCard.balance.toString()); + if (loyaltyCard.defaultBalanceChange != null) { + fragment = appendFragment(fragment, DEFAULT_BALANCE_CHANGE, loyaltyCard.defaultBalanceChange.toString()); + } if (loyaltyCard.balanceType != null) { fragment = appendFragment(fragment, BALANCE_TYPE, loyaltyCard.balanceType.getCurrencyCode()); } diff --git a/app/src/main/java/protect/card_locker/LoyaltyCard.java b/app/src/main/java/protect/card_locker/LoyaltyCard.java index b4fe334983..f8ee922583 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCard.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCard.java @@ -24,6 +24,8 @@ public class LoyaltyCard { public Date expiry; public BigDecimal balance; @Nullable + public BigDecimal defaultBalanceChange; + @Nullable public Currency balanceType; public String cardId; @Nullable @@ -58,6 +60,7 @@ public class LoyaltyCard { public static final String BUNDLE_LOYALTY_CARD_VALID_FROM = "loyaltyCardValidFrom"; public static final String BUNDLE_LOYALTY_CARD_EXPIRY = "loyaltyCardExpiry"; public static final String BUNDLE_LOYALTY_CARD_BALANCE = "loyaltyCardBalance"; + public static final String BUNDLE_LOYALTY_CARD_DEFAULT_BALANCE_CHANGE = "loyaltyCardDefaultBalanceChange"; public static final String BUNDLE_LOYALTY_CARD_BALANCE_TYPE = "loyaltyCardBalanceType"; public static final String BUNDLE_LOYALTY_CARD_CARD_ID = "loyaltyCardCardId"; public static final String BUNDLE_LOYALTY_CARD_BARCODE_ID = "loyaltyCardBarcodeId"; @@ -86,6 +89,7 @@ public LoyaltyCard() { setValidFrom(null); setExpiry(null); setBalance(new BigDecimal("0")); + setDefaultBalanceChange(null); setBalanceType(null); setCardId(""); setBarcodeId(null); @@ -110,6 +114,7 @@ public LoyaltyCard() { * @param validFrom * @param expiry * @param balance + * @param defaultBalanceChange * @param balanceType * @param cardId * @param barcodeId @@ -122,7 +127,7 @@ public LoyaltyCard() { * @param archiveStatus */ public LoyaltyCard(final int id, final String store, final String note, @Nullable final Date validFrom, - @Nullable final Date expiry, final BigDecimal balance, @Nullable final Currency balanceType, + @Nullable final Date expiry, final BigDecimal balance,@Nullable final BigDecimal defaultBalanceChange, @Nullable final Currency balanceType, final String cardId, @Nullable final String barcodeId, @Nullable final CatimaBarcode barcodeType, @Nullable final Integer headerColor, final int starStatus, final long lastUsed, final int zoomLevel, final int zoomLevelWidth, final int archiveStatus, @@ -135,6 +140,7 @@ public LoyaltyCard(final int id, final String store, final String note, @Nullabl setValidFrom(validFrom); setExpiry(expiry); setBalance(balance); + setDefaultBalanceChange(defaultBalanceChange); setBalanceType(balanceType); setCardId(cardId); setBarcodeId(barcodeId); @@ -228,6 +234,10 @@ public void setBalance(@NonNull BigDecimal balance) { this.balance = balance; } + public void setDefaultBalanceChange(@Nullable BigDecimal defaultBalanceChange) { + this.defaultBalanceChange = defaultBalanceChange; + } + public void setBalanceType(@Nullable Currency balanceType) { this.balanceType = balanceType; } @@ -357,6 +367,11 @@ public void updateFromBundle(@NonNull Bundle bundle, boolean requireFull) { } else if (requireFull) { throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_BALANCE); } + if (bundle.containsKey(BUNDLE_LOYALTY_CARD_DEFAULT_BALANCE_CHANGE)) { + setDefaultBalanceChange(new BigDecimal(bundle.getString(BUNDLE_LOYALTY_CARD_DEFAULT_BALANCE_CHANGE))); + } else if (requireFull) { + throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_DEFAULT_BALANCE_CHANGE); + } if (bundle.containsKey(BUNDLE_LOYALTY_CARD_BALANCE_TYPE)) { String tmpBalanceType = bundle.getString(BUNDLE_LOYALTY_CARD_BALANCE_TYPE); setBalanceType(tmpBalanceType != null ? Currency.getInstance(tmpBalanceType) : null); @@ -450,6 +465,9 @@ public Bundle toBundle(Context context, List exportLimit) { if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_BALANCE)) { bundle.putString(BUNDLE_LOYALTY_CARD_BALANCE, balance.toString()); } + if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_DEFAULT_BALANCE_CHANGE)) { + bundle.putString(BUNDLE_LOYALTY_CARD_DEFAULT_BALANCE_CHANGE, defaultBalanceChange.toString()); + } if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_BALANCE_TYPE)) { bundle.putString(BUNDLE_LOYALTY_CARD_BALANCE_TYPE, balanceType != null ? balanceType.toString() : null); } @@ -528,6 +546,9 @@ public static LoyaltyCard fromCursor(Context context, Cursor cursor) { Date expiry = expiryLong > 0 ? new Date(expiryLong) : null; // balance BigDecimal balance = new BigDecimal(cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE))); + // defaultBalanceChange + int defaultBalanceChangeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.DEFAULT_BALANCE_CHANGE); + BigDecimal defaultBalanceChange = !cursor.isNull(defaultBalanceChangeColumn) ? new BigDecimal(cursor.getString(defaultBalanceChangeColumn)) : null; // balanceType int balanceTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE); Currency balanceType = !cursor.isNull(balanceTypeColumn) ? Currency.getInstance(cursor.getString(balanceTypeColumn)) : null; @@ -560,6 +581,7 @@ public static LoyaltyCard fromCursor(Context context, Cursor cursor) { validFrom, expiry, balance, + defaultBalanceChange, balanceType, cardId, barcodeId, @@ -588,6 +610,7 @@ public static boolean isDuplicate(Context context, final LoyaltyCard a, final Lo Utils.equals(a.validFrom, b.validFrom) && // nullable Date Utils.equals(a.expiry, b.expiry) && // nullable Date a.balance.equals(b.balance) && // non-nullable BigDecimal + Utils.equals(a.defaultBalanceChange, b.defaultBalanceChange) && // nullable BigDecimal Utils.equals(a.balanceType, b.balanceType) && // nullable Currency a.cardId.equals(b.cardId) && // non-nullable String Utils.equals(a.barcodeId, b.barcodeId) && // nullable String @@ -619,7 +642,7 @@ public static boolean nullableBitmapsEqual(@Nullable Bitmap a, @Nullable Bitmap public String toString() { return String.format( "LoyaltyCard{%n id=%s,%n store=%s,%n note=%s,%n validFrom=%s,%n expiry=%s,%n" - + " balance=%s,%n balanceType=%s,%n cardId=%s,%n barcodeId=%s,%n barcodeType=%s,%n" + + " balance=%s,%n defaultBalanceChange=%s,%n balanceType=%s,%n cardId=%s,%n barcodeId=%s,%n barcodeType=%s,%n" + " headerColor=%s,%n starStatus=%s,%n lastUsed=%s,%n zoomLevel=%s,%n zoomLevelWidth=%s,%n archiveStatus=%s%n" + " imageThumbnail=%s,%n imageThumbnailPath=%s,%n imageFront=%s,%n imageFrontPath=%s,%n imageBack=%s,%n imageBackPath=%s,%n}", this.id, @@ -628,6 +651,7 @@ public String toString() { this.validFrom, this.expiry, this.balance, + this.defaultBalanceChange, this.balanceType, this.cardId, this.barcodeId, diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index 13df8c4804..31f0115dcb 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -122,6 +122,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements AutoCompleteTextView expiryField; EditText balanceField; AutoCompleteTextView balanceCurrencyField; + EditText defaultBalanceChangeField; TextView cardIdFieldView; AutoCompleteTextView barcodeIdField; AutoCompleteTextView barcodeTypeField; @@ -202,6 +203,12 @@ protected void setLoyaltyCardBalanceType(@Nullable Currency balanceType) { viewModel.setHasChanged(true); } + protected void setLoyaltyCardDefaultBalanceChange(@Nullable BigDecimal defaultBalanceChange) { + viewModel.getLoyaltyCard().setDefaultBalanceChange(defaultBalanceChange); + + viewModel.setHasChanged(true); + } + protected void setLoyaltyCardCardId(@NonNull String cardId) { viewModel.getLoyaltyCard().setCardId(cardId); @@ -328,6 +335,7 @@ protected void onCreate(Bundle savedInstanceState) { expiryField = binding.expiryField; balanceField = binding.balanceField; balanceCurrencyField = binding.balanceCurrencyField; + defaultBalanceChangeField = binding.defaultBalanceChangeField; cardIdFieldView = binding.cardIdView; barcodeIdField = binding.barcodeIdField; barcodeTypeField = binding.barcodeTypeField; @@ -449,6 +457,21 @@ public void afterTextChanged(Editable s) { } }); + defaultBalanceChangeField.addTextChangedListener(new SimpleTextWatcher() { + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (onResuming || onRestoring) return; + try { + BigDecimal defaultBalanceChange = Utils.parseBalance(s.toString(), viewModel.getLoyaltyCard().balanceType); + setLoyaltyCardDefaultBalanceChange(defaultBalanceChange); + defaultBalanceChangeField.setError(null); + } catch (ParseException e) { + e.printStackTrace(); + defaultBalanceChangeField.setError(getString(R.string.balanceParsingFailed)); + } + } + }); + cardIdFieldView.addTextChangedListener(new SimpleTextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { @@ -781,6 +804,11 @@ protected void onResume() { validBalance = true; Log.d(TAG, "Setting balance to " + balance); + BigDecimal defaultBalanceChange = viewModel.getLoyaltyCard().defaultBalanceChange == null ? null : viewModel.getLoyaltyCard().defaultBalanceChange; + setLoyaltyCardDefaultBalanceChange(defaultBalanceChange); + defaultBalanceChangeField.setText(viewModel.getLoyaltyCard().defaultBalanceChange == null ? "" : Utils.formatBalanceWithoutCurrencySymbol(viewModel.getLoyaltyCard().defaultBalanceChange, viewModel.getLoyaltyCard().balanceType)); + Log.d(TAG, "Setting default balance change to " + (defaultBalanceChange == null ? "null" : defaultBalanceChange)); + if (groupsChips.getChildCount() == 0) { List existingGroups = DBHelper.getGroups(mDatabase); @@ -1477,9 +1505,9 @@ private void doSave() { // This makes the DBHelper set it to the current date // So that new and edited card are always on top when sorting by recently used if (viewModel.getUpdateLoyaltyCard()) { - DBHelper.updateLoyaltyCard(mDatabase, viewModel.getLoyaltyCardId(), viewModel.getLoyaltyCard().store, viewModel.getLoyaltyCard().note, viewModel.getLoyaltyCard().validFrom, viewModel.getLoyaltyCard().expiry, viewModel.getLoyaltyCard().balance, viewModel.getLoyaltyCard().balanceType, viewModel.getLoyaltyCard().cardId, viewModel.getLoyaltyCard().barcodeId, viewModel.getLoyaltyCard().barcodeType, viewModel.getLoyaltyCard().headerColor, viewModel.getLoyaltyCard().starStatus, null, viewModel.getLoyaltyCard().archiveStatus); + DBHelper.updateLoyaltyCard(mDatabase, viewModel.getLoyaltyCardId(), viewModel.getLoyaltyCard().store, viewModel.getLoyaltyCard().note, viewModel.getLoyaltyCard().validFrom, viewModel.getLoyaltyCard().expiry, viewModel.getLoyaltyCard().balance, viewModel.getLoyaltyCard().defaultBalanceChange, viewModel.getLoyaltyCard().balanceType, viewModel.getLoyaltyCard().cardId, viewModel.getLoyaltyCard().barcodeId, viewModel.getLoyaltyCard().barcodeType, viewModel.getLoyaltyCard().headerColor, viewModel.getLoyaltyCard().starStatus, null, viewModel.getLoyaltyCard().archiveStatus); } else { - viewModel.setLoyaltyCardId((int) DBHelper.insertLoyaltyCard(mDatabase, viewModel.getLoyaltyCard().store, viewModel.getLoyaltyCard().note, viewModel.getLoyaltyCard().validFrom, viewModel.getLoyaltyCard().expiry, viewModel.getLoyaltyCard().balance, viewModel.getLoyaltyCard().balanceType, viewModel.getLoyaltyCard().cardId, viewModel.getLoyaltyCard().barcodeId, viewModel.getLoyaltyCard().barcodeType, viewModel.getLoyaltyCard().headerColor, 0, null, 0)); + viewModel.setLoyaltyCardId((int) DBHelper.insertLoyaltyCard(mDatabase, viewModel.getLoyaltyCard().store, viewModel.getLoyaltyCard().note, viewModel.getLoyaltyCard().validFrom, viewModel.getLoyaltyCard().expiry, viewModel.getLoyaltyCard().balance, viewModel.getLoyaltyCard().defaultBalanceChange, viewModel.getLoyaltyCard().balanceType, viewModel.getLoyaltyCard().cardId, viewModel.getLoyaltyCard().barcodeId, viewModel.getLoyaltyCard().barcodeType, viewModel.getLoyaltyCard().headerColor, 0, null, 0)); } try { diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index eeb9383ba4..8a25556f1c 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -492,6 +492,8 @@ private void showBalanceUpdateDialog() { input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); input.setKeyListener(DigitsKeyListener.getInstance("0123456789,.")); input.setHint(R.string.updateBalanceHint); + final String defaultBalanceChangeText = loyaltyCard.defaultBalanceChange == null ? "" : loyaltyCard.defaultBalanceChange.toString(); + input.setText(defaultBalanceChangeText); layout.addView(input); layout.setLayoutParams(params); @@ -565,8 +567,10 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { dialog.show(); // Disable buttons (must be done **after** dialog is shown to prevent crash - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); - dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false); + if (defaultBalanceChangeText.isEmpty()) { + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); + dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false); + } // Set focus on input field dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); diff --git a/app/src/main/java/protect/card_locker/PkpassParser.kt b/app/src/main/java/protect/card_locker/PkpassParser.kt index 918d8b69b9..a60f03deed 100644 --- a/app/src/main/java/protect/card_locker/PkpassParser.kt +++ b/app/src/main/java/protect/card_locker/PkpassParser.kt @@ -33,6 +33,7 @@ class PkpassParser(context: Context, uri: Uri?) { private var validFrom: Date? = null private var expiry: Date? = null private val balance: BigDecimal = BigDecimal(0) + private val defaultBalanceChange: BigDecimal? = null private val balanceType: Currency? = null // FIXME: Some cards may not have any barcodes, but Catima doesn't accept null card ID // An empty string card ID would prevent a crash, but would be blocked in the edit activity @@ -121,6 +122,7 @@ class PkpassParser(context: Context, uri: Uri?) { validFrom, expiry, balance, + defaultBalanceChange, balanceType, cardId, barcodeId, diff --git a/app/src/main/java/protect/card_locker/contentprovider/CardsContentProvider.java b/app/src/main/java/protect/card_locker/contentprovider/CardsContentProvider.java index 44d5b23781..0db57e8047 100644 --- a/app/src/main/java/protect/card_locker/contentprovider/CardsContentProvider.java +++ b/app/src/main/java/protect/card_locker/contentprovider/CardsContentProvider.java @@ -46,6 +46,7 @@ public static class Version { LoyaltyCardDbIds.VALID_FROM, LoyaltyCardDbIds.EXPIRY, LoyaltyCardDbIds.BALANCE, + LoyaltyCardDbIds.DEFAULT_BALANCE_CHANGE, LoyaltyCardDbIds.BALANCE_TYPE, LoyaltyCardDbIds.NOTE, LoyaltyCardDbIds.HEADER_COLOR, diff --git a/app/src/main/java/protect/card_locker/importexport/CatimaExporter.java b/app/src/main/java/protect/card_locker/importexport/CatimaExporter.java index 6803e3cf24..b9b35f8e9d 100644 --- a/app/src/main/java/protect/card_locker/importexport/CatimaExporter.java +++ b/app/src/main/java/protect/card_locker/importexport/CatimaExporter.java @@ -130,6 +130,7 @@ private void writeCSV(Context context, SQLiteDatabase database, OutputStreamWrit DBHelper.LoyaltyCardDbIds.VALID_FROM, DBHelper.LoyaltyCardDbIds.EXPIRY, DBHelper.LoyaltyCardDbIds.BALANCE, + DBHelper.LoyaltyCardDbIds.DEFAULT_BALANCE_CHANGE, DBHelper.LoyaltyCardDbIds.BALANCE_TYPE, DBHelper.LoyaltyCardDbIds.CARD_ID, DBHelper.LoyaltyCardDbIds.BARCODE_ID, @@ -150,6 +151,7 @@ private void writeCSV(Context context, SQLiteDatabase database, OutputStreamWrit card.validFrom != null ? card.validFrom.getTime() : "", card.expiry != null ? card.expiry.getTime() : "", card.balance, + card.defaultBalanceChange, card.balanceType, card.cardId, card.barcodeId, diff --git a/app/src/main/java/protect/card_locker/importexport/CatimaImporter.java b/app/src/main/java/protect/card_locker/importexport/CatimaImporter.java index 5cc348895c..edfb2a804c 100644 --- a/app/src/main/java/protect/card_locker/importexport/CatimaImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/CatimaImporter.java @@ -126,10 +126,10 @@ public Map saveAndDeduplicate(Context context, SQLiteDatabase for (LoyaltyCard card : data.cards) { LoyaltyCard existing = DBHelper.getLoyaltyCard(context, database, card.id); if (existing == null) { - DBHelper.insertLoyaltyCard(database, card.id, card.store, card.note, card.validFrom, card.expiry, card.balance, card.balanceType, + DBHelper.insertLoyaltyCard(database, card.id, card.store, card.note, card.validFrom, card.expiry, card.balance, card.defaultBalanceChange, card.balanceType, card.cardId, card.barcodeId, card.barcodeType, card.headerColor, card.starStatus, card.lastUsed, card.archiveStatus); } else if (!isDuplicate(context, existing, card, existingImages, imageChecksums)) { - long newId = DBHelper.insertLoyaltyCard(database, card.store, card.note, card.validFrom, card.expiry, card.balance, card.balanceType, + long newId = DBHelper.insertLoyaltyCard(database, card.store, card.note, card.validFrom, card.expiry, card.balance, card.defaultBalanceChange, card.balanceType, card.cardId, card.barcodeId, card.barcodeType, card.headerColor, card.starStatus, card.lastUsed, card.archiveStatus); idMap.put(card.id, (int) newId); } @@ -436,6 +436,15 @@ private LoyaltyCard importLoyaltyCard(CSVRecord record) throws FormatException { } } + BigDecimal defaultBalanceChange = null; + String unparsedDefaultBalanceChange = CSVHelpers.extractString(DBHelper.LoyaltyCardDbIds.DEFAULT_BALANCE_CHANGE, record, null); + if (unparsedDefaultBalanceChange != null) { + try { + defaultBalanceChange = new BigDecimal(unparsedDefaultBalanceChange); + } catch (NumberFormatException ignored) { + } + } + Currency balanceType = null; String unparsedBalanceType = CSVHelpers.extractString(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE, record, ""); if (!unparsedBalanceType.isEmpty()) { @@ -497,6 +506,7 @@ private LoyaltyCard importLoyaltyCard(CSVRecord record) throws FormatException { validFrom, expiry, balance, + defaultBalanceChange, balanceType, cardId, barcodeId, 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 d60786ff60..cca6c491b6 100644 --- a/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java @@ -157,6 +157,7 @@ private LoyaltyCard importLoyaltyCard(Context context, CSVRecord record) throws null, BigDecimal.valueOf(0), null, + null, cardId, null, barcodeType, @@ -180,7 +181,7 @@ public void saveAndDeduplicate(SQLiteDatabase database, final ImportedData data) // Proper deduplication for all formats will be implemented later for (LoyaltyCard card : data.cards) { // Do not use card.id which is set to -1 - DBHelper.insertLoyaltyCard(database, card.store, card.note, card.validFrom, card.expiry, card.balance, card.balanceType, + DBHelper.insertLoyaltyCard(database, card.store, card.note, card.validFrom, card.expiry, card.balance, card.defaultBalanceChange, card.balanceType, card.cardId, card.barcodeId, card.barcodeType, card.headerColor, card.starStatus, card.lastUsed, card.archiveStatus); } } diff --git a/app/src/main/java/protect/card_locker/importexport/StocardImporter.java b/app/src/main/java/protect/card_locker/importexport/StocardImporter.java index dd7ffe7e88..cd705de2da 100644 --- a/app/src/main/java/protect/card_locker/importexport/StocardImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/StocardImporter.java @@ -362,6 +362,7 @@ public ImportedData importLoyaltyCardHashMap(Context context, final ZIPData zipD null, BigDecimal.valueOf(0), null, + null, record.cardId, null, barcodeType, @@ -404,7 +405,7 @@ public void saveAndDeduplicate(Context context, SQLiteDatabase database, final I // Proper deduplication for all formats will be implemented later for (LoyaltyCard card : data.cards) { // card.id is temporary and only used to index the images Map - long id = DBHelper.insertLoyaltyCard(database, card.store, card.note, card.validFrom, card.expiry, card.balance, card.balanceType, + long id = DBHelper.insertLoyaltyCard(database, card.store, card.note, card.validFrom, card.expiry, card.balance, card.defaultBalanceChange, card.balanceType, card.cardId, card.barcodeId, card.barcodeType, card.headerColor, card.starStatus, card.lastUsed, card.archiveStatus); for (Map.Entry entry : data.images.get(card.id).entrySet()) { Utils.saveCardImage(context, entry.getValue(), (int) id, entry.getKey()); 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 bf0dc076a7..b74c728889 100644 --- a/app/src/main/java/protect/card_locker/importexport/VoucherVaultImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/VoucherVaultImporter.java @@ -92,6 +92,8 @@ public ImportedData importJSON(JSONArray jsonArray) throws FormatException, JSON balance = new BigDecimal(String.valueOf(jsonCard.getDouble("balance"))); } + BigDecimal defaultBalanceChange = null; + Currency balanceType = Currency.getInstance("USD"); String cardId = jsonCard.getString("code"); @@ -158,6 +160,7 @@ public ImportedData importJSON(JSONArray jsonArray) throws FormatException, JSON null, expiry, balance, + defaultBalanceChange, balanceType, cardId, null, @@ -185,7 +188,7 @@ public void saveAndDeduplicate(SQLiteDatabase database, final ImportedData data) // Proper deduplication for all formats will be implemented later for (LoyaltyCard card : data.cards) { // Do not use card.id which is set to -1 - DBHelper.insertLoyaltyCard(database, card.store, card.note, card.validFrom, card.expiry, card.balance, card.balanceType, + DBHelper.insertLoyaltyCard(database, card.store, card.note, card.validFrom, card.expiry, card.balance, card.defaultBalanceChange, card.balanceType, card.cardId, card.barcodeId, card.barcodeType, card.headerColor, card.starStatus, card.lastUsed, card.archiveStatus); } } 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 d310cc5e28..0ebcdac0d4 100644 --- a/app/src/main/res/layout/loyalty_card_edit_activity.xml +++ b/app/src/main/res/layout/loyalty_card_edit_activity.xml @@ -314,6 +314,34 @@ + + + + + + + + + + + Could not read the image Balance Currency + Default Balance Change Points Invalid balance Import data from diff --git a/app/src/test/java/protect/card_locker/DatabaseTest.java b/app/src/test/java/protect/card_locker/DatabaseTest.java index 5c89dc82e9..ff68b4d0a7 100644 --- a/app/src/test/java/protect/card_locker/DatabaseTest.java +++ b/app/src/test/java/protect/card_locker/DatabaseTest.java @@ -41,7 +41,7 @@ public void setUp() { @Test public void addRemoveOneGiftCard() { assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); - long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0); + long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0); boolean result = (id != -1); assertTrue(result); assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); @@ -69,12 +69,12 @@ public void addRemoveOneGiftCard() { @Test public void updateGiftCard() { - long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0); + long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0); boolean result = (id != -1); assertTrue(result); assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); - result = DBHelper.updateLoyaltyCard(mDatabase, 1, "store1", "note1", null, null, new BigDecimal("10.00"), Currency.getInstance("EUR"), "cardId1", null, CatimaBarcode.fromBarcode(BarcodeFormat.AZTEC), DEFAULT_HEADER_COLOR, 0, null, 0); + result = DBHelper.updateLoyaltyCard(mDatabase, 1, "store1", "note1", null, null, new BigDecimal("10.00"), null, Currency.getInstance("EUR"), "cardId1", null, CatimaBarcode.fromBarcode(BarcodeFormat.AZTEC), DEFAULT_HEADER_COLOR, 0, null, 0); assertTrue(result); assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); @@ -96,7 +96,7 @@ public void updateGiftCard() { @Test public void updateGiftCardOnlyStar() { - long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0); + long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0); boolean result = (id != -1); assertTrue(result); assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); @@ -125,7 +125,7 @@ public void updateGiftCardOnlyStar() { public void updateMissingGiftCard() { assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); - boolean result = DBHelper.updateLoyaltyCard(mDatabase, 1, "store1", "note1", null, null, new BigDecimal("0"), null, "cardId1", + boolean result = DBHelper.updateLoyaltyCard(mDatabase, 1, "store1", "note1", null, null, new BigDecimal("0"), null, null, "cardId1", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null, 0); assertEquals(false, result); assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); @@ -133,7 +133,7 @@ public void updateMissingGiftCard() { @Test public void emptyGiftCardValues() { - long id = DBHelper.insertLoyaltyCard(mDatabase, "", "", null, null, new BigDecimal("0"), null, "", null, null, null, 0, null,0); + long id = DBHelper.insertLoyaltyCard(mDatabase, "", "", null, null, new BigDecimal("0"), null, null, "", null, null, null, 0, null,0); boolean result = (id != -1); assertTrue(result); assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); @@ -161,7 +161,7 @@ public void giftCardsViaCursor() { // Add the gift cards in reverse order, to ensure // that they are sorted for (int index = CARDS_TO_ADD - 1; index >= 0; index--) { - long id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, null, new BigDecimal("0"), null, "cardId" + index, + long id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, null, new BigDecimal("0"), null, null, "cardId" + index, null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 0, null,0); boolean result = (id != -1); assertTrue(result); @@ -182,6 +182,7 @@ public void giftCardsViaCursor() { assertEquals(0, cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.VALID_FROM))); assertEquals(0, cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXPIRY))); assertEquals("0", cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE))); + assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.DEFAULT_BALANCE_CHANGE))); assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE))); assertEquals("cardId" + index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID))); assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ID))); @@ -207,10 +208,10 @@ public void giftCardsViaCursor() { // that they are sorted for (int index = CARDS_TO_ADD - 1; index >= 0; index--) { if (index == CARDS_TO_ADD - 1) { - id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, null, new BigDecimal("0"), null, "cardId" + index, + id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, null, new BigDecimal("0"), null, null, "cardId" + index, null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 1, null,0); } else { - id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, null, new BigDecimal("0"), null, "cardId" + index, + id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, null, new BigDecimal("0"), null, null, "cardId" + index, null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 0, null,0); } boolean result = (id != -1); @@ -231,6 +232,7 @@ public void giftCardsViaCursor() { assertEquals(0, cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.VALID_FROM))); assertEquals(0, cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXPIRY))); assertEquals("0", cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE))); + assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.DEFAULT_BALANCE_CHANGE))); assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE))); assertEquals("cardId" + index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID))); assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ID))); @@ -246,6 +248,7 @@ public void giftCardsViaCursor() { assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.VALID_FROM))); assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXPIRY))); assertEquals("0", cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE))); + assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.DEFAULT_BALANCE_CHANGE))); assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE))); assertEquals("cardId" + index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID))); assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ID))); @@ -310,7 +313,7 @@ public void addRemoveOneGroup() { public void updateGroup() { // Create card assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); - long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0); + long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0); boolean result = (id != -1); assertTrue(result); assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); @@ -422,7 +425,7 @@ public void updateGroupDuplicate() { public void cardAddAndRemoveGroups() { // Create card assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); - long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0); + long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0); boolean result = (id != -1); assertTrue(result); assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); @@ -516,7 +519,7 @@ public void databaseUpgradeFromVersion1() { @Test public void updateGiftCardOnlyBalance() { - long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0); + long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("100"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0); boolean result = (id != -1); assertTrue(result); assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); diff --git a/app/src/test/java/protect/card_locker/ImportExportTest.java b/app/src/test/java/protect/card_locker/ImportExportTest.java index 13bf3eb4a2..6939465b23 100644 --- a/app/src/test/java/protect/card_locker/ImportExportTest.java +++ b/app/src/test/java/protect/card_locker/ImportExportTest.java @@ -73,7 +73,7 @@ private void addLoyaltyCardsFiveStarred() { for (int index = cardsToAdd; index > 4; index--) { String storeName = String.format("store, \"%4d", index); String note = String.format("note, \"%4d", index); - long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 1, null,0); + long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, null, BARCODE_DATA, null, BARCODE_TYPE, index, 1, null,0); boolean result = (id != -1); assertTrue(result); } @@ -81,7 +81,7 @@ private void addLoyaltyCardsFiveStarred() { String storeName = String.format("store, \"%4d", index); String note = String.format("note, \"%4d", index); //if index is even - long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null,0); + long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null,0); boolean result = (id != -1); assertTrue(result); } @@ -90,7 +90,7 @@ private void addLoyaltyCardsFiveStarred() { @Test public void addLoyaltyCardsWithExpiryNeverPastTodayFuture() { - long id = DBHelper.insertLoyaltyCard(mDatabase, "No Expiry", "", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0); + long id = DBHelper.insertLoyaltyCard(mDatabase, "No Expiry", "", null, null, new BigDecimal("0"), null, null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0); boolean result = (id != -1); assertTrue(result); @@ -100,6 +100,7 @@ public void addLoyaltyCardsWithExpiryNeverPastTodayFuture() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals(BARCODE_DATA, card.cardId); assertEquals(null, card.barcodeId); @@ -107,7 +108,7 @@ public void addLoyaltyCardsWithExpiryNeverPastTodayFuture() { assertEquals(Integer.valueOf(0), card.headerColor); assertEquals(0, card.starStatus); - id = DBHelper.insertLoyaltyCard(mDatabase, "Past", "", null, new Date((long) 1), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0); + id = DBHelper.insertLoyaltyCard(mDatabase, "Past", "", null, new Date((long) 1), new BigDecimal("0"), null, null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0); result = (id != -1); assertTrue(result); @@ -117,6 +118,7 @@ public void addLoyaltyCardsWithExpiryNeverPastTodayFuture() { assertEquals(null, card.validFrom); assertTrue(card.expiry.before(new Date())); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals(BARCODE_DATA, card.cardId); assertEquals(null, card.barcodeId); @@ -124,7 +126,7 @@ public void addLoyaltyCardsWithExpiryNeverPastTodayFuture() { assertEquals(Integer.valueOf(0), card.headerColor); assertEquals(0, card.starStatus); - id = DBHelper.insertLoyaltyCard(mDatabase, "Today", "", null, new Date(), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0); + id = DBHelper.insertLoyaltyCard(mDatabase, "Today", "", null, new Date(), new BigDecimal("0"), null, null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0); result = (id != -1); assertTrue(result); @@ -135,6 +137,7 @@ public void addLoyaltyCardsWithExpiryNeverPastTodayFuture() { assertTrue(card.expiry.before(new Date(new Date().getTime() + 86400))); assertTrue(card.expiry.after(new Date(new Date().getTime() - 86400))); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals(BARCODE_DATA, card.cardId); assertEquals(null, card.barcodeId); @@ -144,7 +147,7 @@ public void addLoyaltyCardsWithExpiryNeverPastTodayFuture() { // This will break after 19 January 2038 // If someone is still maintaining this code base by then: I love you - id = DBHelper.insertLoyaltyCard(mDatabase, "Future", "", null, new Date(2147483648000L), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0); + id = DBHelper.insertLoyaltyCard(mDatabase, "Future", "", null, new Date(2147483648000L), new BigDecimal("0"), null, null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0); result = (id != -1); assertTrue(result); @@ -154,6 +157,7 @@ public void addLoyaltyCardsWithExpiryNeverPastTodayFuture() { assertEquals(null, card.validFrom); assertTrue(card.expiry.after(new Date(new Date().getTime() + 86400))); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals(BARCODE_DATA, card.cardId); assertEquals(null, card.barcodeId); @@ -184,6 +188,7 @@ private void checkLoyaltyCards() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal(String.valueOf(index)), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals(BARCODE_DATA, card.cardId); assertEquals(null, card.barcodeId); @@ -215,6 +220,7 @@ private void checkLoyaltyCardsAndDuplicates(int numCards) { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal(String.valueOf(balance)), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals(BARCODE_DATA, card.cardId); assertEquals(null, card.barcodeId); @@ -246,6 +252,7 @@ private void checkLoyaltyCardsFiveStarred() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal(String.valueOf(index)), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals(BARCODE_DATA, card.cardId); assertEquals(null, card.barcodeId); @@ -268,6 +275,7 @@ private void checkLoyaltyCardsFiveStarred() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal(String.valueOf(index)), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals(BARCODE_DATA, card.cardId); assertEquals(null, card.barcodeId); @@ -805,6 +813,7 @@ public void importWithInvalidStarFieldV1() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals("12345", card.cardId); assertEquals(null, card.barcodeId); @@ -830,7 +839,7 @@ public void exportImportV2Zip() throws FileNotFoundException { HashMap loyaltyCardIconImages = new HashMap<>(); // Create card 1 - int loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 1", "Note 1", new Date(1601510400), new Date(1618053234), new BigDecimal("100"), Currency.getInstance("USD"), "1234", "5432", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), 1, 0, null,0); + int loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 1", "Note 1", new Date(1601510400), new Date(1618053234), new BigDecimal("100"), null, Currency.getInstance("USD"), "1234", "5432", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), 1, 0, null,0); loyaltyCardHashMap.put(loyaltyCardId, DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, loyaltyCardId)); DBHelper.insertGroup(mDatabase, "One"); List groups = Arrays.asList(DBHelper.getGroup(mDatabase, "One")); @@ -844,7 +853,7 @@ public void exportImportV2Zip() throws FileNotFoundException { loyaltyCardIconImages.put(loyaltyCardId, bitmap1); // Create card 2 - loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 2", "", null, null, new BigDecimal(0), null, "123456", null, null, 2, 1, null,0); + loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 2", "", null, null, new BigDecimal(0), null, null, "123456", null, null, 2, 1, null,0); loyaltyCardHashMap.put(loyaltyCardId, DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, loyaltyCardId)); // Export everything @@ -871,6 +880,7 @@ public void exportImportV2Zip() throws FileNotFoundException { assertEquals(loyaltyCard.validFrom, dbLoyaltyCard.validFrom); assertEquals(loyaltyCard.expiry, dbLoyaltyCard.expiry); assertEquals(loyaltyCard.balance, dbLoyaltyCard.balance); + assertEquals(loyaltyCard.defaultBalanceChange, dbLoyaltyCard.defaultBalanceChange); assertEquals(loyaltyCard.cardId, dbLoyaltyCard.cardId); assertEquals(loyaltyCard.barcodeId, dbLoyaltyCard.barcodeId); assertEquals(loyaltyCard.starStatus, dbLoyaltyCard.starStatus); @@ -957,6 +967,7 @@ public void importV2CSV() { assertEquals(new Date(1601510400), card1.validFrom); assertEquals(new Date(1618053234), card1.expiry); assertEquals(new BigDecimal("100"), card1.balance); + assertEquals(new BigDecimal("1"), card1.defaultBalanceChange); assertEquals(Currency.getInstance("USD"), card1.balanceType); assertEquals("1234", card1.cardId); assertEquals("5432", card1.barcodeId); @@ -974,6 +985,7 @@ public void importV2CSV() { assertEquals(null, card8.validFrom); assertEquals(null, card8.expiry); assertEquals(new BigDecimal("0"), card8.balance); + assertEquals(null, card8.defaultBalanceChange); assertEquals(null, card8.balanceType); assertEquals("a", card8.cardId); assertEquals(null, card8.barcodeId); @@ -991,6 +1003,7 @@ public void importV2CSV() { assertEquals(null, card2.validFrom); assertEquals(new Date(1618041729), card2.expiry); assertEquals(new BigDecimal("0"), card2.balance); + assertEquals(null, card2.defaultBalanceChange); assertEquals(null, card2.balanceType); assertEquals("A", card2.cardId); assertEquals(null, card2.barcodeId); @@ -1008,6 +1021,7 @@ public void importV2CSV() { assertEquals(null, card3.validFrom); assertEquals(null, card3.expiry); assertEquals(new BigDecimal("150"), card3.balance); + assertEquals(null, card3.defaultBalanceChange); assertEquals(null, card3.balanceType); assertEquals("dhd", card3.cardId); assertEquals(null, card3.barcodeId); @@ -1025,6 +1039,7 @@ public void importV2CSV() { assertEquals(null, card4.validFrom); assertEquals(null, card4.expiry); assertEquals(new BigDecimal("0"), card4.balance); + assertEquals(null, card4.defaultBalanceChange); assertEquals(null, card4.balanceType); assertEquals("dhshsvshs", card4.cardId); assertEquals(null, card4.barcodeId); @@ -1042,6 +1057,7 @@ public void importV2CSV() { assertEquals(null, card5.validFrom); assertEquals(null, card5.expiry); assertEquals(new BigDecimal("0"), card5.balance); + assertEquals(null, card5.defaultBalanceChange); assertEquals(null, card5.balanceType); assertEquals("98765432", card5.cardId); assertEquals("23456", card5.barcodeId); @@ -1059,6 +1075,7 @@ public void importV2CSV() { assertEquals(null, card6.validFrom); assertEquals(null, card6.expiry); assertEquals(new BigDecimal("12.50"), card6.balance); + assertEquals(new BigDecimal("1.23"), card6.defaultBalanceChange); assertEquals(Currency.getInstance("EUR"), card6.balanceType); assertEquals("a", card6.cardId); assertEquals("-5317", card6.barcodeId); @@ -1088,6 +1105,7 @@ public void importFidme() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals("82825292629272726", card.cardId); assertEquals(null, card.barcodeId); @@ -1101,6 +1119,7 @@ public void importFidme() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals("123456", card.cardId); assertEquals(null, card.barcodeId); @@ -1114,6 +1133,7 @@ public void importFidme() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals("123435363634", card.cardId); assertEquals(null, card.barcodeId); @@ -1145,6 +1165,7 @@ public void importStocard() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals("7649484", card.cardId); assertEquals(null, card.barcodeId); @@ -1163,6 +1184,7 @@ public void importStocard() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals("55555", card.cardId); assertEquals(null, card.barcodeId); @@ -1181,6 +1203,7 @@ public void importStocard() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals("(01)09010374000019(21)02097564604859211217(10)01231287693", card.cardId); assertEquals(null, card.barcodeId); @@ -1212,6 +1235,7 @@ public void importStocard2() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals("1234567895", card.cardId); assertEquals(null, card.barcodeId); @@ -1230,6 +1254,7 @@ public void importStocard2() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals("7649484", card.cardId); assertEquals(null, card.barcodeId); @@ -1248,6 +1273,7 @@ public void importStocard2() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals("55555", card.cardId); assertEquals(null, card.barcodeId); @@ -1266,6 +1292,7 @@ public void importStocard2() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(null, card.balanceType); assertEquals("(01)09010374000019(21)02097564604859211217(10)01231287693", card.cardId); assertEquals(null, card.barcodeId); @@ -1296,6 +1323,7 @@ public void importVoucherVault() { assertEquals(null, card.validFrom); assertEquals(null, card.expiry); assertEquals(new BigDecimal("0"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(Currency.getInstance("USD"), card.balanceType); assertEquals("123456", card.cardId); assertEquals(null, card.barcodeId); @@ -1310,6 +1338,7 @@ public void importVoucherVault() { assertEquals(null, card.validFrom); assertEquals(new Date(1616716800000L), card.expiry); assertEquals(new BigDecimal("3.5"), card.balance); + assertEquals(null, card.defaultBalanceChange); assertEquals(Currency.getInstance("USD"), card.balanceType); assertEquals("26846363", card.cardId); assertEquals(null, card.barcodeId); diff --git a/app/src/test/java/protect/card_locker/ImportURITest.java b/app/src/test/java/protect/card_locker/ImportURITest.java index f0b8678271..f276269b1a 100644 --- a/app/src/test/java/protect/card_locker/ImportURITest.java +++ b/app/src/test/java/protect/card_locker/ImportURITest.java @@ -41,7 +41,7 @@ public void ensureNoDataLoss() throws InvalidObjectException, UnsupportedEncodin // Generate card Date date = new Date(); - DBHelper.insertLoyaltyCard(mDatabase, "store", "This note contains evil symbols like & and = that will break the parser if not escaped right $#!%()*+;:á", date, date, new BigDecimal("100"), null, BarcodeFormat.UPC_E.toString(), BarcodeFormat.UPC_A.toString(), CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), Color.BLACK, 1, null,0); + DBHelper.insertLoyaltyCard(mDatabase, "store", "This note contains evil symbols like & and = that will break the parser if not escaped right $#!%()*+;:á", date, date, new BigDecimal("100"), null, null, BarcodeFormat.UPC_E.toString(), BarcodeFormat.UPC_A.toString(), CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), Color.BLACK, 1, null,0); // Get card LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1); @@ -71,7 +71,7 @@ public void ensureNoDataLoss() throws InvalidObjectException, UnsupportedEncodin @Test public void ensureNoCrashOnMissingHeaderFields() throws InvalidObjectException, UnsupportedEncodingException { // Generate card - DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), null, 0, null,0); + DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), null, Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), null, 0, null,0); // Get card LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1); @@ -88,6 +88,7 @@ public void ensureNoCrashOnMissingHeaderFields() throws InvalidObjectException, assertEquals(card.validFrom, parsedCard.validFrom); assertEquals(card.expiry, parsedCard.expiry); assertEquals(card.balance, parsedCard.balance); + assertEquals(card.defaultBalanceChange, parsedCard.defaultBalanceChange); assertEquals(card.balanceType, parsedCard.balanceType); assertEquals(card.cardId, parsedCard.cardId); assertEquals(card.barcodeId, parsedCard.barcodeId); @@ -101,7 +102,7 @@ public void ensureNoCrashOnMissingHeaderFields() throws InvalidObjectException, @Test public void parseWithTrailingSlash() throws InvalidObjectException, UnsupportedEncodingException { // Generate card - DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), null, 0, null,0); + DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), null, Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), null, 0, null,0); // Get card LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1); @@ -119,6 +120,7 @@ public void parseWithTrailingSlash() throws InvalidObjectException, UnsupportedE assertEquals(card.validFrom, parsedCard.validFrom); assertEquals(card.expiry, parsedCard.expiry); assertEquals(card.balance, parsedCard.balance); + assertEquals(card.defaultBalanceChange, parsedCard.defaultBalanceChange); assertEquals(card.balanceType, parsedCard.balanceType); assertEquals(card.cardId, parsedCard.cardId); assertEquals(card.barcodeId, parsedCard.barcodeId); @@ -179,6 +181,7 @@ public void parseAdditionalUnforeseenData() { assertEquals(null, parsedCard.validFrom); assertEquals(null, parsedCard.expiry); assertEquals(new BigDecimal("0"), parsedCard.balance); + assertEquals(null, parsedCard.defaultBalanceChange); assertEquals(null, parsedCard.balanceType); assertEquals("12345", parsedCard.cardId); assertEquals(null, parsedCard.barcodeId); diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java index 7f647c1614..7f0da14d8d 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java @@ -96,7 +96,7 @@ private void checkView(final View view, final String store, final String note, f @Test public void TestCursorAdapterEmptyNote() { - DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); + DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1); Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); @@ -111,7 +111,7 @@ public void TestCursorAdapterEmptyNote() { @Test public void TestCursorAdapterWithNote() { - DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); + DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1); Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); @@ -126,10 +126,10 @@ public void TestCursorAdapterWithNote() { @Test public void TestCursorAdapterStarring() { - assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeA", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,1)); - assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeB", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,1)); - assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeC", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0)); - assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeD", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,0)); + assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeA", "note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,1)); + assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeB", "note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,1)); + assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeC", "note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0)); + assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeD", "note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,0)); assertEquals(4, DBHelper.getLoyaltyCardCount(mDatabase)); @@ -177,7 +177,7 @@ public void TestCursorAdapterStarring() { @Test public void TestCursorAdapter0Points() { - DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); + DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1); Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); @@ -192,7 +192,7 @@ public void TestCursorAdapter0Points() { @Test public void TestCursorAdapter0EUR() { - DBHelper.insertLoyaltyCard(mDatabase,"store", "", null, null, new BigDecimal("0"), Currency.getInstance("EUR"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); + DBHelper.insertLoyaltyCard(mDatabase,"store", "", null, null, new BigDecimal("0"), null, Currency.getInstance("EUR"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1); Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); @@ -207,7 +207,7 @@ public void TestCursorAdapter0EUR() { @Test public void TestCursorAdapter100Points() { - DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); + DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("100"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1); Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); @@ -222,7 +222,7 @@ public void TestCursorAdapter100Points() { @Test public void TestCursorAdapter10USD() { - DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("USD"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); + DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), null, Currency.getInstance("USD"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1); Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index 2fc8d6121f..7007520003 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -379,7 +379,7 @@ public void noDataLossOnResumeOrRotate() { System.out.println(); if (!newCard) { - cardId = (int) DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); + cardId = (int) DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); } else { cardId = null; } @@ -627,7 +627,7 @@ public void startWithLoyaltyCardEditModeCheckDisplay() throws IOException { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -647,7 +647,7 @@ public void startWithLoyaltyCardViewModeCheckDisplay() { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -666,7 +666,7 @@ public void startWithLoyaltyCardWithBarcodeUpdateBarcode() throws IOException { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -691,7 +691,7 @@ public void startWithLoyaltyCardWithReceiptUpdateReceiptCancel() throws IOExcept final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId); LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get(); @@ -730,7 +730,7 @@ public void startWithLoyaltyCardNoExpirySetExpiry() throws IOException { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -763,7 +763,7 @@ public void startWithLoyaltyCardExpirySetNoExpiry() throws IOException { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, new Date(), new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, new Date(), new BigDecimal("0"), null, null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -788,7 +788,7 @@ public void startWithLoyaltyCardNoBalanceSetBalance() throws IOException { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -839,7 +839,7 @@ public void startWithLoyaltyCardBalanceSetNoBalance() throws IOException { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("USD"), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("10.00"), null, Currency.getInstance("USD"), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -880,7 +880,7 @@ public void startWithLoyaltyCardSameAsCardIDUpdateBarcodeID() { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -912,7 +912,7 @@ public void startWithLoyaltyCardSameAsCardIDUpdateCardID() { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -946,7 +946,7 @@ public void startWithLoyaltyCardDifferentFromCardIDUpdateCardIDUpdate() { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -983,7 +983,7 @@ public void startWithLoyaltyCardDifferentFromCardIDUpdateCardIDDoNotUpdate() { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -1020,7 +1020,7 @@ public void checkMenu() throws IOException { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -1065,7 +1065,7 @@ public void startWithoutParametersViewBack() { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -1086,7 +1086,7 @@ public void startWithoutColors() { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -1107,7 +1107,7 @@ public void startLoyaltyCardWithoutColorsSave() throws IOException, ParseExcepti final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -1127,7 +1127,7 @@ public void startLoyaltyCardWithExplicitNoBarcodeSave() throws IOException, Pars final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, BARCODE_DATA, null, null, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -1147,7 +1147,7 @@ public void removeBarcodeFromLoyaltyCard() throws IOException, ParseException { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -1178,7 +1178,7 @@ public void checkPushStarIcon() { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId); Activity activity = (Activity) activityController.get(); @@ -1215,7 +1215,7 @@ public void checkBarcodeFullscreenWorkflow() { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId); AppCompatActivity activity = (AppCompatActivity) activityController.get(); @@ -1311,7 +1311,7 @@ public void checkNoBarcodeFullscreenWorkflow() { final Context context = ApplicationProvider.getApplicationContext(); SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase(); - long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null, 0); + long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, BARCODE_DATA, null, null, Color.BLACK, 0, null, 0); ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId); AppCompatActivity activity = (AppCompatActivity) activityController.get(); diff --git a/app/src/test/java/protect/card_locker/MainActivityTest.java b/app/src/test/java/protect/card_locker/MainActivityTest.java index 1fb4a5aa22..922f8118a1 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 void addOneLoyaltyCard() { assertEquals(0, list.getAdapter().getItemCount()); SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase(); - DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); + DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); assertEquals(View.VISIBLE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); @@ -132,10 +132,10 @@ public void addFourLoyaltyCardsTwoStarred() // Main screen showing starred card assertEquals(0, list.getAdapter().getItemCount()); SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase(); - DBHelper.insertLoyaltyCard(database, "storeB", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); - DBHelper.insertLoyaltyCard(database, "storeA", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); - DBHelper.insertLoyaltyCard(database, "storeD", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,0); - DBHelper.insertLoyaltyCard(database, "storeC", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,0); + DBHelper.insertLoyaltyCard(database, "storeB", "note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); + DBHelper.insertLoyaltyCard(database, "storeA", "note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); + DBHelper.insertLoyaltyCard(database, "storeD", "note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,0); + DBHelper.insertLoyaltyCard(database, "storeC", "note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,0); assertEquals(View.VISIBLE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); @@ -229,8 +229,8 @@ public void testFiltering() { TabLayout groupTabs = mainActivity.findViewById(R.id.groups); SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase(); - DBHelper.insertLoyaltyCard(database, "The First Store", "Initial note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); - DBHelper.insertLoyaltyCard(database, "The Second Store", "Secondary note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); + DBHelper.insertLoyaltyCard(database, "The First Store", "Initial note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); + DBHelper.insertLoyaltyCard(database, "The Second Store", "Secondary note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); DBHelper.insertGroup(database, "Group one"); List groups = new ArrayList<>(); @@ -485,8 +485,8 @@ public void testSearchQueryRestorationAfterNavigatingBack() { SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase(); - DBHelper.insertLoyaltyCard(database, "The First Store", "Initial note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); - DBHelper.insertLoyaltyCard(database, "The Second Store", "Secondary note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); + DBHelper.insertLoyaltyCard(database, "The First Store", "Initial note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); + DBHelper.insertLoyaltyCard(database, "The Second Store", "Secondary note", null, null, new BigDecimal("0"), null, null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); String finalQuery = "store"; assert mSearchView != null; diff --git a/app/src/test/java/protect/card_locker/TestHelpers.java b/app/src/test/java/protect/card_locker/TestHelpers.java index 1704902a27..cd6b267769 100644 --- a/app/src/test/java/protect/card_locker/TestHelpers.java +++ b/app/src/test/java/protect/card_locker/TestHelpers.java @@ -55,7 +55,7 @@ public static void addLoyaltyCards(final SQLiteDatabase mDatabase, final int car for (int index = cardsToAdd; index > 0; index--) { String storeName = String.format("store, \"%4d", index); String note = String.format("note, \"%4d", index); - long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null,0); + long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null,0); boolean result = (id != -1); assertTrue(result); } diff --git a/app/src/test/java/protect/card_locker/contentprovider/CardsContentProviderTest.java b/app/src/test/java/protect/card_locker/contentprovider/CardsContentProviderTest.java index ffe75a6396..5e1567f0b1 100644 --- a/app/src/test/java/protect/card_locker/contentprovider/CardsContentProviderTest.java +++ b/app/src/test/java/protect/card_locker/contentprovider/CardsContentProviderTest.java @@ -90,6 +90,7 @@ public void testCards() { final Date validFrom = Date.from(Instant.ofEpochMilli(1687112209000L)); final Date expiry = Date.from(Instant.ofEpochMilli(1687112277000L)); final BigDecimal balance = new BigDecimal("123.20"); + final BigDecimal defaultBalanceChange = new BigDecimal("1.23"); final Currency balanceType = Currency.getInstance("EUR"); final String cardId = "a-card-id"; final String barcodeId = "barcode-id"; @@ -99,7 +100,7 @@ public void testCards() { final long lastUsed = 1687112282000L; final int archiveStatus = 1; long id = DBHelper.insertLoyaltyCard( - mDatabase, store, note, validFrom, expiry, balance, balanceType, + mDatabase, store, note, validFrom, expiry, balance, defaultBalanceChange, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed, archiveStatus ); @@ -109,7 +110,7 @@ public void testCards() { assertEquals("number of cards", 1, cursor.getCount()); final String[] expectedColumns = new String[]{ - "_id", "store", "validfrom", "expiry", "balance", "balancetype", + "_id", "store", "validfrom", "expiry", "balance", "defaultbalancechange", "balancetype", "note", "headercolor", "cardid", "barcodeid", "barcodetype", "starstatus", "lastused", "archive" }; diff --git a/app/src/test/res/protect/card_locker/catima_v2.csv b/app/src/test/res/protect/card_locker/catima_v2.csv index 57dbc79da0..bca83005b1 100644 --- a/app/src/test/res/protect/card_locker/catima_v2.csv +++ b/app/src/test/res/protect/card_locker/catima_v2.csv @@ -5,16 +5,16 @@ Health Food Fashion -_id,store,note,validfrom,expiry,balance,balancetype,cardid,barcodeid,headercolor,barcodetype,starstatus -1,Card 1,Note 1,1601510400,1618053234,100,USD,1234,5432,1,QR_CODE,0, -8,Clothes Store,Note about store,,,0,,a,,-5317,,0, -2,Department Store,,,1618041729,0,,A,,-9977996,,0, +_id,store,note,validfrom,expiry,balance,defaultbalancechange,balancetype,cardid,barcodeid,headercolor,barcodetype,starstatus +1,Card 1,Note 1,1601510400,1618053234,100,1,USD,1234,5432,1,QR_CODE,0, +8,Clothes Store,Note about store,,,0,,,a,,-5317,,0, +2,Department Store,,,1618041729,0,,,A,,-9977996,,0, 3,Grocery Store,"Multiline note about grocery store -with blank line",,,150,,dhd,,-9977996,,0, -4,Pharmacy,,,,0,,dhshsvshs,,-10902850,,1, -5,Restaurant,Note about restaurant here,,,0,,98765432,23456,-10902850,CODE_128,0, -6,Shoe Store,,,,12.50,EUR,a,-5317,,AZTEC,0, +with blank line",,,150,,,dhd,,-9977996,,0, +4,Pharmacy,,,,0,,,dhshsvshs,,-10902850,,1, +5,Restaurant,Note about restaurant here,,,0,,,98765432,23456,-10902850,CODE_128,0, +6,Shoe Store,,,,12.50,1.23,EUR,a,-5317,,AZTEC,0, cardId,groupId 8,Fashion diff --git a/docs/CONTENT_PROVIDER.md b/docs/CONTENT_PROVIDER.md index 1f841c6d08..7b03aa540f 100644 --- a/docs/CONTENT_PROVIDER.md +++ b/docs/CONTENT_PROVIDER.md @@ -9,7 +9,7 @@ Since runtime permissions are only available since Android 6.0 (API level 23), t There are 3 release channels, with 2 possible package names: | Release Channel | Package Name | -|-----------------|-----------------------------| +| --------------- | --------------------------- | | Google Play | me.hackerchick.catima | | F-Droid | me.hackerchick.catima | | Debug Build | me.hackerchick.catima.debug | @@ -35,35 +35,36 @@ Returns a single record with the current API version for the content provider. A major version change implies breaking changes (eg. columns being renamed or removed). | Column | Type | Description | Value | -|---------|-------|-------------------|-------| +| ------- | ----- | ----------------- | ----- | | `major` | `int` | The major version | `1` | | `minor` | `int` | The minor version | `0` | ### /cards -| Column | Type | Description | -|---------------|----------|----------------------------| -| `_id` | `int` | Unique card ID | -| `store` | `String` | Card name | -| `validfrom` | `long` | Timestamp from which the card is valid (unix epoch millis). | -| `expiry` | `long` | Expiration timestamp (unix epoch millis). | -| `balance` | `String` | Current balance, as a string-formatted big decimal. | -| `balancetype` | `String` | Balance currency code, ISO 4217. | -| `note` | `String` | A note. | -| `headercolor` | `int` | Header color, in RGBA. | -| `cardid` | `String` | Card ID. | -| `barcodeid` | `String` | Barcode value. If empty, it's the same as the card ID. | -| `barcodetype` | `String` | The barcode type name, matching [com.google.zxing.BarcodeFormat](https://zxing.github.io/zxing/apidocs/com/google/zxing/BarcodeFormat.html). | -| `starstatus` | `int` | 1 if starred, 0 if not | -| `lastused` | `long` | Timestamp of last card usage (unix epoch millis). | -| `archive` | `int` | 1 if archived, 0 if not | +| Column | Type | Description | +| ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `_id` | `int` | Unique card ID | +| `store` | `String` | Card name | +| `validfrom` | `long` | Timestamp from which the card is valid (unix epoch millis). | +| `expiry` | `long` | Expiration timestamp (unix epoch millis). | +| `balance` | `String` | Current balance, as a string-formatted big decimal. | +| `defaultbalancechange` | `String` | The value by which the balance is changed by default. | +| `balancetype` | `String` | Balance currency code, ISO 4217. | +| `note` | `String` | A note. | +| `headercolor` | `int` | Header color, in RGBA. | +| `cardid` | `String` | Card ID. | +| `barcodeid` | `String` | Barcode value. If empty, it's the same as the card ID. | +| `barcodetype` | `String` | The barcode type name, matching [com.google.zxing.BarcodeFormat](https://zxing.github.io/zxing/apidocs/com/google/zxing/BarcodeFormat.html). | +| `starstatus` | `int` | 1 if starred, 0 if not | +| `lastused` | `long` | Timestamp of last card usage (unix epoch millis). | +| `archive` | `int` | 1 if archived, 0 if not | ### /groups -| Column | Type | Description | -|-----------|----------|----------------------------| -| `_id` | `String` | Group name (unique) | -| `orderId` | `int` | Group order, in the UI | +| Column | Type | Description | +| --------- | -------- | ---------------------- | +| `_id` | `String` | Group name (unique) | +| `orderId` | `int` | Group order, in the UI | ### /card_groups @@ -72,7 +73,7 @@ Returns the mapping between cards and groups, by ID. - A card can be in 0 or more groups. - A group can contain 0 or more cards. -| Column | Type | Description | -|-----------|----------|--------------| -| `cardId` | `String` | Card ID | -| `groupId` | `String` | Group ID | +| Column | Type | Description | +| --------- | -------- | ----------- | +| `cardId` | `String` | Card ID | +| `groupId` | `String` | Group ID |