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;
217fa6a00a4600aac591402398c23fea97721adf26Chris Banesimport android.support.v4.content.ContextCompat;
2230837f1095c803f332f4a1c3f0917c8afdd50156Adam Powellimport android.view.Menu;
2330837f1095c803f332f4a1c3f0917c8afdd50156Adam Powellimport android.view.MenuItem;
2430837f1095c803f332f4a1c3f0917c8afdd50156Adam Powellimport android.view.SubMenu;
25bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.view.View;
26bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
27bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell/**
2820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * The model for a sub menu, which is an extension of the menu.  Most methods are proxied to the
2920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * parent menu.
3089208232f3b5d1451408d787872504a190bc7ee0Chris Banes *
3189208232f3b5d1451408d787872504a190bc7ee0Chris Banes * @hide
32bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell */
33bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellpublic class SubMenuBuilder extends MenuBuilder implements SubMenu {
3420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private MenuBuilder mParentMenu;
3520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private MenuItemImpl mItem;
3620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
3720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenuBuilder(Context context, MenuBuilder parentMenu, MenuItemImpl item) {
3820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        super(context);
3920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
4020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mParentMenu = parentMenu;
4120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mItem = item;
4220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
4320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
4420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
4520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void setQwertyMode(boolean isQwerty) {
4620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mParentMenu.setQwertyMode(isQwerty);
4720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
4820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
4920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
5020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean isQwertyMode() {
5120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mParentMenu.isQwertyMode();
5220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
5320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
5420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
5520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void setShortcutsVisible(boolean shortcutsVisible) {
5620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mParentMenu.setShortcutsVisible(shortcutsVisible);
5720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
5820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
5920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
6020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean isShortcutsVisible() {
6120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mParentMenu.isShortcutsVisible();
6220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
6320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
6420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public Menu getParentMenu() {
6520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mParentMenu;
6620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
6720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
6820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public MenuItem getItem() {
6920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mItem;
7020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
7120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
7220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
7320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void setCallback(Callback callback) {
7420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mParentMenu.setCallback(callback);
7520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
7620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
7749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    @Override
7820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public MenuBuilder getRootMenu() {
7920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mParentMenu;
8020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
8120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
8220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
8349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    boolean dispatchMenuItemSelected(MenuBuilder menu, MenuItem item) {
8420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return super.dispatchMenuItemSelected(menu, item) ||
8520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                mParentMenu.dispatchMenuItemSelected(menu, item);
8620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
8720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
8820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenu setIcon(Drawable icon) {
8920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mItem.setIcon(icon);
9020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return this;
9120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
9220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
9320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenu setIcon(int iconRes) {
9420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mItem.setIcon(iconRes);
9520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return this;
9620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
9720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
9820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenu setHeaderIcon(Drawable icon) {
9920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        super.setHeaderIconInt(icon);
10020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return this;
10120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
10220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
10320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenu setHeaderIcon(int iconRes) {
1047fa6a00a4600aac591402398c23fea97721adf26Chris Banes        super.setHeaderIconInt(ContextCompat.getDrawable(getContext(), iconRes));
10520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return this;
10620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
10720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
10820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenu setHeaderTitle(CharSequence title) {
10920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        super.setHeaderTitleInt(title);
11020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return this;
11120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
11220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
11320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenu setHeaderTitle(int titleRes) {
11420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        super.setHeaderTitleInt(getContext().getResources().getString(titleRes));
11520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return this;
11620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
11720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
11820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public SubMenu setHeaderView(View view) {
11920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        super.setHeaderViewInt(view);
12020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return this;
12120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
12220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
12320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
12420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean expandItemActionView(MenuItemImpl item) {
12520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mParentMenu.expandItemActionView(item);
12620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
12720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
12820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
12920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean collapseItemActionView(MenuItemImpl item) {
13020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mParentMenu.collapseItemActionView(item);
13120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
13220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
13320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
13420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public String getActionViewStatesKey() {
13520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        final int itemId = mItem != null ? mItem.getItemId() : 0;
13620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (itemId == 0) {
13720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            return null;
13820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
13920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return super.getActionViewStatesKey() + ":" + itemId;
14020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
141bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell}
142