19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.internal.view.menu; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.Menu; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.MenuItem; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.SubMenu; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The model for a sub menu, which is an extension of the menu. Most methods are proxied to 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the parent menu. 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class SubMenuBuilder extends MenuBuilder implements SubMenu { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MenuBuilder mParentMenu; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MenuItemImpl mItem; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SubMenuBuilder(Context context, MenuBuilder parentMenu, MenuItemImpl item) { 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context); 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParentMenu = parentMenu; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mItem = item; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setQwertyMode(boolean isQwerty) { 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParentMenu.setQwertyMode(isQwerty); 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isQwertyMode() { 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParentMenu.isQwertyMode(); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setShortcutsVisible(boolean shortcutsVisible) { 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParentMenu.setShortcutsVisible(shortcutsVisible); 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isShortcutsVisible() { 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParentMenu.isShortcutsVisible(); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Menu getParentMenu() { 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParentMenu; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MenuItem getItem() { 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mItem; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setCallback(Callback callback) { 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParentMenu.setCallback(callback); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MenuBuilder getRootMenu() { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParentMenu; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 79f746fc9e45c2bc80d8af2eb10d849c5807ebe1c7Adam Powell @Override 80f746fc9e45c2bc80d8af2eb10d849c5807ebe1c7Adam Powell boolean dispatchMenuItemSelected(MenuBuilder menu, MenuItem item) { 81f746fc9e45c2bc80d8af2eb10d849c5807ebe1c7Adam Powell return super.dispatchMenuItemSelected(menu, item) || 82f746fc9e45c2bc80d8af2eb10d849c5807ebe1c7Adam Powell mParentMenu.dispatchMenuItemSelected(menu, item); 83f746fc9e45c2bc80d8af2eb10d849c5807ebe1c7Adam Powell } 84f746fc9e45c2bc80d8af2eb10d849c5807ebe1c7Adam Powell 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SubMenu setIcon(Drawable icon) { 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mItem.setIcon(icon); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SubMenu setIcon(int iconRes) { 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mItem.setIcon(iconRes); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SubMenu setHeaderIcon(Drawable icon) { 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (SubMenu) super.setHeaderIconInt(icon); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SubMenu setHeaderIcon(int iconRes) { 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (SubMenu) super.setHeaderIconInt(iconRes); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SubMenu setHeaderTitle(CharSequence title) { 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (SubMenu) super.setHeaderTitleInt(title); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SubMenu setHeaderTitle(int titleRes) { 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (SubMenu) super.setHeaderTitleInt(titleRes); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SubMenu setHeaderView(View view) { 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (SubMenu) super.setHeaderViewInt(view); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1148d02deabac62c4a68a335a7b3141795466362b89Adam Powell 1158d02deabac62c4a68a335a7b3141795466362b89Adam Powell @Override 1168d02deabac62c4a68a335a7b3141795466362b89Adam Powell public boolean expandItemActionView(MenuItemImpl item) { 1178d02deabac62c4a68a335a7b3141795466362b89Adam Powell return mParentMenu.expandItemActionView(item); 1188d02deabac62c4a68a335a7b3141795466362b89Adam Powell } 1198d02deabac62c4a68a335a7b3141795466362b89Adam Powell 1208d02deabac62c4a68a335a7b3141795466362b89Adam Powell @Override 1218d02deabac62c4a68a335a7b3141795466362b89Adam Powell public boolean collapseItemActionView(MenuItemImpl item) { 1228d02deabac62c4a68a335a7b3141795466362b89Adam Powell return mParentMenu.collapseItemActionView(item); 1238d02deabac62c4a68a335a7b3141795466362b89Adam Powell } 124038f1c80af06da55056120e121d43e3ee89ec726Adam Powell 125038f1c80af06da55056120e121d43e3ee89ec726Adam Powell @Override 126038f1c80af06da55056120e121d43e3ee89ec726Adam Powell public String getActionViewStatesKey() { 127038f1c80af06da55056120e121d43e3ee89ec726Adam Powell final int itemId = mItem != null ? mItem.getItemId() : 0; 128038f1c80af06da55056120e121d43e3ee89ec726Adam Powell if (itemId == 0) { 129038f1c80af06da55056120e121d43e3ee89ec726Adam Powell return null; 130038f1c80af06da55056120e121d43e3ee89ec726Adam Powell } 131038f1c80af06da55056120e121d43e3ee89ec726Adam Powell return super.getActionViewStatesKey() + ":" + itemId; 132038f1c80af06da55056120e121d43e3ee89ec726Adam Powell } 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 134