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 17da10fdd1400ecfd8d7f2e55651dd528d0614dfc5Jeff Brownpackage android.support.v7.internal.view.menu; 18e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 1930837f1095c803f332f4a1c3f0917c8afdd50156Adam Powellimport android.support.v4.internal.view.SupportMenuItem; 2030837f1095c803f332f4a1c3f0917c8afdd50156Adam Powellimport android.view.MenuItem; 2130837f1095c803f332f4a1c3f0917c8afdd50156Adam Powellimport android.view.SubMenu; 22e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 23e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banesimport java.util.HashMap; 24e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banesimport java.util.Iterator; 25e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 26e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banesabstract class BaseMenuWrapper<T> extends BaseWrapper<T> { 27e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 2830837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell private HashMap<MenuItem, SupportMenuItem> mMenuItems; 29e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 3030837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell private HashMap<SubMenu, SubMenu> mSubMenus; 31e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 32e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes BaseMenuWrapper(T object) { 33e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes super(object); 34e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 35e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 3630837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell final SupportMenuItem getMenuItemWrapper(android.view.MenuItem frameworkItem) { 37e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (frameworkItem != null) { 38e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes // Instantiate HashMap if null 39e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (mMenuItems == null) { 4030837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell mMenuItems = new HashMap<MenuItem, SupportMenuItem>(); 41e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 42e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 4330837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell SupportMenuItem compatItem = mMenuItems.get(frameworkItem); 44e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 45e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (null == compatItem) { 466e6abe6eb358db4c3932752249c8ac61dd3dab21Jeff Brown compatItem = MenuWrapperFactory.createSupportMenuItemWrapper(frameworkItem); 47e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes mMenuItems.put(frameworkItem, compatItem); 48e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 49e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 50e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes return compatItem; 51e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 52e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes return null; 53e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 54e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 55e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes final SubMenu getSubMenuWrapper(android.view.SubMenu frameworkSubMenu) { 56e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (frameworkSubMenu != null) { 57e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes // Instantiate HashMap if null 58e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (mSubMenus == null) { 59e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes mSubMenus = new HashMap<android.view.SubMenu, SubMenu>(); 60e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 61e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 62e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes SubMenu compatSubMenu = mSubMenus.get(frameworkSubMenu); 63e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 64e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (null == compatSubMenu) { 656e6abe6eb358db4c3932752249c8ac61dd3dab21Jeff Brown compatSubMenu = MenuWrapperFactory.createSupportSubMenuWrapper(frameworkSubMenu); 66e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes mSubMenus.put(frameworkSubMenu, compatSubMenu); 67e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 68e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes return compatSubMenu; 69e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 70e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes return null; 71e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 72e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 73e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 74e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes final void internalClear() { 75e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (mMenuItems != null) { 76e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes mMenuItems.clear(); 77e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 78e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (mSubMenus != null) { 79e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes mSubMenus.clear(); 80e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 81e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 82e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 83e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes final void internalRemoveGroup(final int groupId) { 84e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (mMenuItems == null) { 85e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes return; 86e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 87e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 88e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes Iterator<android.view.MenuItem> iterator = mMenuItems.keySet().iterator(); 89e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes android.view.MenuItem menuItem; 90e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 91e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes while (iterator.hasNext()) { 92e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes menuItem = iterator.next(); 93e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (groupId == menuItem.getGroupId()) { 94e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes iterator.remove(); 95e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 96e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 97e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 98e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 99e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes final void internalRemoveItem(final int id) { 100e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (mMenuItems == null) { 101e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes return; 102e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 103e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 104e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes Iterator<android.view.MenuItem> iterator = mMenuItems.keySet().iterator(); 105e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes android.view.MenuItem menuItem; 106e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes 107e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes while (iterator.hasNext()) { 108e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes menuItem = iterator.next(); 109e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes if (id == menuItem.getItemId()) { 110e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes iterator.remove(); 111e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes break; 112e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 113e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 114e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes } 115e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes} 116