From d39b732b77a9c43478581a3234f60624e17b213b Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Fri, 17 Jun 2022 19:53:51 +0200 Subject: [PATCH] Fix export and shortcut bugs --- .../card_locker/CardShortcutConfigure.java | 13 +++++++-- .../CardsOnPowerScreenService.java | 2 +- .../java/protect/card_locker/DBHelper.java | 29 +++++++++++++------ .../protect/card_locker/MainActivity.java | 2 -- .../importexport/CatimaExporter.java | 6 ++-- app/src/main/res/values/strings.xml | 1 + .../LoyaltyCardCursorAdapterTest.java | 29 ++++++++++++------- 7 files changed, 54 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/protect/card_locker/CardShortcutConfigure.java b/app/src/main/java/protect/card_locker/CardShortcutConfigure.java index dae162c52..472b747d8 100644 --- a/app/src/main/java/protect/card_locker/CardShortcutConfigure.java +++ b/app/src/main/java/protect/card_locker/CardShortcutConfigure.java @@ -39,24 +39,31 @@ public class CardShortcutConfigure extends CatimaAppCompatActivity implements Lo setSupportActionBar(toolbar); // If there are no cards, bail - if (DBHelper.getLoyaltyCardCount(mDatabase) == 0) { + int cardCount = DBHelper.getLoyaltyCardCount(mDatabase); + if (cardCount == 0) { Toast.makeText(this, R.string.noCardsMessage, Toast.LENGTH_LONG).show(); finish(); } + // If all cards are archived, bail + if (DBHelper.getArchivedCardsCount(mDatabase) == cardCount) { + Toast.makeText(this, R.string.noUnarchivedCardsMessage, Toast.LENGTH_LONG).show(); + finish(); + } + final RecyclerView cardList = findViewById(R.id.list); GridLayoutManager layoutManager = (GridLayoutManager) cardList.getLayoutManager(); if (layoutManager != null) { layoutManager.setSpanCount(getResources().getInteger(R.integer.main_view_card_columns)); } - Cursor cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase); + Cursor cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.Unarchived); mAdapter = new LoyaltyCardCursorAdapter(this, cardCursor, this); cardList.setAdapter(mAdapter); } private void onClickAction(int position) { - Cursor selected = DBHelper.getLoyaltyCardCursor(mDatabase); + Cursor selected = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.Unarchived); selected.moveToPosition(position); LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(selected); diff --git a/app/src/main/java/protect/card_locker/CardsOnPowerScreenService.java b/app/src/main/java/protect/card_locker/CardsOnPowerScreenService.java index 8eaa5a8ed..aaa8540e2 100644 --- a/app/src/main/java/protect/card_locker/CardsOnPowerScreenService.java +++ b/app/src/main/java/protect/card_locker/CardsOnPowerScreenService.java @@ -40,7 +40,7 @@ public class CardsOnPowerScreenService extends ControlsProviderService { @NonNull @Override public Flow.Publisher createPublisherForAllAvailable() { - Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(mDatabase); + Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.Unarchived); return subscriber -> { while (loyaltyCardCursor.moveToNext()) { LoyaltyCard card = LoyaltyCard.toLoyaltyCard(loyaltyCardCursor); diff --git a/app/src/main/java/protect/card_locker/DBHelper.java b/app/src/main/java/protect/card_locker/DBHelper.java index 3fb0da0c6..5bce5939d 100644 --- a/app/src/main/java/protect/card_locker/DBHelper.java +++ b/app/src/main/java/protect/card_locker/DBHelper.java @@ -72,7 +72,8 @@ public class DBHelper extends SQLiteOpenHelper { Descending } - public enum LoyaltyCardArchiveFilter{ + public enum LoyaltyCardArchiveFilter { + All, Archived, Unarchived } @@ -578,7 +579,12 @@ public class DBHelper extends SQLiteOpenHelper { public static Cursor getLoyaltyCardCursor(SQLiteDatabase database) { // An empty string will match everything - return getLoyaltyCardCursor(database, ""); + return getLoyaltyCardCursor(database, LoyaltyCardArchiveFilter.All); + } + + public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, LoyaltyCardArchiveFilter archiveFilter) { + // An empty string will match everything + return getLoyaltyCardCursor(database, "", archiveFilter); } /** @@ -587,8 +593,8 @@ public class DBHelper extends SQLiteOpenHelper { * @param filter * @return Cursor */ - public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, final String filter) { - return getLoyaltyCardCursor(database, filter, null); + public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, final String filter, LoyaltyCardArchiveFilter archiveFilter) { + return getLoyaltyCardCursor(database, filter, null, archiveFilter); } /** @@ -598,8 +604,8 @@ public class DBHelper extends SQLiteOpenHelper { * @param group * @return Cursor */ - public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, final String filter, Group group) { - return getLoyaltyCardCursor(database, filter, group, LoyaltyCardOrder.Alpha, LoyaltyCardOrderDirection.Ascending, LoyaltyCardArchiveFilter.Unarchived); + public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, final String filter, Group group, LoyaltyCardArchiveFilter archiveFilter) { + return getLoyaltyCardCursor(database, filter, group, LoyaltyCardOrder.Alpha, LoyaltyCardOrderDirection.Ascending, archiveFilter); } /** @@ -633,6 +639,11 @@ public class DBHelper extends SQLiteOpenHelper { } } + String archiveFilterString = ""; + if (archiveFilter != LoyaltyCardArchiveFilter.All) { + archiveFilterString = " AND " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ARCHIVE_STATUS + " = " + (archiveFilter.equals(LoyaltyCardArchiveFilter.Unarchived) ? 0 : 1); + } + String orderField = getFieldForOrder(order); return database.rawQuery("SELECT " + LoyaltyCardDbIds.TABLE + ".* FROM " + LoyaltyCardDbIds.TABLE + @@ -640,9 +651,9 @@ public class DBHelper extends SQLiteOpenHelper { " ON " + LoyaltyCardDbFTS.TABLE + "." + LoyaltyCardDbFTS.ID + " = " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ID + (filter.trim().isEmpty() ? " " : " AND " + LoyaltyCardDbFTS.TABLE + " MATCH ? ") + groupFilter.toString() + - " AND " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ARCHIVE_STATUS + " = " + - (archiveFilter.equals(LoyaltyCardArchiveFilter.Unarchived) ? 0 : 1) + - " ORDER BY " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STAR_STATUS + " DESC, " + + archiveFilterString + + " ORDER BY " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ARCHIVE_STATUS + " ASC, " + + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STAR_STATUS + " DESC, " + " (CASE WHEN " + LoyaltyCardDbIds.TABLE + "." + orderField + " IS NULL THEN 1 ELSE 0 END), " + LoyaltyCardDbIds.TABLE + "." + orderField + " COLLATE NOCASE " + getDbDirection(order, direction) + ", " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STORE + " COLLATE NOCASE ASC " + diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java index a7854962d..113932adb 100644 --- a/app/src/main/java/protect/card_locker/MainActivity.java +++ b/app/src/main/java/protect/card_locker/MainActivity.java @@ -205,8 +205,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard return true; } - - return false; } 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 afc59fdad..95a95decd 100644 --- a/app/src/main/java/protect/card_locker/importexport/CatimaExporter.java +++ b/app/src/main/java/protect/card_locker/importexport/CatimaExporter.java @@ -135,7 +135,8 @@ public class CatimaExporter implements Exporter { DBHelper.LoyaltyCardDbIds.BARCODE_TYPE, DBHelper.LoyaltyCardDbIds.HEADER_COLOR, DBHelper.LoyaltyCardDbIds.STAR_STATUS, - DBHelper.LoyaltyCardDbIds.LAST_USED); + DBHelper.LoyaltyCardDbIds.LAST_USED, + DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS); Cursor cardCursor = DBHelper.getLoyaltyCardCursor(database); @@ -153,7 +154,8 @@ public class CatimaExporter implements Exporter { card.barcodeType != null ? card.barcodeType.name() : "", card.headerColor, card.starStatus, - card.lastUsed); + card.lastUsed, + card.archiveStatus); if (Thread.currentThread().isInterrupted()) { throw new InterruptedException(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eb568fd3f..415e23b53 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -278,4 +278,5 @@ Card unarchived Archive Overflow menu + No unarchived cards exist \ No newline at end of file diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java index 001ad9d15..1b3542c27 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java @@ -162,26 +162,33 @@ public class LoyaltyCardCursorAdapterTest { @Test public void TestCursorAdapterStarring() { - assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeA", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0)); + assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeA", "note", 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, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,1)); - assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeC", "note", 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, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0)); + assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeD", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,0)); - assertEquals(3, DBHelper.getLoyaltyCardCount(mDatabase)); + assertEquals(4, DBHelper.getLoyaltyCardCount(mDatabase)); - Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase, "", null, DBHelper.LoyaltyCardOrder.Alpha, DBHelper.LoyaltyCardOrderDirection.Ascending, DBHelper.LoyaltyCardArchiveFilter.Unarchived); - assertEquals(1, cursor.getCount()); + Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase); + assertEquals(4, cursor.getCount()); assertTrue(cursor.moveToFirst()); LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(cursor); - assertEquals("storeA", loyaltyCard.store); + assertEquals("storeD", loyaltyCard.store); View view = createView(cursor); ConstraintLayout star = view.findViewById(R.id.star); ConstraintLayout archive = view.findViewById(R.id.archivedIcon); - assertEquals(View.GONE, star.getVisibility()); + assertEquals(View.VISIBLE, star.getVisibility()); assertEquals(View.GONE, archive.getVisibility()); - cursor = DBHelper.getLoyaltyCardCursor(mDatabase, "", null, DBHelper.LoyaltyCardOrder.Alpha, DBHelper.LoyaltyCardOrderDirection.Ascending, DBHelper.LoyaltyCardArchiveFilter.Archived); - assertEquals(2, cursor.getCount()); + assertTrue(cursor.moveToNext()); + loyaltyCard = LoyaltyCard.toLoyaltyCard(cursor); + assertEquals("storeC", loyaltyCard.store); + view = createView(cursor); + star = view.findViewById(R.id.star); + archive = view.findViewById(R.id.archivedIcon); + assertEquals(View.GONE, star.getVisibility()); + assertEquals(View.GONE, archive.getVisibility()); assertTrue(cursor.moveToNext()); loyaltyCard = LoyaltyCard.toLoyaltyCard(cursor); @@ -194,11 +201,11 @@ public class LoyaltyCardCursorAdapterTest { assertTrue(cursor.moveToNext()); loyaltyCard = LoyaltyCard.toLoyaltyCard(cursor); - assertEquals("storeC", loyaltyCard.store); + assertEquals("storeA", loyaltyCard.store); view = createView(cursor); star = view.findViewById(R.id.star); archive = view.findViewById(R.id.archivedIcon); - assertEquals(View.VISIBLE, star.getVisibility()); + assertEquals(View.GONE, star.getVisibility()); assertEquals(View.VISIBLE, archive.getVisibility()); cursor.close();