From 4a568d02d38b6ad4ebd27519f020593e0e154fbc Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Tue, 16 Feb 2021 22:22:51 +0100 Subject: [PATCH] Various fixes and consistency improvements --- .../card_locker/CsvDatabaseImporter.java | 9 ++++++-- .../java/protect/card_locker/DBHelper.java | 15 ++++++------- .../protect/card_locker/ImportURIHelper.java | 21 ++++++++++++------- .../java/protect/card_locker/LoyaltyCard.java | 16 +++++++------- .../card_locker/LoyaltyCardEditActivity.java | 10 ++++----- 5 files changed, 42 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/protect/card_locker/CsvDatabaseImporter.java b/app/src/main/java/protect/card_locker/CsvDatabaseImporter.java index c7aae8ef2..a4105002c 100644 --- a/app/src/main/java/protect/card_locker/CsvDatabaseImporter.java +++ b/app/src/main/java/protect/card_locker/CsvDatabaseImporter.java @@ -11,6 +11,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.math.BigDecimal; +import java.util.Currency; import java.util.Date; import java.util.List; @@ -303,16 +304,20 @@ public class CsvDatabaseImporter implements DatabaseImporter } catch (NullPointerException | FormatException e) { } BigDecimal balance; - String balanceType = null; try { balance = new BigDecimal(extractString(DBHelper.LoyaltyCardDbIds.BALANCE, record, null)); - balanceType = extractString(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE, record, null); } catch (FormatException _e ) { // These fields did not exist in versions 1.8.1 and before // We catch this exception so we can still import old backups balance = new BigDecimal("0.0"); } + Currency balanceType = null; + String unparsedBalanceType = extractString(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE, record, ""); + if(!unparsedBalanceType.isEmpty()) { + balanceType = Currency.getInstance(unparsedBalanceType); + } + String cardId = extractString(DBHelper.LoyaltyCardDbIds.CARD_ID, record, ""); if(cardId.isEmpty()) { diff --git a/app/src/main/java/protect/card_locker/DBHelper.java b/app/src/main/java/protect/card_locker/DBHelper.java index 402585ee2..d25de0cb3 100644 --- a/app/src/main/java/protect/card_locker/DBHelper.java +++ b/app/src/main/java/protect/card_locker/DBHelper.java @@ -9,6 +9,7 @@ import android.database.sqlite.SQLiteOpenHelper; import android.graphics.Color; import java.math.BigDecimal; +import java.util.Currency; import java.util.Date; import java.util.ArrayList; import java.util.List; @@ -33,7 +34,7 @@ public class DBHelper extends SQLiteOpenHelper public static final String STORE = "store"; public static final String EXPIRY = "expiry"; public static final String BALANCE = "balance"; - public static final String BALANCE_TYPE = "balance_type"; + public static final String BALANCE_TYPE = "balancetype"; public static final String NOTE = "note"; public static final String HEADER_COLOR = "headercolor"; public static final String HEADER_TEXT_COLOR = "headertextcolor"; @@ -145,7 +146,7 @@ public class DBHelper extends SQLiteOpenHelper } public long insertLoyaltyCard(final String store, final String note, final Date expiry, - final BigDecimal balance, final String balanceType, + final BigDecimal balance, final Currency balanceType, final String cardId, final String barcodeType, final Integer headerColor, final int starStatus) { @@ -155,7 +156,7 @@ public class DBHelper extends SQLiteOpenHelper contentValues.put(LoyaltyCardDbIds.NOTE, note); contentValues.put(LoyaltyCardDbIds.EXPIRY, expiry != null ? expiry.getTime() : null); contentValues.put(LoyaltyCardDbIds.BALANCE, balance.toString()); - contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType); + contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType != null ? balanceType.getCurrencyCode() : null); contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId); contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType); contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor); @@ -167,7 +168,7 @@ public class DBHelper extends SQLiteOpenHelper public boolean insertLoyaltyCard(final SQLiteDatabase db, final int id, final String store, final String note, final Date expiry, final BigDecimal balance, - final String balanceType, final String cardId, + final Currency balanceType, final String cardId, final String barcodeType, final Integer headerColor, final int starStatus) { @@ -177,7 +178,7 @@ public class DBHelper extends SQLiteOpenHelper contentValues.put(LoyaltyCardDbIds.NOTE, note); contentValues.put(LoyaltyCardDbIds.EXPIRY, expiry != null ? expiry.getTime() : null); contentValues.put(LoyaltyCardDbIds.BALANCE, balance.toString()); - contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType); + contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType != null ? balanceType.getCurrencyCode() : null); contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId); contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType); contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor); @@ -189,7 +190,7 @@ public class DBHelper extends SQLiteOpenHelper public boolean updateLoyaltyCard(final int id, final String store, final String note, final Date expiry, final BigDecimal balance, - final String balanceType, final String cardId, + final Currency balanceType, final String cardId, final String barcodeType, final Integer headerColor) { SQLiteDatabase db = getWritableDatabase(); @@ -198,7 +199,7 @@ public class DBHelper extends SQLiteOpenHelper contentValues.put(LoyaltyCardDbIds.NOTE, note); contentValues.put(LoyaltyCardDbIds.EXPIRY, expiry != null ? expiry.getTime() : null); contentValues.put(LoyaltyCardDbIds.BALANCE, balance.toString()); - contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType); + contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType != null ? balanceType.getCurrencyCode() : null); contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId); contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType); contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor); diff --git a/app/src/main/java/protect/card_locker/ImportURIHelper.java b/app/src/main/java/protect/card_locker/ImportURIHelper.java index 9e276e630..776f44832 100644 --- a/app/src/main/java/protect/card_locker/ImportURIHelper.java +++ b/app/src/main/java/protect/card_locker/ImportURIHelper.java @@ -5,6 +5,7 @@ import android.content.Intent; import android.net.Uri; import java.io.InvalidObjectException; import java.math.BigDecimal; +import java.util.Currency; import java.util.Date; public class ImportURIHelper { @@ -12,7 +13,7 @@ public class ImportURIHelper { private static final String NOTE = DBHelper.LoyaltyCardDbIds.NOTE; private static final String EXPIRY = DBHelper.LoyaltyCardDbIds.EXPIRY; private static final String BALANCE = DBHelper.LoyaltyCardDbIds.BALANCE; - private static final String BALANCE_TYPE = DBHelper.LoyaltyCardDbIds.BARCODE_TYPE; + 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_TYPE = DBHelper.LoyaltyCardDbIds.BARCODE_TYPE; @@ -47,7 +48,7 @@ public class ImportURIHelper { // These values are allowed to be null Date expiry = null; BigDecimal balance = new BigDecimal("0.0"); - String balanceType = null; + Currency balanceType = null; Integer headerColor = null; Integer headerTextColor = null; @@ -57,11 +58,6 @@ public class ImportURIHelper { String barcodeType = uri.getQueryParameter(BARCODE_TYPE); if (store == null || note == null || cardId == null || barcodeType == null) throw new InvalidObjectException("Not a valid import URI"); - String unparsedExpiry = uri.getQueryParameter(EXPIRY); - if(unparsedExpiry != null && !unparsedExpiry.equals("")) - { - expiry = new Date(Long.parseLong(unparsedExpiry)); - } String unparsedBalance = uri.getQueryParameter(BALANCE); if(unparsedBalance != null && !unparsedBalance.equals("")) { @@ -70,7 +66,12 @@ public class ImportURIHelper { String unparsedBalanceType = uri.getQueryParameter(BALANCE_TYPE); if (unparsedBalanceType != null && !unparsedBalanceType.equals("")) { - balanceType = unparsedBalanceType; + balanceType = Currency.getInstance(unparsedBalanceType); + } + String unparsedExpiry = uri.getQueryParameter(EXPIRY); + if(unparsedExpiry != null && !unparsedExpiry.equals("")) + { + expiry = new Date(Long.parseLong(unparsedExpiry)); } String unparsedHeaderColor = uri.getQueryParameter(HEADER_COLOR); @@ -93,6 +94,10 @@ public class ImportURIHelper { uriBuilder.path(path); uriBuilder.appendQueryParameter(STORE, loyaltyCard.store); uriBuilder.appendQueryParameter(NOTE, loyaltyCard.note); + uriBuilder.appendQueryParameter(BALANCE, loyaltyCard.balance.toString()); + if (loyaltyCard.balanceType != null) { + uriBuilder.appendQueryParameter(BALANCE_TYPE, loyaltyCard.balanceType.getCurrencyCode()); + } if (loyaltyCard.expiry != null) { uriBuilder.appendQueryParameter(EXPIRY, String.valueOf(loyaltyCard.expiry.getTime())); } diff --git a/app/src/main/java/protect/card_locker/LoyaltyCard.java b/app/src/main/java/protect/card_locker/LoyaltyCard.java index 39e22f05a..64461a0e1 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCard.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCard.java @@ -28,7 +28,7 @@ public class LoyaltyCard public final int starStatus; public LoyaltyCard(final int id, final String store, final String note, final Date expiry, - final BigDecimal balance, final String balanceType, final String cardId, + final BigDecimal balance, final Currency balanceType, final String cardId, final String barcodeType, final Integer headerColor, final Integer headerTextColor, final int starStatus) { @@ -37,11 +37,7 @@ public class LoyaltyCard this.note = note; this.expiry = expiry; this.balance = balance; - if (balanceType != null) { - this.balanceType = Currency.getInstance(balanceType); - } else { - this.balanceType = null; - } + this.balanceType = balanceType; this.cardId = cardId; this.barcodeType = barcodeType; this.headerColor = headerColor; @@ -56,18 +52,24 @@ public class LoyaltyCard String note = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.NOTE)); long expiryLong = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXPIRY)); BigDecimal balance = new BigDecimal(cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE))); - String balanceType = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE)); String cardId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID)); String barcodeType = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE)); int starred = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STAR_STATUS)); + int balanceTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE); int headerColorColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR); int headerTextColorColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR); + Currency balanceType = null; Date expiry = null; Integer headerColor = null; Integer headerTextColor = null; + if (cursor.isNull(balanceTypeColumn) == false) + { + balanceType = Currency.getInstance(cursor.getString(balanceTypeColumn)); + } + if(expiryLong > 0) { expiry = new Date(expiryLong); diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index f94a9ca1f..2d5970b55 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -467,7 +467,8 @@ public class LoyaltyCardEditActivity extends AppCompatActivity noteFieldEdit.setText(importCard.note); expiryField.setTag(importCard.expiry); formatExpiryField(importCard.expiry); - balanceField.setTag(importCard.balanceType); + balanceField.setTag(importCard.balance); + balanceCurrencyField.setTag(importCard.balanceType); formatBalanceCurrencyField(importCard.balanceType); cardIdFieldView.setText(importCard.cardId); barcodeTypeField.setText(importCard.barcodeType); @@ -478,10 +479,9 @@ public class LoyaltyCardEditActivity extends AppCompatActivity setTitle(R.string.addCardTitle); expiryField.setTag(null); expiryField.setText(getString(R.string.never)); - balanceField.setTag(null); - balanceField.setText(String.format("%f", new BigDecimal("0.0"))); + balanceField.setTag(new BigDecimal("0.0")); balanceCurrencyField.setTag(null); - balanceCurrencyField.setText(getString(R.string.points)); + formatBalanceCurrencyField(null); hideBarcode(); } @@ -734,7 +734,7 @@ public class LoyaltyCardEditActivity extends AppCompatActivity String note = noteFieldEdit.getText().toString(); Date expiry = (Date) expiryField.getTag(); BigDecimal balance = (BigDecimal) balanceField.getTag(); - String balanceType = balanceCurrencyField.getTag() != null ? ((Currency) balanceCurrencyField.getTag()).getCurrencyCode() : null; + Currency balanceType = balanceCurrencyField.getTag() != null ? ((Currency) balanceCurrencyField.getTag()) : null; String cardId = cardIdFieldView.getText().toString(); String barcodeType = barcodeTypeField.getText().toString();