From bec385a0a854de10b223f6bb3efdd35f506ceb48 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 1 Nov 2020 15:33:40 +0100 Subject: Restore icon state after searching --- .../antennapod/menuhandler/MenuItemUtils.java | 56 ++++++++++++++++------ 1 file changed, 42 insertions(+), 14 deletions(-) (limited to 'app/src') diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java index 6b3c99975..9c54a529b 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java @@ -1,9 +1,10 @@ package de.danoeh.antennapod.menuhandler; +import android.annotation.SuppressLint; import android.content.Context; -import android.content.res.TypedArray; import android.view.Menu; import android.view.MenuItem; +import androidx.appcompat.view.menu.MenuItemImpl; import androidx.appcompat.widget.SearchView; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; @@ -11,24 +12,23 @@ import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.util.ThemeUtils; import de.danoeh.antennapod.fragment.SearchFragment; +import java.util.HashMap; +import java.util.Map; + /** - * Utilities for menu items + * Utilities for menu items. */ public class MenuItemUtils extends de.danoeh.antennapod.core.menuhandler.MenuItemUtils { - @SuppressWarnings("ResourceType") public static void refreshLockItem(Context context, Menu menu) { - final MenuItem queueLock = menu.findItem(de.danoeh.antennapod.R.id.queue_lock); - int[] lockIcons = new int[] { de.danoeh.antennapod.R.attr.ic_lock_open, de.danoeh.antennapod.R.attr.ic_lock_closed }; - TypedArray ta = context.obtainStyledAttributes(lockIcons); + final MenuItem queueLock = menu.findItem(R.id.queue_lock); if (UserPreferences.isQueueLocked()) { queueLock.setTitle(de.danoeh.antennapod.R.string.unlock_queue); - queueLock.setIcon(ta.getDrawable(0)); + queueLock.setIcon(ThemeUtils.getDrawableFromAttr(context, R.attr.ic_lock_open)); } else { queueLock.setTitle(de.danoeh.antennapod.R.string.lock_queue); - queueLock.setIcon(ta.getDrawable(1)); + queueLock.setIcon(ThemeUtils.getDrawableFromAttr(context, R.attr.ic_lock_closed)); } - ta.recycle(); } public static void setupSearchItem(Menu menu, MainActivity activity, long feedId, String feedTitle) { @@ -51,21 +51,49 @@ public class MenuItemUtils extends de.danoeh.antennapod.core.menuhandler.MenuIte } }); searchItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { + private final Map oldShowAsActionState = new HashMap<>(); + @Override - public boolean onMenuItemActionExpand(MenuItem item) { + public boolean onMenuItemActionExpand(MenuItem clickedItem) { + oldShowAsActionState.clear(); for (int i = 0; i < menu.size(); i++) { - if (menu.getItem(i).getItemId() != searchItem.getItemId()) { - menu.getItem(i).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); + MenuItem item = menu.getItem(i); + if (item.getItemId() != searchItem.getItemId()) { + oldShowAsActionState.put(item.getItemId(), getShowAsActionFlag(item)); + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); } } return true; } @Override - public boolean onMenuItemActionCollapse(MenuItem item) { - activity.invalidateOptionsMenu(); + public boolean onMenuItemActionCollapse(MenuItem collapsedItem) { + for (int i = 0; i < menu.size(); i++) { + MenuItem item = menu.getItem(i); + if (item.getItemId() != searchItem.getItemId() + && oldShowAsActionState.containsKey(item.getItemId())) { + item.setShowAsAction(oldShowAsActionState.get(item.getItemId())); + } + } return true; } }); } + + @SuppressLint("RestrictedApi") + private static int getShowAsActionFlag(MenuItem item) { + if (!(item instanceof MenuItemImpl)) { + return MenuItemImpl.SHOW_AS_ACTION_NEVER; + } + MenuItemImpl itemImpl = ((MenuItemImpl) item); + if (itemImpl.requiresActionButton()) { + return MenuItemImpl.SHOW_AS_ACTION_ALWAYS; + } else if (itemImpl.requestsActionButton()) { + return MenuItemImpl.SHOW_AS_ACTION_IF_ROOM; + } else if (itemImpl.showsTextAsAction()) { + return MenuItemImpl.SHOW_AS_ACTION_WITH_TEXT; + } else { + return MenuItemImpl.SHOW_AS_ACTION_NEVER; + } + } } -- cgit v1.2.3