133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell/*
233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * Copyright (C) 2010 The Android Open Source Project
333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell *
433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * Licensed under the Apache License, Version 2.0 (the "License");
533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * you may not use this file except in compliance with the License.
633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * You may obtain a copy of the License at
733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell *
833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell *      http://www.apache.org/licenses/LICENSE-2.0
933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell *
1033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * Unless required by applicable law or agreed to in writing, software
1133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * distributed under the License is distributed on an "AS IS" BASIS,
1233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * See the License for the specific language governing permissions and
1433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * limitations under the License.
1533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell */
1633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
1733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellpackage com.android.internal.view.menu;
1833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
1933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport java.util.ArrayList;
2033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport java.util.List;
2133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
2233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.content.ComponentName;
2333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.content.Context;
2433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.content.Intent;
2533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.content.pm.PackageManager;
2633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.content.pm.ResolveInfo;
2733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.view.KeyEvent;
2833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.view.Menu;
2933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.view.MenuItem;
3033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.view.SubMenu;
3133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
3233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell/**
3333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * @hide
3433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell */
3533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellpublic class ActionMenu implements Menu {
3633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private Context mContext;
3733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
3833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private boolean mIsQwerty;
3933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
4033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private ArrayList<ActionMenuItem> mItems;
4133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
4233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public ActionMenu(Context context) {
4333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mContext = context;
4433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mItems = new ArrayList<ActionMenuItem>();
4533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
4633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
4733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public Context getContext() {
4833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return mContext;
4933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
5033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
5133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem add(CharSequence title) {
5233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return add(0, 0, 0, title);
5333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
5433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
5533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem add(int titleRes) {
5633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return add(0, 0, 0, titleRes);
5733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
5833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
5933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem add(int groupId, int itemId, int order, int titleRes) {
6033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return add(groupId, itemId, order, mContext.getResources().getString(titleRes));
6133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
6233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
6333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem add(int groupId, int itemId, int order, CharSequence title) {
6433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        ActionMenuItem item = new ActionMenuItem(getContext(),
6533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                groupId, itemId, 0, order, title);
6633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mItems.add(order, item);
6733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return item;
6833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
6933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
7033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public int addIntentOptions(int groupId, int itemId, int order,
7133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            ComponentName caller, Intent[] specifics, Intent intent, int flags,
7233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            MenuItem[] outSpecificItems) {
7333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        PackageManager pm = mContext.getPackageManager();
7433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final List<ResolveInfo> lri =
7533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                pm.queryIntentActivityOptions(caller, specifics, intent, 0);
7633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final int N = lri != null ? lri.size() : 0;
7733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
7833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        if ((flags & FLAG_APPEND_TO_GROUP) == 0) {
7933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            removeGroup(groupId);
8033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        }
8133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
8233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        for (int i=0; i<N; i++) {
8333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            final ResolveInfo ri = lri.get(i);
8433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            Intent rintent = new Intent(
8533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                ri.specificIndex < 0 ? intent : specifics[ri.specificIndex]);
8633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            rintent.setComponent(new ComponentName(
8733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                    ri.activityInfo.applicationInfo.packageName,
8833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                    ri.activityInfo.name));
8933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            final MenuItem item = add(groupId, itemId, order, ri.loadLabel(pm))
9033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                    .setIcon(ri.loadIcon(pm))
9133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                    .setIntent(rintent);
9233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            if (outSpecificItems != null && ri.specificIndex >= 0) {
9333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                outSpecificItems[ri.specificIndex] = item;
9433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            }
9533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        }
9633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
9733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return N;
9833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
9933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
10033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public SubMenu addSubMenu(CharSequence title) {
10133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        // TODO Implement submenus
10233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return null;
10333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
10433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
10533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public SubMenu addSubMenu(int titleRes) {
10633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        // TODO Implement submenus
10733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return null;
10833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
10933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
11033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public SubMenu addSubMenu(int groupId, int itemId, int order,
11133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            CharSequence title) {
11233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        // TODO Implement submenus
11333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return null;
11433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
11533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
11633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes) {
11733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        // TODO Implement submenus
11833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return null;
11933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
12033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
12133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public void clear() {
12233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mItems.clear();
12333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
12433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
12533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public void close() {
12633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
12733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
12833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private int findItemIndex(int id) {
12933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final ArrayList<ActionMenuItem> items = mItems;
13033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final int itemCount = items.size();
13133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        for (int i = 0; i < itemCount; i++) {
13233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            if (items.get(i).getItemId() == id) {
13333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                return i;
13433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            }
13533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        }
13633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
13733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return -1;
13833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
13933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
14033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem findItem(int id) {
14133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return mItems.get(findItemIndex(id));
14233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
14333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
14433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem getItem(int index) {
14533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return mItems.get(index);
14633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
14733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
14833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public boolean hasVisibleItems() {
14933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final ArrayList<ActionMenuItem> items = mItems;
15033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final int itemCount = items.size();
15133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
15233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        for (int i = 0; i < itemCount; i++) {
15333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            if (items.get(i).isVisible()) {
15433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                return true;
15533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            }
15633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        }
15733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
15833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return false;
15933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
16033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
16133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private ActionMenuItem findItemWithShortcut(int keyCode, KeyEvent event) {
16233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        // TODO Make this smarter.
16333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final boolean qwerty = mIsQwerty;
16433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final ArrayList<ActionMenuItem> items = mItems;
16533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final int itemCount = items.size();
16633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
16733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        for (int i = 0; i < itemCount; i++) {
16833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            ActionMenuItem item = items.get(i);
16933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            final char shortcut = qwerty ? item.getAlphabeticShortcut() :
17033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                    item.getNumericShortcut();
17133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            if (keyCode == shortcut) {
17233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                return item;
17333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            }
17433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        }
17533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return null;
17633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
17733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
17833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public boolean isShortcutKey(int keyCode, KeyEvent event) {
17933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return findItemWithShortcut(keyCode, event) != null;
18033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
18133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
18233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public boolean performIdentifierAction(int id, int flags) {
18333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final int index = findItemIndex(id);
18433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        if (index < 0) {
18533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            return false;
18633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        }
18733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
18833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return mItems.get(index).invoke();
18933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
19033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
19133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public boolean performShortcut(int keyCode, KeyEvent event, int flags) {
19233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        ActionMenuItem item = findItemWithShortcut(keyCode, event);
19333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        if (item == null) {
19433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            return false;
19533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        }
19633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
19733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return item.invoke();
19833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
19933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
20033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public void removeGroup(int groupId) {
20133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final ArrayList<ActionMenuItem> items = mItems;
20233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        int itemCount = items.size();
20333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        int i = 0;
20433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        while (i < itemCount) {
20533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            if (items.get(i).getGroupId() == groupId) {
20633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                items.remove(i);
20733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                itemCount--;
20833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            } else {
20933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                i++;
21033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            }
21133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        }
21233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
21333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
21433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public void removeItem(int id) {
21533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mItems.remove(findItemIndex(id));
21633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
21733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
21833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public void setGroupCheckable(int group, boolean checkable,
21933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            boolean exclusive) {
22033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final ArrayList<ActionMenuItem> items = mItems;
22133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final int itemCount = items.size();
22233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
22333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        for (int i = 0; i < itemCount; i++) {
22433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            ActionMenuItem item = items.get(i);
22533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            if (item.getGroupId() == group) {
22633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                item.setCheckable(checkable);
22733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                item.setExclusiveCheckable(exclusive);
22833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            }
22933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        }
23033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
23133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
23233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public void setGroupEnabled(int group, boolean enabled) {
23333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final ArrayList<ActionMenuItem> items = mItems;
23433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final int itemCount = items.size();
23533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
23633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        for (int i = 0; i < itemCount; i++) {
23733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            ActionMenuItem item = items.get(i);
23833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            if (item.getGroupId() == group) {
23933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                item.setEnabled(enabled);
24033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            }
24133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        }
24233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
24333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
24433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public void setGroupVisible(int group, boolean visible) {
24533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final ArrayList<ActionMenuItem> items = mItems;
24633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        final int itemCount = items.size();
24733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
24833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        for (int i = 0; i < itemCount; i++) {
24933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            ActionMenuItem item = items.get(i);
25033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            if (item.getGroupId() == group) {
25133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell                item.setVisible(visible);
25233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            }
25333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        }
25433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
25533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
25633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public void setQwertyMode(boolean isQwerty) {
25733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mIsQwerty = isQwerty;
25833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
25933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
26033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public int size() {
26133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return mItems.size();
26233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
26333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell}
264