MenuItemWrapperICS.java revision 89208232f3b5d1451408d787872504a190bc7ee0
1e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes/*
2e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * Copyright (C) 2012 The Android Open Source Project
3e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes *
4e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * Licensed under the Apache License, Version 2.0 (the "License");
5e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * you may not use this file except in compliance with the License.
6e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * You may obtain a copy of the License at
7e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes *
8e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes *      http://www.apache.org/licenses/LICENSE-2.0
9e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes *
10e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * Unless required by applicable law or agreed to in writing, software
11e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * distributed under the License is distributed on an "AS IS" BASIS,
12e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * See the License for the specific language governing permissions and
14e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes * limitations under the License.
15e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes */
16e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes
17da10fdd1400ecfd8d7f2e55651dd528d0614dfc5Jeff Brownpackage android.support.v7.internal.view.menu;
18e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes
1989208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.content.Intent;
2089208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.graphics.drawable.Drawable;
21d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banesimport android.support.v4.internal.view.SupportMenuItem;
22d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banesimport android.support.v4.view.ActionProvider;
2389208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.support.v4.view.MenuItemCompat;
2489208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.view.ContextMenu;
2530837f1095c803f332f4a1c3f0917c8afdd50156Adam Powellimport android.view.MenuItem;
2689208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.view.SubMenu;
27d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banesimport android.view.View;
28e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes
2989208232f3b5d1451408d787872504a190bc7ee0Chris Banesclass MenuItemWrapperICS extends BaseMenuWrapper<android.view.MenuItem> implements SupportMenuItem {
30a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes    private final boolean mEmulateProviderVisibilityOverride;
31a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes    // Tracks the last requested visibility
32a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes    private boolean mLastRequestVisible;
33a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes
34a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes    MenuItemWrapperICS(android.view.MenuItem object, boolean emulateProviderVisibilityOverride) {
35e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes        super(object);
36a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes        mLastRequestVisible = object.isVisible();
37a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes        mEmulateProviderVisibilityOverride = emulateProviderVisibilityOverride;
38a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes    }
39a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes
40a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes    MenuItemWrapperICS(android.view.MenuItem object) {
41a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes        this(object, true);
42a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes    }
43a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes
44a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes    @Override
4589208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public int getItemId() {
4689208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.getItemId();
4789208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
4889208232f3b5d1451408d787872504a190bc7ee0Chris Banes
4989208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
5089208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public int getGroupId() {
5189208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.getGroupId();
5289208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
5389208232f3b5d1451408d787872504a190bc7ee0Chris Banes
5489208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
5589208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public int getOrder() {
5689208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.getOrder();
5789208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
5889208232f3b5d1451408d787872504a190bc7ee0Chris Banes
5989208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
6089208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setTitle(CharSequence title) {
6189208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setTitle(title);
6289208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
6389208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
6489208232f3b5d1451408d787872504a190bc7ee0Chris Banes
6589208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
6689208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setTitle(int title) {
6789208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setTitle(title);
6889208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
6989208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
7089208232f3b5d1451408d787872504a190bc7ee0Chris Banes
7189208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
7289208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public CharSequence getTitle() {
7389208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.getTitle();
7489208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
7589208232f3b5d1451408d787872504a190bc7ee0Chris Banes
7689208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
7789208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setTitleCondensed(CharSequence title) {
7889208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setTitleCondensed(title);
7989208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
8089208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
8189208232f3b5d1451408d787872504a190bc7ee0Chris Banes
8289208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
8389208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public CharSequence getTitleCondensed() {
8489208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.getTitleCondensed();
8589208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
8689208232f3b5d1451408d787872504a190bc7ee0Chris Banes
8789208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
8889208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setIcon(Drawable icon) {
8989208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setIcon(icon);
9089208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
9189208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
9289208232f3b5d1451408d787872504a190bc7ee0Chris Banes
9389208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
9489208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setIcon(int iconRes) {
9589208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setIcon(iconRes);
9689208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
9789208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
9889208232f3b5d1451408d787872504a190bc7ee0Chris Banes
9989208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
10089208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public Drawable getIcon() {
10189208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.getIcon();
10289208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
10389208232f3b5d1451408d787872504a190bc7ee0Chris Banes
10489208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
10589208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setIntent(Intent intent) {
10689208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setIntent(intent);
10789208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
10889208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
10989208232f3b5d1451408d787872504a190bc7ee0Chris Banes
11089208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
11189208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public Intent getIntent() {
11289208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.getIntent();
11389208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
11489208232f3b5d1451408d787872504a190bc7ee0Chris Banes
11589208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
11689208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setShortcut(char numericChar, char alphaChar) {
11789208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setShortcut(numericChar, alphaChar);
11889208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
11989208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
12089208232f3b5d1451408d787872504a190bc7ee0Chris Banes
12189208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
12289208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setNumericShortcut(char numericChar) {
12389208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setNumericShortcut(numericChar);
12489208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
12589208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
12689208232f3b5d1451408d787872504a190bc7ee0Chris Banes
12789208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
12889208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public char getNumericShortcut() {
12989208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.getNumericShortcut();
13089208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
13189208232f3b5d1451408d787872504a190bc7ee0Chris Banes
13289208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
13389208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setAlphabeticShortcut(char alphaChar) {
13489208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setAlphabeticShortcut(alphaChar);
13589208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
13689208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
13789208232f3b5d1451408d787872504a190bc7ee0Chris Banes
13889208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
13989208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public char getAlphabeticShortcut() {
14089208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.getAlphabeticShortcut();
14189208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
14289208232f3b5d1451408d787872504a190bc7ee0Chris Banes
14389208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
14489208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setCheckable(boolean checkable) {
14589208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setCheckable(checkable);
14689208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
14789208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
14889208232f3b5d1451408d787872504a190bc7ee0Chris Banes
14989208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
15089208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public boolean isCheckable() {
15189208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.isCheckable();
15289208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
15389208232f3b5d1451408d787872504a190bc7ee0Chris Banes
15489208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
15589208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setChecked(boolean checked) {
15689208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setChecked(checked);
15789208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
15889208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
15989208232f3b5d1451408d787872504a190bc7ee0Chris Banes
16089208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
16189208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public boolean isChecked() {
16289208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.isChecked();
16389208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
16489208232f3b5d1451408d787872504a190bc7ee0Chris Banes
16589208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
166a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes    public MenuItem setVisible(boolean visible) {
167a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes        if (mEmulateProviderVisibilityOverride) {
168a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes            mLastRequestVisible = visible;
169a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes            // If we need to be visible, we need to check whether the ActionProvider overrides it
170a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes            if (checkActionProviderOverrideVisibility()) {
171a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes                return this;
172a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes            }
173a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes        }
174a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes        return wrappedSetVisible(visible);
175e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes    }
176e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes
177e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes    @Override
17889208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public boolean isVisible() {
17989208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.isVisible();
18089208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
18189208232f3b5d1451408d787872504a190bc7ee0Chris Banes
18289208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
18389208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setEnabled(boolean enabled) {
18489208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setEnabled(enabled);
18589208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
18689208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
18789208232f3b5d1451408d787872504a190bc7ee0Chris Banes
18889208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
18989208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public boolean isEnabled() {
19089208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.isEnabled();
19189208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
19289208232f3b5d1451408d787872504a190bc7ee0Chris Banes
19389208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
19489208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public boolean hasSubMenu() {
19589208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.hasSubMenu();
19689208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
19789208232f3b5d1451408d787872504a190bc7ee0Chris Banes
19889208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
19989208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public SubMenu getSubMenu() {
20089208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return getSubMenuWrapper(mWrappedObject.getSubMenu());
20189208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
20289208232f3b5d1451408d787872504a190bc7ee0Chris Banes
20389208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
20489208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {
20589208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setOnMenuItemClickListener(menuItemClickListener != null ?
20689208232f3b5d1451408d787872504a190bc7ee0Chris Banes                new OnMenuItemClickListenerWrapper(menuItemClickListener) : null);
20789208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
20889208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
20989208232f3b5d1451408d787872504a190bc7ee0Chris Banes
21089208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
21189208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public ContextMenu.ContextMenuInfo getMenuInfo() {
21289208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.getMenuInfo();
21389208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
21489208232f3b5d1451408d787872504a190bc7ee0Chris Banes
21589208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
21689208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public void setShowAsAction(int actionEnum) {
21789208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setShowAsAction(actionEnum);
21889208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
21989208232f3b5d1451408d787872504a190bc7ee0Chris Banes
22089208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
22189208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setShowAsActionFlags(int actionEnum) {
22289208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setShowAsActionFlags(actionEnum);
22389208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
22489208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
22589208232f3b5d1451408d787872504a190bc7ee0Chris Banes
22689208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
22789208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setActionView(View view) {
22889208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setActionView(view);
22989208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
23089208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
23189208232f3b5d1451408d787872504a190bc7ee0Chris Banes
23289208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
23389208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public MenuItem setActionView(int resId) {
23489208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setActionView(resId);
23589208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
23689208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
23789208232f3b5d1451408d787872504a190bc7ee0Chris Banes
23889208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
23989208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public View getActionView() {
24089208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return mWrappedObject.getActionView();
24189208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
24289208232f3b5d1451408d787872504a190bc7ee0Chris Banes
24389208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
24430837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell    public MenuItem setActionProvider(android.view.ActionProvider provider) {
24530837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell        mWrappedObject.setActionProvider(provider);
246a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes        if (provider != null && mEmulateProviderVisibilityOverride) {
247a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes            checkActionProviderOverrideVisibility();
248a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes        }
24930837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell        return this;
25030837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell    }
25130837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell
25230837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell    @Override
25330837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell    public android.view.ActionProvider getActionProvider() {
25430837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell        return mWrappedObject.getActionProvider();
25530837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell    }
25630837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell
25730837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell    @Override
258e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes    public boolean expandActionView() {
259e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes        return mWrappedObject.expandActionView();
260e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes    }
261e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes
262e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes    @Override
263e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes    public boolean collapseActionView() {
264e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes        return mWrappedObject.collapseActionView();
265e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes    }
266e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes
267e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes    @Override
268e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes    public boolean isActionViewExpanded() {
269e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes        return mWrappedObject.isActionViewExpanded();
270e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes    }
271e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes
272e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes    @Override
273e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes    public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {
27489208232f3b5d1451408d787872504a190bc7ee0Chris Banes        mWrappedObject.setOnActionExpandListener(listener);
27589208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return this;
27689208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
27789208232f3b5d1451408d787872504a190bc7ee0Chris Banes
27889208232f3b5d1451408d787872504a190bc7ee0Chris Banes    @Override
27989208232f3b5d1451408d787872504a190bc7ee0Chris Banes    public SupportMenuItem setSupportOnActionExpandListener(
28089208232f3b5d1451408d787872504a190bc7ee0Chris Banes            MenuItemCompat.OnActionExpandListener listener) {
2816e6abe6eb358db4c3932752249c8ac61dd3dab21Jeff Brown        mWrappedObject.setOnActionExpandListener(listener != null ?
2826e6abe6eb358db4c3932752249c8ac61dd3dab21Jeff Brown                new OnActionExpandListenerWrapper(listener) : null);
28389208232f3b5d1451408d787872504a190bc7ee0Chris Banes        return null;
284e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes    }
285e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes
286d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes    @Override
287d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes    public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {
288d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        mWrappedObject.setActionProvider(actionProvider != null ?
289d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes                createActionProviderWrapper(actionProvider) : null);
290d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        return this;
291d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes    }
292d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes
293d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes    @Override
294d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes    public ActionProvider getSupportActionProvider() {
295d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        ActionProviderWrapper providerWrapper =
296a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes                (ActionProviderWrapper) mWrappedObject.getActionProvider();
297a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes        return providerWrapper != null ? providerWrapper.mInner : null;
298d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes    }
299d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes
300d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes    ActionProviderWrapper createActionProviderWrapper(ActionProvider provider) {
301d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        return new ActionProviderWrapper(provider);
302d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes    }
303d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes
304a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes    /**
305a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes     * @return true if the ActionProvider has overriden the visibility
306a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes     */
307a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes    final boolean checkActionProviderOverrideVisibility() {
308a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes        if (mLastRequestVisible) {
309a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes            ActionProvider provider = getSupportActionProvider();
310a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes            if (provider != null && provider.overridesItemVisibility() && !provider.isVisible()) {
311a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes                wrappedSetVisible(false);
312a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes                return true;
313a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes            }
314a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes        }
315a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes        return false;
316a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes    }
317a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes
318a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes    final MenuItem wrappedSetVisible(boolean visible) {
319a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes        return mWrappedObject.setVisible(visible);
320a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes    }
321a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes
32289208232f3b5d1451408d787872504a190bc7ee0Chris Banes    private class OnMenuItemClickListenerWrapper extends BaseWrapper<OnMenuItemClickListener>
32389208232f3b5d1451408d787872504a190bc7ee0Chris Banes            implements android.view.MenuItem.OnMenuItemClickListener {
32489208232f3b5d1451408d787872504a190bc7ee0Chris Banes
32589208232f3b5d1451408d787872504a190bc7ee0Chris Banes        OnMenuItemClickListenerWrapper(OnMenuItemClickListener object) {
32689208232f3b5d1451408d787872504a190bc7ee0Chris Banes            super(object);
32789208232f3b5d1451408d787872504a190bc7ee0Chris Banes        }
32889208232f3b5d1451408d787872504a190bc7ee0Chris Banes
32989208232f3b5d1451408d787872504a190bc7ee0Chris Banes        @Override
33089208232f3b5d1451408d787872504a190bc7ee0Chris Banes        public boolean onMenuItemClick(android.view.MenuItem item) {
33189208232f3b5d1451408d787872504a190bc7ee0Chris Banes            return mWrappedObject.onMenuItemClick(getMenuItemWrapper(item));
33289208232f3b5d1451408d787872504a190bc7ee0Chris Banes        }
33389208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
33489208232f3b5d1451408d787872504a190bc7ee0Chris Banes
33589208232f3b5d1451408d787872504a190bc7ee0Chris Banes    private class OnActionExpandListenerWrapper extends BaseWrapper<MenuItemCompat.OnActionExpandListener>
336e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes            implements android.view.MenuItem.OnActionExpandListener {
337e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes
33889208232f3b5d1451408d787872504a190bc7ee0Chris Banes        OnActionExpandListenerWrapper(MenuItemCompat.OnActionExpandListener object) {
339e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes            super(object);
340e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes        }
341e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes
342e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes        @Override
343e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes        public boolean onMenuItemActionExpand(android.view.MenuItem item) {
344e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes            return mWrappedObject.onMenuItemActionExpand(getMenuItemWrapper(item));
345e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes        }
346e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes
347e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes        @Override
348e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes        public boolean onMenuItemActionCollapse(android.view.MenuItem item) {
349e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes            return mWrappedObject.onMenuItemActionCollapse(getMenuItemWrapper(item));
350e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes        }
351e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes    }
352d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes
353d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes    class ActionProviderWrapper extends android.view.ActionProvider {
354d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        final ActionProvider mInner;
355d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes
356d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        public ActionProviderWrapper(ActionProvider inner) {
357d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes            super(inner.getContext());
358d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes            mInner = inner;
359a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes
360a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes            if (mEmulateProviderVisibilityOverride) {
361a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes                mInner.setVisibilityListener(new ActionProvider.VisibilityListener() {
362a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes                    @Override
363a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes                    public void onActionProviderVisibilityChanged(boolean isVisible) {
364a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes                        if (mInner.overridesItemVisibility() && mLastRequestVisible) {
365a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes                            wrappedSetVisible(isVisible);
366a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes                        }
367a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes                    }
368a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes                });
369a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes            }
370d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        }
371d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes
372d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        @Override
373d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        public View onCreateActionView() {
374a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes            if (mEmulateProviderVisibilityOverride) {
375a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes                // This is a convenient place to hook in and check if we need to override the
376a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes                // visibility after being created.
377a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes                checkActionProviderOverrideVisibility();
378a6fc0bcd9e65ed20193976cd02500152bb39a163Chris Banes            }
379d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes            return mInner.onCreateActionView();
380d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        }
381d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes
382d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        @Override
383d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        public boolean onPerformDefaultAction() {
384d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes            return mInner.onPerformDefaultAction();
385d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        }
386d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes
387d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        @Override
388d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        public boolean hasSubMenu() {
389d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes            return mInner.hasSubMenu();
390d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        }
391d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes
392d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        @Override
393d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        public void onPrepareSubMenu(android.view.SubMenu subMenu) {
394d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes            mInner.onPrepareSubMenu(getSubMenuWrapper(subMenu));
395d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes        }
396d713f4f0643a5f6409b431f643f1ad25dba6c22fChris Banes    }
397e73e46ef5b69ecdf18aa1947e0a1b3e4ec5d1ee7Chris Banes}
398