1696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell/* 2696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * Copyright (C) 2011 The Android Open Source Project 3696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * 4696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * Licensed under the Apache License, Version 2.0 (the "License"); 5696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * you may not use this file except in compliance with the License. 6696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * You may obtain a copy of the License at 7696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * 8696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * http://www.apache.org/licenses/LICENSE-2.0 9696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * 10696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * Unless required by applicable law or agreed to in writing, software 11696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * distributed under the License is distributed on an "AS IS" BASIS, 12696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * See the License for the specific language governing permissions and 14696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * limitations under the License. 15696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell */ 16696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 17696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powellpackage com.android.internal.view.menu; 18696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 1928a8468995c71ba3fbba12557d143e7599db38d8Alan Viveretteimport android.annotation.NonNull; 2028a8468995c71ba3fbba12557d143e7599db38d8Alan Viveretteimport android.annotation.Nullable; 21696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powellimport android.content.Context; 22696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powellimport android.view.LayoutInflater; 23696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powellimport android.view.View; 24696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powellimport android.view.ViewGroup; 25696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 26696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powellimport java.util.ArrayList; 27696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 28696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell/** 29696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * Base class for MenuPresenters that have a consistent container view and item 30696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * views. Behaves similarly to an AdapterView in that existing item views will 31696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * be reused if possible when items change. 32696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell */ 33696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powellpublic abstract class BaseMenuPresenter implements MenuPresenter { 34538e565c06e915b91e7e3a901f872ccdd9bccdd3Adam Powell protected Context mSystemContext; 35696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell protected Context mContext; 36696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell protected MenuBuilder mMenu; 37538e565c06e915b91e7e3a901f872ccdd9bccdd3Adam Powell protected LayoutInflater mSystemInflater; 38696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell protected LayoutInflater mInflater; 39696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell private Callback mCallback; 40696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 41696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell private int mMenuLayoutRes; 42696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell private int mItemLayoutRes; 43696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 44696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell protected MenuView mMenuView; 45696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 4611ed1d6cae9214335c92ac38498a4e6c7d1c8324Adam Powell private int mId; 4711ed1d6cae9214335c92ac38498a4e6c7d1c8324Adam Powell 48696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell /** 49696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * Construct a new BaseMenuPresenter. 50696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * 51538e565c06e915b91e7e3a901f872ccdd9bccdd3Adam Powell * @param context Context for generating system-supplied views 52696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @param menuLayoutRes Layout resource ID for the menu container view 53696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @param itemLayoutRes Layout resource ID for a single item view 54696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell */ 55538e565c06e915b91e7e3a901f872ccdd9bccdd3Adam Powell public BaseMenuPresenter(Context context, int menuLayoutRes, int itemLayoutRes) { 56538e565c06e915b91e7e3a901f872ccdd9bccdd3Adam Powell mSystemContext = context; 57538e565c06e915b91e7e3a901f872ccdd9bccdd3Adam Powell mSystemInflater = LayoutInflater.from(context); 58696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell mMenuLayoutRes = menuLayoutRes; 59696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell mItemLayoutRes = itemLayoutRes; 60696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 61696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 62696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell @Override 6328a8468995c71ba3fbba12557d143e7599db38d8Alan Viverette public void initForMenu(@NonNull Context context, @Nullable MenuBuilder menu) { 64696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell mContext = context; 65696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell mInflater = LayoutInflater.from(mContext); 66696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell mMenu = menu; 67696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 68696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 69696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell @Override 70696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell public MenuView getMenuView(ViewGroup root) { 71696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell if (mMenuView == null) { 72538e565c06e915b91e7e3a901f872ccdd9bccdd3Adam Powell mMenuView = (MenuView) mSystemInflater.inflate(mMenuLayoutRes, root, false); 73696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell mMenuView.initialize(mMenu); 74696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell updateMenuView(true); 75696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 76696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 77696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell return mMenuView; 78696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 79696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 80696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell /** 81696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * Reuses item views when it can 82696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell */ 83696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell public void updateMenuView(boolean cleared) { 84696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell final ViewGroup parent = (ViewGroup) mMenuView; 85f35d049b9953fbd1cd24887bac57b5e148c97846Adam Powell if (parent == null) return; 86f35d049b9953fbd1cd24887bac57b5e148c97846Adam Powell 87696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell int childIndex = 0; 88f35d049b9953fbd1cd24887bac57b5e148c97846Adam Powell if (mMenu != null) { 89f35d049b9953fbd1cd24887bac57b5e148c97846Adam Powell mMenu.flagActionItems(); 90f35d049b9953fbd1cd24887bac57b5e148c97846Adam Powell ArrayList<MenuItemImpl> visibleItems = mMenu.getVisibleItems(); 91f35d049b9953fbd1cd24887bac57b5e148c97846Adam Powell final int itemCount = visibleItems.size(); 92f35d049b9953fbd1cd24887bac57b5e148c97846Adam Powell for (int i = 0; i < itemCount; i++) { 93f35d049b9953fbd1cd24887bac57b5e148c97846Adam Powell MenuItemImpl item = visibleItems.get(i); 94f35d049b9953fbd1cd24887bac57b5e148c97846Adam Powell if (shouldIncludeItem(childIndex, item)) { 95f35d049b9953fbd1cd24887bac57b5e148c97846Adam Powell final View convertView = parent.getChildAt(childIndex); 9624340afbab8ad4c191784fda8023407205bc0a75Adam Powell final MenuItemImpl oldItem = convertView instanceof MenuView.ItemView ? 9724340afbab8ad4c191784fda8023407205bc0a75Adam Powell ((MenuView.ItemView) convertView).getItemData() : null; 98f35d049b9953fbd1cd24887bac57b5e148c97846Adam Powell final View itemView = getItemView(item, convertView, parent); 9924340afbab8ad4c191784fda8023407205bc0a75Adam Powell if (item != oldItem) { 10024340afbab8ad4c191784fda8023407205bc0a75Adam Powell // Don't let old states linger with new data. 10124340afbab8ad4c191784fda8023407205bc0a75Adam Powell itemView.setPressed(false); 10224340afbab8ad4c191784fda8023407205bc0a75Adam Powell itemView.jumpDrawablesToCurrentState(); 10324340afbab8ad4c191784fda8023407205bc0a75Adam Powell } 104f35d049b9953fbd1cd24887bac57b5e148c97846Adam Powell if (itemView != convertView) { 105f35d049b9953fbd1cd24887bac57b5e148c97846Adam Powell addItemView(itemView, childIndex); 106f35d049b9953fbd1cd24887bac57b5e148c97846Adam Powell } 107f35d049b9953fbd1cd24887bac57b5e148c97846Adam Powell childIndex++; 108696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 109696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 110696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 111696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 112696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell // Remove leftover views. 113696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell while (childIndex < parent.getChildCount()) { 114696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell if (!filterLeftoverView(parent, childIndex)) { 115696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell childIndex++; 116696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 117696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 118696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 119696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 120696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell /** 121696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * Add an item view at the given index. 122696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * 123696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @param itemView View to add 124696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @param childIndex Index within the parent to insert at 125696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell */ 126696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell protected void addItemView(View itemView, int childIndex) { 12745c515b0e962ee8ffc901872bcc9f25599ea0e78Adam Powell final ViewGroup currentParent = (ViewGroup) itemView.getParent(); 12845c515b0e962ee8ffc901872bcc9f25599ea0e78Adam Powell if (currentParent != null) { 12945c515b0e962ee8ffc901872bcc9f25599ea0e78Adam Powell currentParent.removeView(itemView); 13045c515b0e962ee8ffc901872bcc9f25599ea0e78Adam Powell } 131696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell ((ViewGroup) mMenuView).addView(itemView, childIndex); 132696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 133696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 134696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell /** 135696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * Filter the child view at index and remove it if appropriate. 136696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @param parent Parent to filter from 137696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @param childIndex Index to filter 138696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @return true if the child view at index was removed 139696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell */ 140696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell protected boolean filterLeftoverView(ViewGroup parent, int childIndex) { 141696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell parent.removeViewAt(childIndex); 142696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell return true; 143696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 144696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 145696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell public void setCallback(Callback cb) { 146696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell mCallback = cb; 147696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 148696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 149b411b32861e7794a59fa7558dbe9d97407eccf23Adam Powell public Callback getCallback() { 150b411b32861e7794a59fa7558dbe9d97407eccf23Adam Powell return mCallback; 151b411b32861e7794a59fa7558dbe9d97407eccf23Adam Powell } 152b411b32861e7794a59fa7558dbe9d97407eccf23Adam Powell 153696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell /** 154696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * Create a new item view that can be re-bound to other item data later. 155696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * 156696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @return The new item view 157696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell */ 158696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell public MenuView.ItemView createItemView(ViewGroup parent) { 159538e565c06e915b91e7e3a901f872ccdd9bccdd3Adam Powell return (MenuView.ItemView) mSystemInflater.inflate(mItemLayoutRes, parent, false); 160696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 161696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 162696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell /** 163696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * Prepare an item view for use. See AdapterView for the basic idea at work here. 164696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * This may require creating a new item view, but well-behaved implementations will 165696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * re-use the view passed as convertView if present. The returned view will be populated 166696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * with data from the item parameter. 167696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * 168696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @param item Item to present 169696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @param convertView Existing view to reuse 170696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @param parent Intended parent view - use for inflation. 171696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @return View that presents the requested menu item 172696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell */ 173696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) { 174696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell MenuView.ItemView itemView; 175696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell if (convertView instanceof MenuView.ItemView) { 176696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell itemView = (MenuView.ItemView) convertView; 177696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } else { 178696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell itemView = createItemView(parent); 179696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 180696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell bindItemView(item, itemView); 181696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell return (View) itemView; 182696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 183696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 184696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell /** 185696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * Bind item data to an existing item view. 186696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * 187696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @param item Item to bind 188696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @param itemView View to populate with item data 189696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell */ 190696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell public abstract void bindItemView(MenuItemImpl item, MenuView.ItemView itemView); 191696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 192696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell /** 193696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * Filter item by child index and item data. 194696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * 195696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @param childIndex Indended presentation index of this item 196696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @param item Item to present 197696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell * @return true if this item should be included in this menu presentation; false otherwise 198696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell */ 199696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell public boolean shouldIncludeItem(int childIndex, MenuItemImpl item) { 200696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell return true; 201696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 202696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 203696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) { 204696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell if (mCallback != null) { 205696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell mCallback.onCloseMenu(menu, allMenusAreClosing); 206696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 207696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 208696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 209696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell public boolean onSubMenuSelected(SubMenuBuilder menu) { 210696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell if (mCallback != null) { 211696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell return mCallback.onOpenSubMenu(menu); 212696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 213696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell return false; 214696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 215696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 216696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell public boolean flagActionItems() { 217696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell return false; 218696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 2198d02deabac62c4a68a335a7b3141795466362b89Adam Powell 2208d02deabac62c4a68a335a7b3141795466362b89Adam Powell public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) { 2218d02deabac62c4a68a335a7b3141795466362b89Adam Powell return false; 2228d02deabac62c4a68a335a7b3141795466362b89Adam Powell } 2238d02deabac62c4a68a335a7b3141795466362b89Adam Powell 2248d02deabac62c4a68a335a7b3141795466362b89Adam Powell public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) { 2258d02deabac62c4a68a335a7b3141795466362b89Adam Powell return false; 2268d02deabac62c4a68a335a7b3141795466362b89Adam Powell } 22711ed1d6cae9214335c92ac38498a4e6c7d1c8324Adam Powell 22811ed1d6cae9214335c92ac38498a4e6c7d1c8324Adam Powell public int getId() { 22911ed1d6cae9214335c92ac38498a4e6c7d1c8324Adam Powell return mId; 23011ed1d6cae9214335c92ac38498a4e6c7d1c8324Adam Powell } 23111ed1d6cae9214335c92ac38498a4e6c7d1c8324Adam Powell 23211ed1d6cae9214335c92ac38498a4e6c7d1c8324Adam Powell public void setId(int id) { 23311ed1d6cae9214335c92ac38498a4e6c7d1c8324Adam Powell mId = id; 23411ed1d6cae9214335c92ac38498a4e6c7d1c8324Adam Powell } 235696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell} 236