From febf934d934b52f54af304a0fdf204995188da8f Mon Sep 17 00:00:00 2001 From: Vijay Date: Sun, 12 Oct 2025 23:24:32 +0530 Subject: [PATCH 1/5] Feat: Added archive status toggle button for open card --- .../card_locker/LoyaltyCardViewActivity.java | 43 +++++++++---------- .../main/res/drawable/ic_outline_archive.xml | 5 +++ .../main/res/drawable/ic_overflow_menu.xml | 10 ----- app/src/main/res/drawable/ic_unarchive.xml | 5 +++ app/src/main/res/menu/card_view_menu.xml | 38 ++++++---------- 5 files changed, 43 insertions(+), 58 deletions(-) create mode 100644 app/src/main/res/drawable/ic_outline_archive.xml delete mode 100644 app/src/main/res/drawable/ic_overflow_menu.xml create mode 100644 app/src/main/res/drawable/ic_unarchive.xml diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index 705b4a515f..b81754c66f 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -815,8 +815,6 @@ public boolean onCreateOptionsMenu(Menu menu) { @Override public boolean onPrepareOptionsMenu(Menu menu) { - super.onPrepareOptionsMenu(menu); - if (loyaltyCard != null) { // Update star status if (loyaltyCard.starStatus == 1) { @@ -829,15 +827,21 @@ public boolean onPrepareOptionsMenu(Menu menu) { // Update archive/unarchive button if (loyaltyCard.archiveStatus != 0) { - menu.findItem(R.id.action_unarchive).setVisible(true); - menu.findItem(R.id.action_archive).setVisible(false); + menu.findItem(R.id.action_archive_unarchive).setTitle(R.string.unarchive); + menu.findItem(R.id.action_archive_unarchive).setIcon(R.drawable.ic_unarchive); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + menu.findItem(R.id.action_archive_unarchive).setTooltipText(getString(R.string.unarchive)); + } } else { - menu.findItem(R.id.action_unarchive).setVisible(false); - menu.findItem(R.id.action_archive).setVisible(true); + menu.findItem(R.id.action_archive_unarchive).setTitle(R.string.archive); + menu.findItem(R.id.action_archive_unarchive).setIcon(R.drawable.ic_outline_archive); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + menu.findItem(R.id.action_archive_unarchive).setTooltipText(getString(R.string.archive)); + } } } - return true; + return super.onPrepareOptionsMenu(menu); } @Override @@ -874,22 +878,17 @@ public boolean onOptionsItemSelected(MenuItem item) { invalidateOptionsMenu(); return true; - } else if (id == R.id.action_archive) { - DBHelper.updateLoyaltyCardArchiveStatus(database, loyaltyCardId, 1); - Toast.makeText(LoyaltyCardViewActivity.this, R.string.archived, Toast.LENGTH_LONG).show(); - - ShortcutHelper.removeShortcut(LoyaltyCardViewActivity.this, loyaltyCardId); - new ListWidget().updateAll(LoyaltyCardViewActivity.this); - - // Re-init loyaltyCard with new data from DB - onResume(); - invalidateOptionsMenu(); - - return true; - } else if (id == R.id.action_unarchive) { - DBHelper.updateLoyaltyCardArchiveStatus(database, loyaltyCardId, 0); - Toast.makeText(LoyaltyCardViewActivity.this, R.string.unarchived, Toast.LENGTH_LONG).show(); + } else if (id == R.id.action_archive_unarchive) { + if(loyaltyCard.archiveStatus == 0){ + DBHelper.updateLoyaltyCardArchiveStatus(database, loyaltyCardId, 1); + Toast.makeText(LoyaltyCardViewActivity.this, R.string.archived, Toast.LENGTH_LONG).show(); + ShortcutHelper.removeShortcut(LoyaltyCardViewActivity.this, loyaltyCardId); + new ListWidget().updateAll(LoyaltyCardViewActivity.this); + }else{ + DBHelper.updateLoyaltyCardArchiveStatus(database, loyaltyCardId, 0); + Toast.makeText(LoyaltyCardViewActivity.this, R.string.unarchived, Toast.LENGTH_LONG).show(); + } // Re-init loyaltyCard with new data from DB onResume(); invalidateOptionsMenu(); diff --git a/app/src/main/res/drawable/ic_outline_archive.xml b/app/src/main/res/drawable/ic_outline_archive.xml new file mode 100644 index 0000000000..c3f4681d69 --- /dev/null +++ b/app/src/main/res/drawable/ic_outline_archive.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_overflow_menu.xml b/app/src/main/res/drawable/ic_overflow_menu.xml deleted file mode 100644 index 34b93ecdf2..0000000000 --- a/app/src/main/res/drawable/ic_overflow_menu.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_unarchive.xml b/app/src/main/res/drawable/ic_unarchive.xml new file mode 100644 index 0000000000..4d8e5b7557 --- /dev/null +++ b/app/src/main/res/drawable/ic_unarchive.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/menu/card_view_menu.xml b/app/src/main/res/menu/card_view_menu.xml index 7d1e671fe5..4bcd6ab5a7 100644 --- a/app/src/main/res/menu/card_view_menu.xml +++ b/app/src/main/res/menu/card_view_menu.xml @@ -15,33 +15,19 @@ app:showAsAction="always" /> - - - - - - - - + android:id="@+id/action_archive_unarchive" + android:title="@string/archive" + android:icon="@drawable/ic_outline_archive" + app:showAsAction="always"/> - + - + From 6982dcc8b4371b56eff1e991d800ffc0040dd17b Mon Sep 17 00:00:00 2001 From: Vijay Date: Sun, 12 Oct 2025 23:39:42 +0530 Subject: [PATCH 2/5] Update tests accordingly, since card_view_menu.xml has changed --- .../LoyaltyCardViewActivityTest.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index 2fc8d6121f..31f1c4fd86 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -1034,11 +1034,13 @@ public void checkMenu() throws IOException { final Menu menu = shadowOf(activity).getOptionsMenu(); assertTrue(menu != null); - // The share, star and overflow options should be present - assertEquals(menu.size(), 3); + assertEquals(menu.size(), 5); assertEquals("Share", menu.findItem(R.id.action_share).getTitle().toString()); assertEquals("Add to favorites", menu.findItem(R.id.action_star_unstar).getTitle().toString()); + assertEquals("Archive", menu.findItem(R.id.action_archive_unarchive).getTitle().toString()); + assertEquals("Duplicate", menu.findItem(R.id.action_duplicate).getTitle().toString()); + assertEquals("Delete", menu.findItem(R.id.action_delete).getTitle().toString()); database.close(); } @@ -1194,8 +1196,7 @@ public void checkPushStarIcon() { final Menu menu = shadowOf(activity).getOptionsMenu(); assertTrue(menu != null); - // The share, star and overflow options should be present - assertEquals(menu.size(), 3); + assertEquals(menu.size(), 5); assertEquals("Add to favorites", menu.findItem(R.id.action_star_unstar).getTitle().toString()); @@ -1207,6 +1208,16 @@ public void checkPushStarIcon() { shadowOf(getMainLooper()).idle(); assertEquals("Add to favorites", menu.findItem(R.id.action_star_unstar).getTitle().toString()); + assertEquals("Archive", menu.findItem(R.id.action_archive_unarchive).getTitle().toString()); + + shadowOf(activity).clickMenuItem(R.id.action_archive_unarchive); + shadowOf(getMainLooper()).idle(); + assertEquals("Unarchive", menu.findItem(R.id.action_archive_unarchive).getTitle().toString()); + + shadowOf(activity).clickMenuItem(R.id.action_archive_unarchive); + shadowOf(getMainLooper()).idle(); + assertEquals("Archive", menu.findItem(R.id.action_archive_unarchive).getTitle().toString()); + database.close(); } From eb1f27e49072ab0001ae71cae6ba285511732015 Mon Sep 17 00:00:00 2001 From: Vijay <32608916+vijay2909@users.noreply.github.com> Date: Sat, 18 Oct 2025 23:49:05 +0530 Subject: [PATCH 3/5] Update app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java Co-authored-by: Sylvia van Os --- .../card_locker/LoyaltyCardViewActivity.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index b81754c66f..8c616801cc 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -879,16 +879,16 @@ public boolean onOptionsItemSelected(MenuItem item) { return true; } else if (id == R.id.action_archive_unarchive) { - if(loyaltyCard.archiveStatus == 0){ - DBHelper.updateLoyaltyCardArchiveStatus(database, loyaltyCardId, 1); - Toast.makeText(LoyaltyCardViewActivity.this, R.string.archived, Toast.LENGTH_LONG).show(); + DBHelper.updateLoyaltyCardArchiveStatus(database, loyaltyCardId, loyaltyCard.archiveStatus == 0 ? 1 : 0); + Toast.makeText(LoyaltyCardViewActivity.this, loyaltyCard.archiveStatus == 0 ? R.string.archived : R.string.unarchived, Toast.LENGTH_LONG).show(); + // If we're archiving the card, remove any existing shortcut + // Archived cards also do not show up in the shortcut picker + if (loyaltyCard.archiveStatus == 0) { ShortcutHelper.removeShortcut(LoyaltyCardViewActivity.this, loyaltyCardId); - new ListWidget().updateAll(LoyaltyCardViewActivity.this); - }else{ - DBHelper.updateLoyaltyCardArchiveStatus(database, loyaltyCardId, 0); - Toast.makeText(LoyaltyCardViewActivity.this, R.string.unarchived, Toast.LENGTH_LONG).show(); } + + new ListWidget().updateAll(LoyaltyCardViewActivity.this); // Re-init loyaltyCard with new data from DB onResume(); invalidateOptionsMenu(); From bad667940b627a301641e1a8bb085b6387714966 Mon Sep 17 00:00:00 2001 From: Vijay <32608916+vijay2909@users.noreply.github.com> Date: Sat, 18 Oct 2025 23:49:35 +0530 Subject: [PATCH 4/5] Update app/src/main/res/menu/card_view_menu.xml Co-authored-by: Sylvia van Os --- app/src/main/res/menu/card_view_menu.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/menu/card_view_menu.xml b/app/src/main/res/menu/card_view_menu.xml index 4bcd6ab5a7..63e6465edc 100644 --- a/app/src/main/res/menu/card_view_menu.xml +++ b/app/src/main/res/menu/card_view_menu.xml @@ -16,8 +16,8 @@ Date: Sun, 19 Oct 2025 00:57:59 +0530 Subject: [PATCH 5/5] Showing Archive icon as current State. Changed archive icon --- .../card_locker/LoyaltyCardViewActivity.java | 15 ++++++++------- app/src/main/res/drawable/ic_archive.xml | 12 ++++++++++++ app/src/main/res/drawable/ic_outline_archive.xml | 5 ----- app/src/main/res/menu/card_view_menu.xml | 2 +- .../card_locker/LoyaltyCardViewActivityTest.java | 8 ++++---- 5 files changed, 25 insertions(+), 17 deletions(-) create mode 100644 app/src/main/res/drawable/ic_archive.xml delete mode 100644 app/src/main/res/drawable/ic_outline_archive.xml diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index 8c616801cc..24dca2b2af 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -815,6 +815,7 @@ public boolean onCreateOptionsMenu(Menu menu) { @Override public boolean onPrepareOptionsMenu(Menu menu) { + boolean result = super.onPrepareOptionsMenu(menu); if (loyaltyCard != null) { // Update star status if (loyaltyCard.starStatus == 1) { @@ -827,21 +828,21 @@ public boolean onPrepareOptionsMenu(Menu menu) { // Update archive/unarchive button if (loyaltyCard.archiveStatus != 0) { - menu.findItem(R.id.action_archive_unarchive).setTitle(R.string.unarchive); - menu.findItem(R.id.action_archive_unarchive).setIcon(R.drawable.ic_unarchive); + menu.findItem(R.id.action_archive_unarchive).setTitle(R.string.archive); + menu.findItem(R.id.action_archive_unarchive).setIcon(R.drawable.ic_archive); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - menu.findItem(R.id.action_archive_unarchive).setTooltipText(getString(R.string.unarchive)); + menu.findItem(R.id.action_archive_unarchive).setTooltipText(getString(R.string.archive)); } } else { - menu.findItem(R.id.action_archive_unarchive).setTitle(R.string.archive); - menu.findItem(R.id.action_archive_unarchive).setIcon(R.drawable.ic_outline_archive); + menu.findItem(R.id.action_archive_unarchive).setTitle(R.string.unarchive); + menu.findItem(R.id.action_archive_unarchive).setIcon(R.drawable.ic_unarchive); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - menu.findItem(R.id.action_archive_unarchive).setTooltipText(getString(R.string.archive)); + menu.findItem(R.id.action_archive_unarchive).setTooltipText(getString(R.string.unarchive)); } } } - return super.onPrepareOptionsMenu(menu); + return result; } @Override diff --git a/app/src/main/res/drawable/ic_archive.xml b/app/src/main/res/drawable/ic_archive.xml new file mode 100644 index 0000000000..41719d3d74 --- /dev/null +++ b/app/src/main/res/drawable/ic_archive.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_outline_archive.xml b/app/src/main/res/drawable/ic_outline_archive.xml deleted file mode 100644 index c3f4681d69..0000000000 --- a/app/src/main/res/drawable/ic_outline_archive.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/app/src/main/res/menu/card_view_menu.xml b/app/src/main/res/menu/card_view_menu.xml index 63e6465edc..ce0fc8192d 100644 --- a/app/src/main/res/menu/card_view_menu.xml +++ b/app/src/main/res/menu/card_view_menu.xml @@ -16,7 +16,7 @@ diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index 31f1c4fd86..01c17c8826 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -1038,7 +1038,7 @@ public void checkMenu() throws IOException { assertEquals("Share", menu.findItem(R.id.action_share).getTitle().toString()); assertEquals("Add to favorites", menu.findItem(R.id.action_star_unstar).getTitle().toString()); - assertEquals("Archive", menu.findItem(R.id.action_archive_unarchive).getTitle().toString()); + assertEquals("Unarchive", menu.findItem(R.id.action_archive_unarchive).getTitle().toString()); assertEquals("Duplicate", menu.findItem(R.id.action_duplicate).getTitle().toString()); assertEquals("Delete", menu.findItem(R.id.action_delete).getTitle().toString()); @@ -1208,15 +1208,15 @@ public void checkPushStarIcon() { shadowOf(getMainLooper()).idle(); assertEquals("Add to favorites", menu.findItem(R.id.action_star_unstar).getTitle().toString()); - assertEquals("Archive", menu.findItem(R.id.action_archive_unarchive).getTitle().toString()); + assertEquals("Unarchive", menu.findItem(R.id.action_archive_unarchive).getTitle().toString()); shadowOf(activity).clickMenuItem(R.id.action_archive_unarchive); shadowOf(getMainLooper()).idle(); - assertEquals("Unarchive", menu.findItem(R.id.action_archive_unarchive).getTitle().toString()); + assertEquals("Archive", menu.findItem(R.id.action_archive_unarchive).getTitle().toString()); shadowOf(activity).clickMenuItem(R.id.action_archive_unarchive); shadowOf(getMainLooper()).idle(); - assertEquals("Archive", menu.findItem(R.id.action_archive_unarchive).getTitle().toString()); + assertEquals("Unarchive", menu.findItem(R.id.action_archive_unarchive).getTitle().toString()); database.close(); }