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