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();
}