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