aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/apps/cachelist/ListNavigationSelectionActionProvider.java
blob: 8fe354980dc0891dcfacffe3a87eea9b6011df96 (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
package cgeo.geocaching.apps.cachelist;

import android.content.Context;
import android.support.v4.view.ActionProvider;
import android.support.v4.view.MenuItemCompat;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.SubMenu;
import android.view.View;

import java.util.List;

public class ListNavigationSelectionActionProvider extends ActionProvider {

    public static interface Callback {
        void onListNavigationSelected(final CacheListApp app);
    }

    private Callback callback;

    public ListNavigationSelectionActionProvider(final Context context) {
        super(context);
    }

    @Override
    public boolean hasSubMenu() {
        return true;
    }

    @Override
    public View onCreateActionView() {
        // must return null, otherwise the menu will not work
        return null;
    }

    public void setCallback(final Callback callback) {
        this.callback = callback;
    }

    @Override
    public void onPrepareSubMenu(final SubMenu subMenu) {
        subMenu.clear();
        if (callback == null) {
            return;
        }
        final List<CacheListApp> activeApps = CacheListApps.getActiveApps();
        for (int i = 0; i < activeApps.size(); i++) {
            final CacheListApp app = activeApps.get(i);
            subMenu.add(Menu.NONE, i, Menu.NONE, app.getName()).setOnMenuItemClickListener(new OnMenuItemClickListener() {

                @Override
                public boolean onMenuItemClick(final MenuItem item) {
                    final CacheListApp app = activeApps.get(item.getItemId());
                    callback.onListNavigationSelected(app);
                    return true;
                }
            });
        }
    }

    public static void initialize(final MenuItem menuItem, final Callback callback) {
        final ActionProvider actionProvider = MenuItemCompat.getActionProvider(menuItem);
        if (actionProvider instanceof ListNavigationSelectionActionProvider) {
            final ListNavigationSelectionActionProvider navigateAction = (ListNavigationSelectionActionProvider) actionProvider;
            navigateAction.setCallback(callback);
        }
    }

}