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