136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley/*
236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley * Copyright (C) 2017 The Android Open Source Project
336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley *
436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley * Licensed under the Apache License, Version 2.0 (the "License");
536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley * you may not use this file except in compliance with the License.
636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley * You may obtain a copy of the License at
736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley *
836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley *      http://www.apache.org/licenses/LICENSE-2.0
936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley *
1036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley * Unless required by applicable law or agreed to in writing, software
1136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley * distributed under the License is distributed on an "AS IS" BASIS,
1236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley * See the License for the specific language governing permissions and
1436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley * limitations under the License.
1536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley */
1636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
1736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleypackage android.support.wear.widget.drawer;
1836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
1936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport android.annotation.TargetApi;
2036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport android.content.ComponentName;
2136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport android.content.Context;
2236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport android.content.Intent;
2336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport android.graphics.drawable.Drawable;
2436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport android.os.Build;
2536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport android.support.annotation.Nullable;
2636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport android.view.ActionProvider;
2736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport android.view.ContextMenu;
2836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport android.view.KeyEvent;
2936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport android.view.Menu;
3036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport android.view.MenuItem;
3136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport android.view.SubMenu;
3236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport android.view.View;
3336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
3436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport java.util.ArrayList;
3536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelleyimport java.util.List;
3636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
3736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley@TargetApi(Build.VERSION_CODES.M)
3836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley/* package */ class WearableActionDrawerMenu implements Menu {
3936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
4036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    private final Context mContext;
4136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    private final List<WearableActionDrawerMenuItem> mItems = new ArrayList<>();
4236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    private final WearableActionDrawerMenuListener mListener;
4336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    private final WearableActionDrawerMenuItem.MenuItemChangedListener mItemChangedListener =
4436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            new WearableActionDrawerMenuItem.MenuItemChangedListener() {
4536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley                @Override
4636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley                public void itemChanged(WearableActionDrawerMenuItem item) {
4736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley                    for (int i = 0; i < mItems.size(); i++) {
4836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley                        if (mItems.get(i) == item) {
4936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley                            mListener.menuItemChanged(i);
5036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley                        }
5136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley                    }
5236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley                }
5336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            };
5436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
5536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    WearableActionDrawerMenu(Context context, WearableActionDrawerMenuListener listener) {
5636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        mContext = context;
5736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        mListener = listener;
5836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
5936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
6036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
6136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public MenuItem add(CharSequence title) {
6236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        return add(0, 0, 0, title);
6336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
6436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
6536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
6636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public MenuItem add(int titleRes) {
6736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        return add(0, 0, 0, titleRes);
6836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
6936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
7036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
7136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public MenuItem add(int groupId, int itemId, int order, int titleRes) {
7236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        return add(groupId, itemId, order, mContext.getResources().getString(titleRes));
7336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
7436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
7536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
7636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public MenuItem add(int groupId, int itemId, int order, CharSequence title) {
7736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        WearableActionDrawerMenuItem item =
7836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley                new WearableActionDrawerMenuItem(mContext, itemId, title, mItemChangedListener);
7936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        mItems.add(item);
8036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        mListener.menuItemAdded(mItems.size() - 1);
8136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        return item;
8236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
8336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
8436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
8536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public void clear() {
8636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        mItems.clear();
8736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        mListener.menuChanged();
8836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
8936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
9036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
9136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public void removeItem(int id) {
9236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        int index = findItemIndex(id);
9336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        if ((index < 0) || (index >= mItems.size())) {
9436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return;
9536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
9636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        mItems.remove(index);
9736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        mListener.menuItemRemoved(index);
9836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
9936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
10036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
10136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public MenuItem findItem(int id) {
10236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        int index = findItemIndex(id);
10336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        if ((index < 0) || (index >= mItems.size())) {
10436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return null;
10536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
10636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        return mItems.get(index);
10736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
10836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
10936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
11036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public int size() {
11136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        return mItems.size();
11236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
11336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
11436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
11536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Nullable
11636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public MenuItem getItem(int index) {
11736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        if ((index < 0) || (index >= mItems.size())) {
11836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return null;
11936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
12036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        return mItems.get(index);
12136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
12236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
12336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    private int findItemIndex(int id) {
12436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        final List<WearableActionDrawerMenuItem> items = mItems;
12536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        final int itemCount = items.size();
12636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        for (int i = 0; i < itemCount; i++) {
12736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            if (items.get(i).getItemId() == id) {
12836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley                return i;
12936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            }
13036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
13136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
13236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        return -1;
13336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
13436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
13536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
13636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public void close() {
13736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        throw new UnsupportedOperationException("close is not implemented");
13836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
13936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
14036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
14136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public SubMenu addSubMenu(CharSequence title) {
14236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        throw new UnsupportedOperationException("addSubMenu is not implemented");
14336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
14436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
14536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
14636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public SubMenu addSubMenu(int titleRes) {
14736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        throw new UnsupportedOperationException("addSubMenu is not implemented");
14836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
14936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
15036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
15136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title) {
15236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        throw new UnsupportedOperationException("addSubMenu is not implemented");
15336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
15436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
15536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
15636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes) {
15736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        throw new UnsupportedOperationException("addSubMenu is not implemented");
15836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
15936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
16036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
16136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public int addIntentOptions(
16236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            int groupId,
16336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            int itemId,
16436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            int order,
16536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            ComponentName caller,
16636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            Intent[] specifics,
16736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            Intent intent,
16836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            int flags,
16936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            MenuItem[] outSpecificItems) {
17036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        throw new UnsupportedOperationException("addIntentOptions is not implemented");
17136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
17236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
17336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
17436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public void removeGroup(int groupId) {
17536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
17636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
17736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
17836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public void setGroupCheckable(int group, boolean checkable, boolean exclusive) {
17936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        throw new UnsupportedOperationException("setGroupCheckable is not implemented");
18036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
18136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
18236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
18336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public void setGroupVisible(int group, boolean visible) {
18436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        throw new UnsupportedOperationException("setGroupVisible is not implemented");
18536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
18636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
18736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
18836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public void setGroupEnabled(int group, boolean enabled) {
18936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        throw new UnsupportedOperationException("setGroupEnabled is not implemented");
19036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
19136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
19236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
19336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public boolean hasVisibleItems() {
19436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        return false;
19536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
19636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
19736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
19836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public boolean performShortcut(int keyCode, KeyEvent event, int flags) {
19936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        throw new UnsupportedOperationException("performShortcut is not implemented");
20036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
20136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
20236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
20336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public boolean isShortcutKey(int keyCode, KeyEvent event) {
20436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        return false;
20536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
20636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
20736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
20836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public boolean performIdentifierAction(int id, int flags) {
20936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        throw new UnsupportedOperationException("performIdentifierAction is not implemented");
21036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
21136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
21236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    @Override
21336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public void setQwertyMode(boolean isQwerty) {
21436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
21536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
21636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    /* package */ interface WearableActionDrawerMenuListener {
21736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
21836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        void menuItemChanged(int position);
21936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
22036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        void menuItemAdded(int position);
22136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
22236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        void menuItemRemoved(int position);
22336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
22436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        void menuChanged();
22536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
22636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
22736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    public static final class WearableActionDrawerMenuItem implements MenuItem {
22836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
22936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        private final int mId;
23036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
23136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        private final Context mContext;
23236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        private final MenuItemChangedListener mItemChangedListener;
23336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        private CharSequence mTitle;
23436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        private Drawable mIconDrawable;
23536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        private MenuItem.OnMenuItemClickListener mClickListener;
23636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
23736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        WearableActionDrawerMenuItem(
23836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley                Context context, int id, CharSequence title, MenuItemChangedListener listener) {
23936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            mContext = context;
24036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            mId = id;
24136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            mTitle = title;
24236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            mItemChangedListener = listener;
24336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
24436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
24536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
24636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public int getItemId() {
24736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return mId;
24836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
24936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
25036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
25136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setTitle(CharSequence title) {
25236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            mTitle = title;
25336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            if (mItemChangedListener != null) {
25436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley                mItemChangedListener.itemChanged(this);
25536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            }
25636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return this;
25736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
25836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
25936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
26036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setTitle(int title) {
26136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return setTitle(mContext.getResources().getString(title));
26236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
26336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
26436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
26536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public CharSequence getTitle() {
26636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return mTitle;
26736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
26836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
26936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
27036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setIcon(Drawable icon) {
27136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            mIconDrawable = icon;
27236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            if (mItemChangedListener != null) {
27336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley                mItemChangedListener.itemChanged(this);
27436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            }
27536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return this;
27636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
27736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
27836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
27936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setIcon(int iconRes) {
28036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return setIcon(mContext.getResources().getDrawable(iconRes));
28136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
28236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
28336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
28436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public Drawable getIcon() {
28536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return mIconDrawable;
28636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
28736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
28836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
28936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {
29036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            mClickListener = menuItemClickListener;
29136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return this;
29236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
29336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
29436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
29536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public int getGroupId() {
29636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return 0;
29736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
29836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
29936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
30036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public int getOrder() {
30136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return 0;
30236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
30336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
30436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
30536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setTitleCondensed(CharSequence title) {
30636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return this;
30736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
30836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
30936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
31036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public CharSequence getTitleCondensed() {
31136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return null;
31236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
31336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
31436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
31536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setIntent(Intent intent) {
31636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            throw new UnsupportedOperationException("setIntent is not implemented");
31736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
31836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
31936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
32036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public Intent getIntent() {
32136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return null;
32236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
32336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
32436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
32536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setShortcut(char numericChar, char alphaChar) {
32636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            throw new UnsupportedOperationException("setShortcut is not implemented");
32736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
32836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
32936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
33036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setNumericShortcut(char numericChar) {
33136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return this;
33236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
33336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
33436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
33536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public char getNumericShortcut() {
33636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return 0;
33736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
33836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
33936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
34036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setAlphabeticShortcut(char alphaChar) {
34136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return this;
34236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
34336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
34436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
34536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public char getAlphabeticShortcut() {
34636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return 0;
34736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
34836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
34936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
35036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setCheckable(boolean checkable) {
35136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return this;
35236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
35336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
35436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
35536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public boolean isCheckable() {
35636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return false;
35736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
35836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
35936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
36036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setChecked(boolean checked) {
36136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return this;
36236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
36336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
36436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
36536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public boolean isChecked() {
36636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return false;
36736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
36836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
36936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
37036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setVisible(boolean visible) {
37136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return this;
37236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
37336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
37436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
37536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public boolean isVisible() {
37636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return false;
37736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
37836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
37936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
38036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setEnabled(boolean enabled) {
38136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return this;
38236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
38336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
38436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
38536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public boolean isEnabled() {
38636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return false;
38736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
38836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
38936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
39036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public boolean hasSubMenu() {
39136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return false;
39236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
39336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
39436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
39536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public SubMenu getSubMenu() {
39636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return null;
39736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
39836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
39936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
40036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public ContextMenu.ContextMenuInfo getMenuInfo() {
40136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return null;
40236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
40336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
40436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
40536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public void setShowAsAction(int actionEnum) {
40636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            throw new UnsupportedOperationException("setShowAsAction is not implemented");
40736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
40836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
40936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
41036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setShowAsActionFlags(int actionEnum) {
41136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            throw new UnsupportedOperationException("setShowAsActionFlags is not implemented");
41236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
41336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
41436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
41536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setActionView(View view) {
41636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            throw new UnsupportedOperationException("setActionView is not implemented");
41736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
41836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
41936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
42036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setActionView(int resId) {
42136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            throw new UnsupportedOperationException("setActionView is not implemented");
42236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
42336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
42436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
42536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public View getActionView() {
42636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return null;
42736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
42836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
42936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
43036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setActionProvider(ActionProvider actionProvider) {
43136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            throw new UnsupportedOperationException("setActionProvider is not implemented");
43236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
43336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
43436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
43536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public ActionProvider getActionProvider() {
43636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return null;
43736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
43836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
43936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
44036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public boolean expandActionView() {
44136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            throw new UnsupportedOperationException("expandActionView is not implemented");
44236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
44336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
44436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
44536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public boolean collapseActionView() {
44636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            throw new UnsupportedOperationException("collapseActionView is not implemented");
44736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
44836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
44936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
45036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public boolean isActionViewExpanded() {
45136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            throw new UnsupportedOperationException("isActionViewExpanded is not implemented");
45236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
45336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
45436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        @Override
45536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        public MenuItem setOnActionExpandListener(OnActionExpandListener listener) {
45636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            throw new UnsupportedOperationException("setOnActionExpandListener is not implemented");
45736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
45836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
45936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        /**
46036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley         * Invokes the item by calling the listener if set.
46136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley         *
46236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley         * @return true if the invocation was handled, false otherwise
46336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley         */
46436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    /* package */ boolean invoke() {
46536545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            return mClickListener != null && mClickListener.onMenuItemClick(this);
46636545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
46736545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
46836545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
46936545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        private interface MenuItemChangedListener {
47036545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley
47136545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley            void itemChanged(WearableActionDrawerMenuItem item);
47236545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley        }
47336545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley    }
47436545bb3f2b12af352e550c278cff9026a18ca54Sean Kelley}
475