Restore icon state after searching

This commit is contained in:
ByteHamster 2020-11-01 15:33:40 +01:00
parent 7c2c97c747
commit bec385a0a8

View File

@ -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<Integer, Integer> 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;
}
}
}