ExpandedMenuView.java revision da10fdd1400ecfd8d7f2e55651dd528d0614dfc5
1551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines/* 2551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines * Copyright (C) 2013 The Android Open Source Project 3551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines * 4551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 5551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines * you may not use this file except in compliance with the License. 6551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines * You may obtain a copy of the License at 7551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines * 8551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines * http://www.apache.org/licenses/LICENSE-2.0 9551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines * 10551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines * Unless required by applicable law or agreed to in writing, software 11551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 12551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines * See the License for the specific language governing permissions and 14551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines * limitations under the License. 15551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines */ 16551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 17551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinespackage android.support.v7.internal.view.menu; 18551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 19551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesimport android.content.Context; 20551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesimport android.support.v7.internal.view.menu.MenuBuilder; 21551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesimport android.support.v7.internal.view.menu.MenuBuilder.ItemInvoker; 22551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesimport android.support.v7.internal.view.menu.MenuView; 23551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesimport android.util.AttributeSet; 24551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesimport android.view.View; 25551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesimport android.widget.AdapterView; 26551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesimport android.widget.AdapterView.OnItemClickListener; 27551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesimport android.widget.ListView; 28551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 29551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines/** 30a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines * The expanded menu view is a list-like menu with all of the available menu items. It is opened 31a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines * by the user clicking no the 'More' button on the icon menu view. 32a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines */ 33a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hinespublic final class ExpandedMenuView extends ListView implements ItemInvoker, MenuView, OnItemClickListener { 34551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines private MenuBuilder mMenu; 35551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 36551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines /** Default animations for this menu */ 37551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines private int mAnimations; 38551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 39551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines /** 40551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines * Instantiates the ExpandedMenuView that is linked with the provided MenuBuilder. 41551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines * @param menu The model for the menu which this MenuView will display 42551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines */ 43551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines public ExpandedMenuView(Context context, AttributeSet attrs) { 44551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines super(context, attrs); 45551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines setOnItemClickListener(this); 46551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 47551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 48a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines public void initialize(MenuBuilder menu) { 49551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines mMenu = menu; 50551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 51551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 52551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines @Override 53551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines protected void onDetachedFromWindow() { 54551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines super.onDetachedFromWindow(); 55551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 56551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines // Clear the cached bitmaps of children 57551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines setChildrenDrawingCacheEnabled(false); 58551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 59551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 60551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines public boolean invokeItem(MenuItemImpl item) { 61551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines return mMenu.performItemAction(item, 0); 62551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 63551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 64551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines public void onItemClick(AdapterView parent, View v, int position, long id) { 65551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines invokeItem((MenuItemImpl) getAdapter().getItem(position)); 66551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 67551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 68551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines public int getWindowAnimations() { 69551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines return mAnimations; 70551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 71551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 72551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines} 73551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines