BaseMenuWrapper.java revision e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7
1e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes/* 2e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * Copyright (C) 2012 The Android Open Source Project 3e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * 4e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * Licensed under the Apache License, Version 2.0 (the "License"); 5e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * you may not use this file except in compliance with the License. 6e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * You may obtain a copy of the License at 7e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * 8e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * http://www.apache.org/licenses/LICENSE-2.0 9e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * 10e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * Unless required by applicable law or agreed to in writing, software 11e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * distributed under the License is distributed on an "AS IS" BASIS, 12e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * See the License for the specific language governing permissions and 14e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * limitations under the License. 15e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes */ 16e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 17e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banespackage android.support.appcompat.view.menu; 18e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 19e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banesimport android.support.appcompat.view.MenuItem; 20e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banesimport android.support.appcompat.view.SubMenu; 21e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 22e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banesimport java.util.HashMap; 23e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banesimport java.util.Iterator; 24e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 25e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banesabstract class BaseMenuWrapper<T> extends BaseWrapper<T> { 26e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 27e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes private HashMap<android.view.MenuItem, MenuItem> mMenuItems; 28e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 29e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes private HashMap<android.view.SubMenu, SubMenu> mSubMenus; 30e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 31e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes BaseMenuWrapper(T object) { 32e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes super(object); 33e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 34e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 35e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes final MenuItem getMenuItemWrapper(android.view.MenuItem frameworkItem) { 36e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (frameworkItem != null) { 37e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes // Instantiate HashMap if null 38e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (mMenuItems == null) { 39e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes mMenuItems = new HashMap<android.view.MenuItem, MenuItem>(); 40e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 41e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 42e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes MenuItem compatItem = mMenuItems.get(frameworkItem); 43e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 44e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (null == compatItem) { 45e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes compatItem = createMenuItemWrapper(frameworkItem); 46e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes mMenuItems.put(frameworkItem, compatItem); 47e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 48e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 49e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes return compatItem; 50e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 51e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes return null; 52e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 53e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 54e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes final SubMenu getSubMenuWrapper(android.view.SubMenu frameworkSubMenu) { 55e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (frameworkSubMenu != null) { 56e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes // Instantiate HashMap if null 57e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (mSubMenus == null) { 58e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes mSubMenus = new HashMap<android.view.SubMenu, SubMenu>(); 59e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 60e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 61e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes SubMenu compatSubMenu = mSubMenus.get(frameworkSubMenu); 62e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 63e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (null == compatSubMenu) { 64e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes compatSubMenu = createSubMenuWrapper(frameworkSubMenu); 65e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes mSubMenus.put(frameworkSubMenu, compatSubMenu); 66e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 67e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes return compatSubMenu; 68e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 69e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes return null; 70e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 71e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 72e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 73e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes final void internalClear() { 74e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (mMenuItems != null) { 75e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes mMenuItems.clear(); 76e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 77e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (mSubMenus != null) { 78e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes mSubMenus.clear(); 79e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 80e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 81e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 82e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes final void internalRemoveGroup(final int groupId) { 83e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (mMenuItems == null) { 84e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes return; 85e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 86e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 87e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes Iterator<android.view.MenuItem> iterator = mMenuItems.keySet().iterator(); 88e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes android.view.MenuItem menuItem; 89e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 90e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes while (iterator.hasNext()) { 91e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes menuItem = iterator.next(); 92e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (groupId == menuItem.getGroupId()) { 93e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes iterator.remove(); 94e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 95e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 96e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 97e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 98e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes final void internalRemoveItem(final int id) { 99e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (mMenuItems == null) { 100e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes return; 101e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 102e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 103e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes Iterator<android.view.MenuItem> iterator = mMenuItems.keySet().iterator(); 104e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes android.view.MenuItem menuItem; 105e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 106e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes while (iterator.hasNext()) { 107e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes menuItem = iterator.next(); 108e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (id == menuItem.getItemId()) { 109e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes iterator.remove(); 110e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes break; 111e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 112e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 113e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 114e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 115e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes abstract MenuItem createMenuItemWrapper(android.view.MenuItem menuItem); 116e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 117e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes abstract SubMenu createSubMenuWrapper(android.view.SubMenu subMenu); 118e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 119e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes} 120