1 /* 2 * Copyright (C) 2006 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package androidx.appcompat.view.menu; 18 19 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX; 20 21 import android.content.Context; 22 import android.graphics.drawable.Drawable; 23 import android.view.Menu; 24 import android.view.MenuItem; 25 import android.view.SubMenu; 26 import android.view.View; 27 28 import androidx.annotation.RestrictTo; 29 30 import org.jspecify.annotations.NonNull; 31 32 /** 33 * The model for a sub menu, which is an extension of the menu. Most methods are proxied to the 34 * parent menu. 35 * 36 */ 37 @RestrictTo(LIBRARY_GROUP_PREFIX) 38 public class SubMenuBuilder extends MenuBuilder implements SubMenu { 39 private MenuBuilder mParentMenu; 40 private MenuItemImpl mItem; 41 SubMenuBuilder(Context context, MenuBuilder parentMenu, MenuItemImpl item)42 public SubMenuBuilder(Context context, MenuBuilder parentMenu, MenuItemImpl item) { 43 super(context); 44 45 mParentMenu = parentMenu; 46 mItem = item; 47 } 48 49 @Override setQwertyMode(boolean isQwerty)50 public void setQwertyMode(boolean isQwerty) { 51 mParentMenu.setQwertyMode(isQwerty); 52 } 53 54 @Override isQwertyMode()55 public boolean isQwertyMode() { 56 return mParentMenu.isQwertyMode(); 57 } 58 59 @Override setShortcutsVisible(boolean shortcutsVisible)60 public void setShortcutsVisible(boolean shortcutsVisible) { 61 mParentMenu.setShortcutsVisible(shortcutsVisible); 62 } 63 64 @Override isShortcutsVisible()65 public boolean isShortcutsVisible() { 66 return mParentMenu.isShortcutsVisible(); 67 } 68 getParentMenu()69 public Menu getParentMenu() { 70 return mParentMenu; 71 } 72 73 @Override getItem()74 public MenuItem getItem() { 75 return mItem; 76 } 77 78 @Override setCallback(Callback callback)79 public void setCallback(Callback callback) { 80 mParentMenu.setCallback(callback); 81 } 82 83 @Override getRootMenu()84 public MenuBuilder getRootMenu() { 85 return mParentMenu.getRootMenu(); 86 } 87 88 @Override dispatchMenuItemSelected(@onNull MenuBuilder menu, @NonNull MenuItem item)89 boolean dispatchMenuItemSelected(@NonNull MenuBuilder menu, @NonNull MenuItem item) { 90 return super.dispatchMenuItemSelected(menu, item) || 91 mParentMenu.dispatchMenuItemSelected(menu, item); 92 } 93 94 @Override setIcon(Drawable icon)95 public SubMenu setIcon(Drawable icon) { 96 mItem.setIcon(icon); 97 return this; 98 } 99 100 @Override setIcon(int iconRes)101 public SubMenu setIcon(int iconRes) { 102 mItem.setIcon(iconRes); 103 return this; 104 } 105 106 @Override setHeaderIcon(Drawable icon)107 public SubMenu setHeaderIcon(Drawable icon) { 108 return (SubMenu) super.setHeaderIconInt(icon); 109 } 110 111 @Override setHeaderIcon(int iconRes)112 public SubMenu setHeaderIcon(int iconRes) { 113 return (SubMenu) super.setHeaderIconInt(iconRes); 114 } 115 116 @Override setHeaderTitle(CharSequence title)117 public SubMenu setHeaderTitle(CharSequence title) { 118 return (SubMenu) super.setHeaderTitleInt(title); 119 } 120 121 @Override setHeaderTitle(int titleRes)122 public SubMenu setHeaderTitle(int titleRes) { 123 return (SubMenu) super.setHeaderTitleInt(titleRes); 124 } 125 126 @Override setHeaderView(View view)127 public SubMenu setHeaderView(View view) { 128 return (SubMenu) super.setHeaderViewInt(view); 129 } 130 131 @Override expandItemActionView(MenuItemImpl item)132 public boolean expandItemActionView(MenuItemImpl item) { 133 return mParentMenu.expandItemActionView(item); 134 } 135 136 @Override collapseItemActionView(MenuItemImpl item)137 public boolean collapseItemActionView(MenuItemImpl item) { 138 return mParentMenu.collapseItemActionView(item); 139 } 140 141 @Override getActionViewStatesKey()142 public String getActionViewStatesKey() { 143 final int itemId = mItem != null ? mItem.getItemId() : 0; 144 if (itemId == 0) { 145 return null; 146 } 147 return super.getActionViewStatesKey() + ":" + itemId; 148 } 149 150 @Override setGroupDividerEnabled(boolean groupDividerEnabled)151 public void setGroupDividerEnabled(boolean groupDividerEnabled) { 152 mParentMenu.setGroupDividerEnabled(groupDividerEnabled); 153 } 154 155 @Override isGroupDividerEnabled()156 public boolean isGroupDividerEnabled() { 157 return mParentMenu.isGroupDividerEnabled(); 158 } 159 } 160