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