From fa99c2ef7c7e8a24b2ce57ff6b6df317e8489846 Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Sat, 9 Mar 2024 18:25:49 +0100 Subject: [PATCH] Several fixes for shortcut handling - Update the card priority in the dynamic shortcut manager also when the card isn't opened from the main screen - Remove from dynamic shortcut manager when the card gets archived - Fix icons disappearing of other cards when one card gets removed --- .../card_locker/LoyaltyCardViewActivity.java | 4 ++++ .../java/protect/card_locker/MainActivity.java | 3 +-- .../protect/card_locker/ShortcutHelper.java | 18 ++++++------------ 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index e5e12f27b..add615a53 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -736,6 +736,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements DBHelper.updateLoyaltyCardLastUsed(database, loyaltyCard.id); invalidateOptionsMenu(); + + ShortcutHelper.updateShortcuts(this, loyaltyCard); } private void setStateBasedOnImageTypes() { @@ -835,6 +837,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements DBHelper.updateLoyaltyCardArchiveStatus(database, loyaltyCardId, 1); Toast.makeText(LoyaltyCardViewActivity.this, R.string.archived, Toast.LENGTH_LONG).show(); + ShortcutHelper.removeShortcut(LoyaltyCardViewActivity.this, loyaltyCardId); + // Re-init loyaltyCard with new data from DB onResume(); invalidateOptionsMenu(); diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java index 20904042e..4f4b16b27 100644 --- a/app/src/main/java/protect/card_locker/MainActivity.java +++ b/app/src/main/java/protect/card_locker/MainActivity.java @@ -150,6 +150,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard for (LoyaltyCard loyaltyCard : mAdapter.getSelectedItems()) { Log.d(TAG, "Archiving card: " + loyaltyCard.id); DBHelper.updateLoyaltyCardArchiveStatus(mDatabase, loyaltyCard.id, 1); + ShortcutHelper.removeShortcut(MainActivity.this, loyaltyCard.id); updateLoyaltyCardList(false); inputMode.finish(); invalidateOptionsMenu(); @@ -798,8 +799,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard b.putIntegerArrayList("cardList", cardList); intent.putExtras(b); - ShortcutHelper.updateShortcuts(MainActivity.this, loyaltyCard); - startActivity(intent); } } diff --git a/app/src/main/java/protect/card_locker/ShortcutHelper.java b/app/src/main/java/protect/card_locker/ShortcutHelper.java index 57db596f7..4df23de2c 100644 --- a/app/src/main/java/protect/card_locker/ShortcutHelper.java +++ b/app/src/main/java/protect/card_locker/ShortcutHelper.java @@ -43,6 +43,11 @@ class ShortcutHelper { * used card shortcut is discarded. */ static void updateShortcuts(Context context, LoyaltyCard card) { + if (card.archiveStatus == 1) { + // Don't add archived card to menu + return; + } + LinkedList list = new LinkedList<>(ShortcutManagerCompat.getDynamicShortcuts(context)); SQLiteDatabase database = new DBHelper(context).getReadableDatabase(); @@ -108,18 +113,7 @@ class ShortcutHelper { * shortcut exists. */ static void removeShortcut(Context context, int cardId) { - List list = ShortcutManagerCompat.getDynamicShortcuts(context); - - String shortcutId = Integer.toString(cardId); - - for (int index = 0; index < list.size(); index++) { - if (list.get(index).getId().equals(shortcutId)) { - list.remove(index); - break; - } - } - - ShortcutManagerCompat.setDynamicShortcuts(context, list); + ShortcutManagerCompat.removeDynamicShortcuts(context, Collections.singletonList(Integer.toString(cardId))); } static @NotNull