diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index 766355e7e..ace6a7f72 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -828,8 +828,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements @Override public boolean onPrepareOptionsMenu(Menu menu) { - super.onPrepareOptionsMenu(menu); - + boolean result = super.onPrepareOptionsMenu(menu); if (loyaltyCard != null) { // Update star status if (loyaltyCard.starStatus == 1) { @@ -842,15 +841,21 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements // 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.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.archive)); + } } 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.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)); + } } } - return true; + return result; } @Override @@ -887,22 +892,17 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements 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(); + } else if (id == R.id.action_archive_unarchive) { + 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); + } - 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(); - // Re-init loyaltyCard with new data from DB onResume(); invalidateOptionsMenu(); 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 000000000..41719d3d7 --- /dev/null +++ b/app/src/main/res/drawable/ic_archive.xml @@ -0,0 +1,12 @@ + + + + + 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 34b93ecdf..000000000 --- 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 000000000..4d8e5b755 --- /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 7d1e671fe..ce0fc8192 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:icon="@drawable/ic_archive" + android:title="@string/archive" + app:showAsAction="always"/> - + - - - - - - - - - + diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index 2fc8d6121..01c17c882 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 class LoyaltyCardViewActivityTest { 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("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()); database.close(); } @@ -1194,8 +1196,7 @@ public class LoyaltyCardViewActivityTest { 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 class LoyaltyCardViewActivityTest { shadowOf(getMainLooper()).idle(); assertEquals("Add to favorites", menu.findItem(R.id.action_star_unstar).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("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()); + database.close(); }