127aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn/*
227aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn * Copyright (C) 2011 The Android Open Source Project
327aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn *
427aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
527aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn * you may not use this file except in compliance with the License.
627aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn * You may obtain a copy of the License at
727aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn *
827aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
927aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn *
1027aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn * Unless required by applicable law or agreed to in writing, software
1127aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
1227aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1327aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn * See the License for the specific language governing permissions and
1427aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn * limitations under the License.
1527aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn */
1627aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn
1727aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackbornpackage android.support.v4.view;
1827aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn
1927aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackbornimport android.view.MenuItem;
2027aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn
2127aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn/**
220574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * Helper for accessing features in {@link android.view.Menu}
230574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * introduced after API level 4 in a backwards compatible fashion.
2427aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn */
2527aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackbornpublic class MenuCompat {
261935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
2727aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    /**
2827aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn     * Interface for the full API.
2927aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn     */
3027aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    interface MenuVersionImpl {
3127aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn        public boolean setShowAsAction(MenuItem item, int actionEnum);
3227aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    }
3327aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn
3427aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    /**
3527aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn     * Interface implementation that doesn't use anything about v4 APIs.
3627aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn     */
3727aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    static class BaseMenuVersionImpl implements MenuVersionImpl {
3827aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn        @Override
3927aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn        public boolean setShowAsAction(MenuItem item, int actionEnum) {
4027aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn            return false;
4127aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn        }
4227aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    }
4327aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn
4427aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    /**
4527aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn     * Interface implementation for devices with at least v11 APIs.
4627aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn     */
4727aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    static class HoneycombMenuVersionImpl implements MenuVersionImpl {
4827aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn        @Override
4927aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn        public boolean setShowAsAction(MenuItem item, int actionEnum) {
501935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov            MenuItemCompatHoneycomb.setShowAsAction(item, actionEnum);
5127aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn            return true;
5227aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn        }
5327aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    }
5427aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn
5527aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    /**
5627aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn     * Select the correct implementation to use for the current platform.
5727aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn     */
5827aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    static final MenuVersionImpl IMPL;
5927aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    static {
6027aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn        if (android.os.Build.VERSION.SDK_INT >= 11) {
6127aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn            IMPL = new HoneycombMenuVersionImpl();
6227aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn        } else {
6327aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn            IMPL = new BaseMenuVersionImpl();
6427aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn        }
6527aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    }
6627aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn
6727aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    // -------------------------------------------------------------------
6827aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn
6927aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    /**
7027aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn     * Call {@link MenuItem#setShowAsAction(int) MenuItem.setShowAsAction()}.
710574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * If running on a pre-{@link android.os.Build.VERSION_CODES#HONEYCOMB} device,
7227aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn     * does nothing and returns false.  Otherwise returns true.
731935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov     *
740574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @deprecated Use {@link MenuItemCompat#setShowAsAction(MenuItem, int)
750574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *     MenuItemCompat.setShowAsAction(MenuItem, int)}
760574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov
7727aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn     */
7827aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    public static boolean setShowAsAction(MenuItem item, int actionEnum) {
7927aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn        return IMPL.setShowAsAction(item, actionEnum);
8027aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn    }
8127aea04b07c1fafa0f815aa4f80374a9e051b41cDianne Hackborn}
82