From 5bfca6e4283d126d1259be9669c807c2c458900f Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Wed, 7 Sep 2022 20:28:26 +0200 Subject: [PATCH] Always update last used when creating or editing a card --- .../java/protect/card_locker/DBHelper.java | 8 +++- .../java/protect/card_locker/LoyaltyCard.java | 3 +- .../card_locker/LoyaltyCardEditActivity.java | 41 ++++++++++--------- .../protect/card_locker/DatabaseTest.java | 4 +- 4 files changed, 31 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/protect/card_locker/DBHelper.java b/app/src/main/java/protect/card_locker/DBHelper.java index e4df172d4..7ae2f28bd 100644 --- a/app/src/main/java/protect/card_locker/DBHelper.java +++ b/app/src/main/java/protect/card_locker/DBHelper.java @@ -361,7 +361,7 @@ public class DBHelper extends SQLiteOpenHelper { final SQLiteDatabase database, final String store, final String note, final Date expiry, final BigDecimal balance, final Currency balanceType, final String cardId, final String barcodeId, final CatimaBarcode barcodeType, final Integer headerColor, - final int starStatus, final Long lastUsed,final int archiveStatus) { + final int starStatus, final Long lastUsed, final int archiveStatus) { database.beginTransaction(); // Card @@ -426,7 +426,7 @@ public class DBHelper extends SQLiteOpenHelper { SQLiteDatabase database, final int id, final String store, final String note, final Date expiry, final BigDecimal balance, final Currency balanceType, final String cardId, final String barcodeId, final CatimaBarcode barcodeType, - final Integer headerColor) { + final Integer headerColor, final int starStatus, final Long lastUsed, final int archiveStatus) { database.beginTransaction(); // Card @@ -440,6 +440,10 @@ public class DBHelper extends SQLiteOpenHelper { contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId); contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null); contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor); + contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus); + contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime()); + contentValues.put(LoyaltyCardDbIds.ARCHIVE_STATUS, archiveStatus); + int rowsUpdated = database.update(LoyaltyCardDbIds.TABLE, contentValues, whereAttrs(LoyaltyCardDbIds.ID), withArgs(id)); diff --git a/app/src/main/java/protect/card_locker/LoyaltyCard.java b/app/src/main/java/protect/card_locker/LoyaltyCard.java index 7f8acaadb..31255a043 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCard.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCard.java @@ -36,7 +36,8 @@ public class LoyaltyCard implements Parcelable { public LoyaltyCard(final int id, final String store, final String note, final Date expiry, final BigDecimal balance, 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 archiveStatus) { + @Nullable final Integer headerColor, final int starStatus, + final long lastUsed, final int zoomLevel, final int archiveStatus) { this.id = id; this.store = store; this.note = note; diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index 8f44344b9..fcc3d11ae 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -207,7 +207,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { (CatimaBarcode) (fieldName == LoyaltyCardField.barcodeType ? value : loyaltyCard.barcodeType), (Integer) (fieldName == LoyaltyCardField.headerColor ? value : loyaltyCard.headerColor), (int) (fieldName == LoyaltyCardField.starStatus ? value : loyaltyCard.starStatus), - Utils.getUnixTime(), 100, (int) (fieldName == LoyaltyCardField.archiveStatus ? value : loyaltyCard.archiveStatus) + 0, // Unimportant, always set to null in doSave so the DB updates it to the current timestamp + 100, // Unimportant, not updated in doSave, defaults to 100 for new cards + (int) (fieldName == LoyaltyCardField.archiveStatus ? value : loyaltyCard.archiveStatus) ); } @@ -1316,35 +1318,34 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { selectedGroups.add((Group) chip.getTag()); } - if (updateLoyaltyCard) { //update of "starStatus" not necessary, since it cannot be changed in this activity (only in ViewActivity) - DBHelper.updateLoyaltyCard(mDatabase, loyaltyCardId, tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor); - try { - Utils.saveCardImage(this, (Bitmap) cardImageFront.getTag(), loyaltyCardId, ImageLocationType.front); - Utils.saveCardImage(this, (Bitmap) cardImageBack.getTag(), loyaltyCardId, ImageLocationType.back); - Utils.saveCardImage(this, (Bitmap) thumbnail.getTag(), loyaltyCardId, ImageLocationType.icon); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - Log.i(TAG, "Updated " + loyaltyCardId + " to " + cardId); + // Both update and new card save with lastUsed set to null + // 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 (updateLoyaltyCard) { + DBHelper.updateLoyaltyCard(mDatabase, loyaltyCardId, tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor, tempLoyaltyCard.starStatus, null, tempLoyaltyCard.archiveStatus); } else { - loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor, 0, tempLoyaltyCard.lastUsed,0); - try { - Utils.saveCardImage(this, (Bitmap) cardImageFront.getTag(), loyaltyCardId, ImageLocationType.front); - Utils.saveCardImage(this, (Bitmap) cardImageBack.getTag(), loyaltyCardId, ImageLocationType.back); - Utils.saveCardImage(this, (Bitmap) thumbnail.getTag(), loyaltyCardId, ImageLocationType.icon); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } + loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor, 0, null, 0); } + try { + Utils.saveCardImage(this, (Bitmap) cardImageFront.getTag(), loyaltyCardId, ImageLocationType.front); + Utils.saveCardImage(this, (Bitmap) cardImageBack.getTag(), loyaltyCardId, ImageLocationType.back); + Utils.saveCardImage(this, (Bitmap) thumbnail.getTag(), loyaltyCardId, ImageLocationType.icon); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + Log.i(TAG, "Set " + loyaltyCardId + " to " + cardId + " (update: " + updateLoyaltyCard + ")"); + DBHelper.setLoyaltyCardGroups(mDatabase, loyaltyCardId, selectedGroups); ShortcutHelper.updateShortcuts(this, DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId)); - if(duplicateFromLoyaltyCardId){ + if (duplicateFromLoyaltyCardId) { Intent intent = new Intent(getApplicationContext(), MainActivity.class); startActivity(intent); } + finish(); } diff --git a/app/src/test/java/protect/card_locker/DatabaseTest.java b/app/src/test/java/protect/card_locker/DatabaseTest.java index db89ae38f..eef904d03 100644 --- a/app/src/test/java/protect/card_locker/DatabaseTest.java +++ b/app/src/test/java/protect/card_locker/DatabaseTest.java @@ -75,7 +75,7 @@ public class DatabaseTest { assertTrue(result); assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); - result = DBHelper.updateLoyaltyCard(mDatabase, 1, "store1", "note1", null, new BigDecimal("10.00"), Currency.getInstance("EUR"), "cardId1", null, CatimaBarcode.fromBarcode(BarcodeFormat.AZTEC), DEFAULT_HEADER_COLOR); + result = DBHelper.updateLoyaltyCard(mDatabase, 1, "store1", "note1", null, new BigDecimal("10.00"), Currency.getInstance("EUR"), "cardId1", null, CatimaBarcode.fromBarcode(BarcodeFormat.AZTEC), DEFAULT_HEADER_COLOR, 0, null, 0); assertTrue(result); assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase)); @@ -125,7 +125,7 @@ public class DatabaseTest { assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); boolean result = DBHelper.updateLoyaltyCard(mDatabase, 1, "store1", "note1", null, new BigDecimal("0"), null, "cardId1", - null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR); + null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null, 0); assertEquals(false, result); assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase)); }