1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.gallery3d.ui;
18
19import com.android.gallery3d.R;
20
21import android.app.ActionBar;
22import android.content.Context;
23import android.view.Menu;
24import android.view.MenuItem;
25import android.view.View;
26import android.view.View.OnClickListener;
27import android.widget.Button;
28import android.widget.PopupMenu;
29import android.widget.PopupMenu.OnMenuItemClickListener;
30
31import java.util.ArrayList;
32
33public class CustomMenu implements OnMenuItemClickListener {
34    @SuppressWarnings("unused")
35    private static final String TAG = "FilterMenu";
36
37    public static class DropDownMenu {
38        private Button mButton;
39        private PopupMenu mPopupMenu;
40        private Menu mMenu;
41
42        public DropDownMenu(Context context, Button button, int menuId,
43                OnMenuItemClickListener listener) {
44            mButton = button;
45            mButton.setBackgroundDrawable(context.getResources().getDrawable(
46                    R.drawable.dropdown_normal_holo_dark));
47            mPopupMenu = new PopupMenu(context, mButton);
48            mMenu = mPopupMenu.getMenu();
49            mPopupMenu.getMenuInflater().inflate(menuId, mMenu);
50            mPopupMenu.setOnMenuItemClickListener(listener);
51            mButton.setOnClickListener(new OnClickListener() {
52                public void onClick(View v) {
53                    mPopupMenu.show();
54                }
55            });
56        }
57
58        public MenuItem findItem(int id) {
59            return mMenu.findItem(id);
60        }
61
62        public void setTitle(CharSequence title) {
63            mButton.setText(title);
64        }
65    }
66
67
68
69    private Context mContext;
70    private ArrayList<DropDownMenu> mMenus;
71    private OnMenuItemClickListener mListener;
72
73    public CustomMenu(Context context) {
74        mContext = context;
75        mMenus = new ArrayList<DropDownMenu>();
76    }
77
78    public DropDownMenu addDropDownMenu(Button button, int menuId) {
79        DropDownMenu menu = new DropDownMenu(mContext, button, menuId, this);
80        mMenus.add(menu);
81        return menu;
82    }
83
84    public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {
85        mListener = listener;
86    }
87
88    public MenuItem findMenuItem(int id) {
89        MenuItem item = null;
90        for (DropDownMenu menu : mMenus) {
91            item = menu.findItem(id);
92            if (item != null) return item;
93        }
94        return item;
95    }
96
97    public void setMenuItemAppliedEnabled(int id, boolean applied, boolean enabled,
98            boolean updateTitle) {
99        MenuItem item = null;
100        for (DropDownMenu menu : mMenus) {
101            item = menu.findItem(id);
102            if (item != null) {
103                item.setCheckable(true);
104                item.setChecked(applied);
105                item.setEnabled(enabled);
106                if (updateTitle) {
107                    menu.setTitle(item.getTitle());
108                }
109            }
110        }
111    }
112
113    public void setMenuItemVisibility(int id, boolean visibility) {
114        MenuItem item = findMenuItem(id);
115        if (item != null) {
116            item.setVisible(visibility);
117        }
118    }
119
120    public boolean onMenuItemClick(MenuItem item) {
121        if (mListener != null) {
122            return mListener.onMenuItemClick(item);
123        }
124        return false;
125    }
126}
127