SubMenuBuilder.java revision 30837f1095c803f332f4a1c3f0917c8afdd50156
1bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell/*
2bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * Copyright (C) 2006 The Android Open Source Project
3bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell *
4bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * Licensed under the Apache License, Version 2.0 (the "License");
5bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * you may not use this file except in compliance with the License.
6bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * You may obtain a copy of the License at
7bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell *
8bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell *      http://www.apache.org/licenses/LICENSE-2.0
9bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell *
10bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * Unless required by applicable law or agreed to in writing, software
11bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * distributed under the License is distributed on an "AS IS" BASIS,
12bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * See the License for the specific language governing permissions and
14bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * limitations under the License.
15bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell */
16bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
17da10fdd1400ecfd8d7f2e55651dd528d0614dfc5Jeff Brownpackage android.support.v7.internal.view.menu;
18bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
19bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.content.Context;
20bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.graphics.drawable.Drawable;
2130837f1095c803f332f4a1c3f0917c8afdd50156Adam Powellimport android.view.Menu;
2230837f1095c803f332f4a1c3f0917c8afdd50156Adam Powellimport android.view.MenuItem;
2330837f1095c803f332f4a1c3f0917c8afdd50156Adam Powellimport android.view.SubMenu;
24bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.view.View;
25bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
26bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell/**
2720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * The model for a sub menu, which is an extension of the menu.  Most methods are proxied to the
2820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * parent menu.
29bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell */
30bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellpublic class SubMenuBuilder extends MenuBuilder implements SubMenu {
3120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
3220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private MenuBuilder mParentMenu;
3320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private MenuItemImpl mItem;
3420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
3520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenuBuilder(Context context, MenuBuilder parentMenu, MenuItemImpl item) {
3620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        super(context);
3720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
3820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mParentMenu = parentMenu;
3920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mItem = item;
4020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
4120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
4220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
4320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void setQwertyMode(boolean isQwerty) {
4420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mParentMenu.setQwertyMode(isQwerty);
4520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
4620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
4720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
4820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean isQwertyMode() {
4920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mParentMenu.isQwertyMode();
5020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
5120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
5220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
5320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void setShortcutsVisible(boolean shortcutsVisible) {
5420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mParentMenu.setShortcutsVisible(shortcutsVisible);
5520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
5620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
5720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
5820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean isShortcutsVisible() {
5920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mParentMenu.isShortcutsVisible();
6020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
6120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
6220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public Menu getParentMenu() {
6320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mParentMenu;
6420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
6520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
6620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public MenuItem getItem() {
6720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mItem;
6820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
6920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
7020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
7120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void setCallback(Callback callback) {
7220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mParentMenu.setCallback(callback);
7320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
7420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
7520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public MenuBuilder getRootMenu() {
7620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mParentMenu;
7720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
7820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
7920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
8020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean dispatchMenuItemSelected(MenuBuilder menu, MenuItem item) {
8120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return super.dispatchMenuItemSelected(menu, item) ||
8220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                mParentMenu.dispatchMenuItemSelected(menu, item);
8320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
8420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
8520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenu setIcon(Drawable icon) {
8620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mItem.setIcon(icon);
8720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return this;
8820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
8920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
9020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenu setIcon(int iconRes) {
9120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mItem.setIcon(iconRes);
9220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return this;
9320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
9420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
9520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenu setHeaderIcon(Drawable icon) {
9620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        super.setHeaderIconInt(icon);
9720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return this;
9820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
9920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
10020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenu setHeaderIcon(int iconRes) {
10120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        super.setHeaderIconInt(getContext().getResources().getDrawable(iconRes));
10220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return this;
10320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
10420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
10520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenu setHeaderTitle(CharSequence title) {
10620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        super.setHeaderTitleInt(title);
10720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return this;
10820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
10920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
11020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenu setHeaderTitle(int titleRes) {
11120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        super.setHeaderTitleInt(getContext().getResources().getString(titleRes));
11220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return this;
11320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
11420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
11520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenu setHeaderView(View view) {
11620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        super.setHeaderViewInt(view);
11720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return this;
11820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
11920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
12020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
12120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void clearHeader() {
12220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        //To change body of implemented methods use File | Settings | File Templates.
12320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
12420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
12520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
12620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean expandItemActionView(MenuItemImpl item) {
12720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mParentMenu.expandItemActionView(item);
12820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
12920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
13020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
13120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean collapseItemActionView(MenuItemImpl item) {
13220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mParentMenu.collapseItemActionView(item);
13320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
13420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
13520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
13620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public String getActionViewStatesKey() {
13720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        final int itemId = mItem != null ? mItem.getItemId() : 0;
13820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (itemId == 0) {
13920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            return null;
14020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
14120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return super.getActionViewStatesKey() + ":" + itemId;
14220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
143bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell}
144