summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java
blob: fbfdf537f5098a0d964983e2a8bf74101f5d8e57 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package de.danoeh.antennapod.menuhandler;

import android.annotation.SuppressLint;
import android.content.Context;
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;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.ui.common.ThemeUtils;
import de.danoeh.antennapod.fragment.SearchFragment;

import java.util.HashMap;
import java.util.Map;

/**
 * Utilities for menu items.
 */
public class MenuItemUtils extends de.danoeh.antennapod.core.menuhandler.MenuItemUtils {

    public static void refreshLockItem(Context context, Menu menu) {
        final MenuItem queueLock = menu.findItem(R.id.queue_lock);
        if (UserPreferences.isQueueLocked()) {
            queueLock.setTitle(de.danoeh.antennapod.R.string.unlock_queue);
            queueLock.setIcon(ThemeUtils.getDrawableFromAttr(context, R.attr.ic_lock_open));
        } else {
            queueLock.setTitle(de.danoeh.antennapod.R.string.lock_queue);
            queueLock.setIcon(ThemeUtils.getDrawableFromAttr(context, R.attr.ic_lock_closed));
        }
    }

    public static void setupSearchItem(Menu menu, MainActivity activity, long feedId, String feedTitle) {
        MenuItem searchItem = menu.findItem(R.id.action_search);
        final SearchView sv = (SearchView) searchItem.getActionView();
        sv.setBackgroundColor(ThemeUtils.getColorFromAttr(activity, android.R.attr.windowBackground));
        sv.setQueryHint(activity.getString(R.string.search_label));
        sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String s) {
                sv.clearFocus();
                activity.loadChildFragment(SearchFragment.newInstance(s, feedId, feedTitle));
                searchItem.collapseActionView();
                return true;
            }

            @Override
            public boolean onQueryTextChange(String s) {
                return false;
            }
        });
        searchItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
            private final Map<Integer, Integer> oldShowAsActionState = new HashMap<>();

            @Override
            public boolean onMenuItemActionExpand(MenuItem clickedItem) {
                oldShowAsActionState.clear();
                for (int i = 0; i < menu.size(); i++) {
                    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 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;
        }
    }
}