ActionMenuItem.java revision 33b974393b6fadcefc896ec4a0f9b66724f61e9f
133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell/*
233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * Copyright (C) 2010 The Android Open Source Project
333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell *
433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * Licensed under the Apache License, Version 2.0 (the "License");
533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * you may not use this file except in compliance with the License.
633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * You may obtain a copy of the License at
733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell *
833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell *      http://www.apache.org/licenses/LICENSE-2.0
933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell *
1033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * Unless required by applicable law or agreed to in writing, software
1133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * distributed under the License is distributed on an "AS IS" BASIS,
1233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * See the License for the specific language governing permissions and
1433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * limitations under the License.
1533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell */
1633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
1733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellpackage com.android.internal.view.menu;
1833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
1933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.content.Context;
2033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.content.Intent;
2133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.graphics.drawable.Drawable;
2233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.view.MenuItem;
2333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.view.SubMenu;
2433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.view.ContextMenu.ContextMenuInfo;
2533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
2633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell/**
2733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * @hide
2833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell */
2933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellpublic class ActionMenuItem implements MenuItem {
3033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private final int mId;
3133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private final int mGroup;
3233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private final int mCategoryOrder;
3333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private final int mOrdering;
3433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
3533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private CharSequence mTitle;
3633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private CharSequence mTitleCondensed;
3733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private Intent mIntent;
3833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private char mShortcutNumericChar;
3933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private char mShortcutAlphabeticChar;
4033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
4133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private Drawable mIconDrawable;
4233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private int mIconResId = NO_ICON;
4333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
4433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private Context mContext;
4533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
4633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private MenuItem.OnMenuItemClickListener mClickListener;
4733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
4833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private static final int NO_ICON = 0;
4933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
5033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private int mFlags = ENABLED;
5133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private static final int CHECKABLE      = 0x00000001;
5233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private static final int CHECKED        = 0x00000002;
5333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private static final int EXCLUSIVE      = 0x00000004;
5433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private static final int HIDDEN         = 0x00000008;
5533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    private static final int ENABLED        = 0x00000010;
5633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
5733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public ActionMenuItem(Context context, int group, int id, int categoryOrder, int ordering,
5833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            CharSequence title) {
5933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mContext = context;
6033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mId = id;
6133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mGroup = group;
6233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mCategoryOrder = categoryOrder;
6333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mOrdering = ordering;
6433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mTitle = title;
6533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
6633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
6733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public char getAlphabeticShortcut() {
6833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return mShortcutAlphabeticChar;
6933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
7033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
7133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public int getGroupId() {
7233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return mGroup;
7333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
7433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
7533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public Drawable getIcon() {
7633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return mIconDrawable;
7733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
7833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
7933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public Intent getIntent() {
8033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return mIntent;
8133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
8233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
8333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public int getItemId() {
8433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return mId;
8533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
8633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
8733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public ContextMenuInfo getMenuInfo() {
8833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return null;
8933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
9033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
9133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public char getNumericShortcut() {
9233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return mShortcutNumericChar;
9333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
9433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
9533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public int getOrder() {
9633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return mOrdering;
9733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
9833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
9933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public SubMenu getSubMenu() {
10033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return null;
10133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
10233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
10333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public CharSequence getTitle() {
10433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return mTitle;
10533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
10633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
10733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public CharSequence getTitleCondensed() {
10833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return mTitleCondensed;
10933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
11033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
11133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public boolean hasSubMenu() {
11233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return false;
11333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
11433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
11533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public boolean isCheckable() {
11633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return (mFlags & CHECKABLE) != 0;
11733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
11833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
11933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public boolean isChecked() {
12033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return (mFlags & CHECKED) != 0;
12133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
12233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
12333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public boolean isEnabled() {
12433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return (mFlags & ENABLED) != 0;
12533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
12633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
12733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public boolean isVisible() {
12833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return (mFlags & HIDDEN) == 0;
12933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
13033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
13133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem setAlphabeticShortcut(char alphaChar) {
13233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mShortcutAlphabeticChar = alphaChar;
13333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return this;
13433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
13533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
13633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem setCheckable(boolean checkable) {
13733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mFlags = (mFlags & ~CHECKABLE) | (checkable ? CHECKABLE : 0);
13833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return this;
13933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
14033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
14133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public ActionMenuItem setExclusiveCheckable(boolean exclusive) {
14233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mFlags = (mFlags & ~EXCLUSIVE) | (exclusive ? EXCLUSIVE : 0);
14333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return this;
14433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
14533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
14633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem setChecked(boolean checked) {
14733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mFlags = (mFlags & ~CHECKED) | (checked ? CHECKED : 0);
14833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return this;
14933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
15033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
15133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem setEnabled(boolean enabled) {
15233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mFlags = (mFlags & ~ENABLED) | (enabled ? ENABLED : 0);
15333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return this;
15433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
15533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
15633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem setIcon(Drawable icon) {
15733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mIconDrawable = icon;
15833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mIconResId = NO_ICON;
15933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return this;
16033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
16133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
16233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem setIcon(int iconRes) {
16333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mIconResId = iconRes;
16433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mIconDrawable = mContext.getResources().getDrawable(iconRes);
16533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return this;
16633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
16733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
16833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem setIntent(Intent intent) {
16933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mIntent = intent;
17033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return this;
17133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
17233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
17333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem setNumericShortcut(char numericChar) {
17433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mShortcutNumericChar = numericChar;
17533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return this;
17633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
17733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
17833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {
17933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mClickListener = menuItemClickListener;
18033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return this;
18133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
18233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
18333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem setShortcut(char numericChar, char alphaChar) {
18433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mShortcutNumericChar = numericChar;
18533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mShortcutAlphabeticChar = alphaChar;
18633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return this;
18733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
18833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
18933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem setTitle(CharSequence title) {
19033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mTitle = title;
19133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return this;
19233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
19333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
19433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem setTitle(int title) {
19533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mTitle = mContext.getResources().getString(title);
19633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return this;
19733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
19833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
19933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem setTitleCondensed(CharSequence title) {
20033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mTitleCondensed = title;
20133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return this;
20233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
20333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
20433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public MenuItem setVisible(boolean visible) {
20533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        mFlags = (mFlags & HIDDEN) | (visible ? 0 : HIDDEN);
20633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return this;
20733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
20833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
20933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    public boolean invoke() {
21033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        if (mClickListener != null && mClickListener.onMenuItemClick(this)) {
21133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            return true;
21233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        }
21333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
21433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        if (mIntent != null) {
21533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            mContext.startActivity(mIntent);
21633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell            return true;
21733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        }
21833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell
21933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell        return false;
22033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell    }
22133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell}
222