NavigationMenuPresenter.java revision 31a49efe2adb59e31611f6871895a3243d835127
131a49efe2adb59e31611f6871895a3243d835127Yuichi Araki/*
231a49efe2adb59e31611f6871895a3243d835127Yuichi Araki * Copyright (C) 2015 The Android Open Source Project
331a49efe2adb59e31611f6871895a3243d835127Yuichi Araki *
431a49efe2adb59e31611f6871895a3243d835127Yuichi Araki * Licensed under the Apache License, Version 2.0 (the "License");
531a49efe2adb59e31611f6871895a3243d835127Yuichi Araki * you may not use this file except in compliance with the License.
631a49efe2adb59e31611f6871895a3243d835127Yuichi Araki * You may obtain a copy of the License at
731a49efe2adb59e31611f6871895a3243d835127Yuichi Araki *
831a49efe2adb59e31611f6871895a3243d835127Yuichi Araki *      http://www.apache.org/licenses/LICENSE-2.0
931a49efe2adb59e31611f6871895a3243d835127Yuichi Araki *
1031a49efe2adb59e31611f6871895a3243d835127Yuichi Araki * Unless required by applicable law or agreed to in writing, software
1131a49efe2adb59e31611f6871895a3243d835127Yuichi Araki * distributed under the License is distributed on an "AS IS" BASIS,
1231a49efe2adb59e31611f6871895a3243d835127Yuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1331a49efe2adb59e31611f6871895a3243d835127Yuichi Araki * See the License for the specific language governing permissions and
1431a49efe2adb59e31611f6871895a3243d835127Yuichi Araki * limitations under the License.
1531a49efe2adb59e31611f6871895a3243d835127Yuichi Araki */
1631a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
1731a49efe2adb59e31611f6871895a3243d835127Yuichi Arakipackage android.support.design.internal;
1831a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
1931a49efe2adb59e31611f6871895a3243d835127Yuichi Arakiimport android.content.Context;
2031a49efe2adb59e31611f6871895a3243d835127Yuichi Arakiimport android.os.Parcelable;
2131a49efe2adb59e31611f6871895a3243d835127Yuichi Arakiimport android.support.design.R;
2231a49efe2adb59e31611f6871895a3243d835127Yuichi Arakiimport android.support.v7.internal.view.menu.MenuBuilder;
2331a49efe2adb59e31611f6871895a3243d835127Yuichi Arakiimport android.support.v7.internal.view.menu.MenuItemImpl;
2431a49efe2adb59e31611f6871895a3243d835127Yuichi Arakiimport android.support.v7.internal.view.menu.MenuPresenter;
2531a49efe2adb59e31611f6871895a3243d835127Yuichi Arakiimport android.support.v7.internal.view.menu.MenuView;
2631a49efe2adb59e31611f6871895a3243d835127Yuichi Arakiimport android.support.v7.internal.view.menu.SubMenuBuilder;
2731a49efe2adb59e31611f6871895a3243d835127Yuichi Arakiimport android.view.LayoutInflater;
2831a49efe2adb59e31611f6871895a3243d835127Yuichi Arakiimport android.view.View;
2931a49efe2adb59e31611f6871895a3243d835127Yuichi Arakiimport android.view.ViewGroup;
3031a49efe2adb59e31611f6871895a3243d835127Yuichi Arakiimport android.widget.AdapterView;
3131a49efe2adb59e31611f6871895a3243d835127Yuichi Arakiimport android.widget.BaseAdapter;
3231a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
3331a49efe2adb59e31611f6871895a3243d835127Yuichi Araki/**
3431a49efe2adb59e31611f6871895a3243d835127Yuichi Araki * @hide
3531a49efe2adb59e31611f6871895a3243d835127Yuichi Araki */
3631a49efe2adb59e31611f6871895a3243d835127Yuichi Arakipublic class NavigationMenuPresenter implements MenuPresenter, AdapterView.OnItemClickListener {
3731a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
3831a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    private NavigationMenuView mMenuView;
3931a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
4031a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    private Callback mCallback;
4131a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
4231a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    private MenuBuilder mMenu;
4331a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
4431a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    private int mId;
4531a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
4631a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    private NavigationMenuAdapter mAdapter;
4731a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
4831a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    private LayoutInflater mLayoutInflater;
4931a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
5031a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    @Override
5131a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    public void initForMenu(Context context, MenuBuilder menu) {
5231a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        mLayoutInflater = LayoutInflater.from(context);
5331a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        mMenu = menu;
5431a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    }
5531a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
5631a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    @Override
5731a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    public MenuView getMenuView(ViewGroup root) {
5831a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        if (mMenuView == null) {
5931a49efe2adb59e31611f6871895a3243d835127Yuichi Araki            mMenuView = (NavigationMenuView) mLayoutInflater.inflate(
6031a49efe2adb59e31611f6871895a3243d835127Yuichi Araki                    R.layout.design_drawer_menu, root, false);
6131a49efe2adb59e31611f6871895a3243d835127Yuichi Araki            if (mAdapter == null) {
6231a49efe2adb59e31611f6871895a3243d835127Yuichi Araki                mAdapter = new NavigationMenuAdapter();
6331a49efe2adb59e31611f6871895a3243d835127Yuichi Araki            }
6431a49efe2adb59e31611f6871895a3243d835127Yuichi Araki            mMenuView.setAdapter(mAdapter);
6531a49efe2adb59e31611f6871895a3243d835127Yuichi Araki            mMenuView.setOnItemClickListener(this);
6631a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        }
6731a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        return mMenuView;
6831a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    }
6931a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
7031a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    @Override
7131a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    public void updateMenuView(boolean cleared) {
7231a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        if (mAdapter != null) {
7331a49efe2adb59e31611f6871895a3243d835127Yuichi Araki            mAdapter.notifyDataSetChanged();
7431a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        }
7531a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    }
7631a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
7731a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    @Override
7831a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    public void setCallback(Callback cb) {
7931a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        mCallback = cb;
8031a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    }
8131a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
8231a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    @Override
8331a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    public boolean onSubMenuSelected(SubMenuBuilder subMenu) {
8431a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        return false;
8531a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    }
8631a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
8731a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    @Override
8831a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
8931a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        if (mCallback != null) {
9031a49efe2adb59e31611f6871895a3243d835127Yuichi Araki            mCallback.onCloseMenu(menu, allMenusAreClosing);
9131a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        }
9231a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    }
9331a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
9431a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    @Override
9531a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    public boolean flagActionItems() {
9631a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        return false;
9731a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    }
9831a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
9931a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    @Override
10031a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {
10131a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        return false;
10231a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    }
10331a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
10431a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    @Override
10531a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {
10631a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        return false;
10731a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    }
10831a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
10931a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    @Override
11031a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    public int getId() {
11131a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        return mId;
11231a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    }
11331a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
11431a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    public void setId(int id) {
11531a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        mId = id;
11631a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    }
11731a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
11831a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    @Override
11931a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    public Parcelable onSaveInstanceState() {
12031a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        return null;
12131a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    }
12231a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
12331a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    @Override
12431a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    public void onRestoreInstanceState(Parcelable state) {
12531a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    }
12631a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
12731a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    @Override
12831a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
12931a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        mMenu.performItemAction(mAdapter.getItem(position), this, 0);
13031a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    }
13131a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
13231a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    private class NavigationMenuAdapter extends BaseAdapter {
13331a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
13431a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        @Override
13531a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        public int getCount() {
13631a49efe2adb59e31611f6871895a3243d835127Yuichi Araki            return mMenu.size();
13731a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        }
13831a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
13931a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        @Override
14031a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        public MenuItemImpl getItem(int position) {
14131a49efe2adb59e31611f6871895a3243d835127Yuichi Araki            return (MenuItemImpl) mMenu.getItem(position);
14231a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        }
14331a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
14431a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        @Override
14531a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        public long getItemId(int position) {
14631a49efe2adb59e31611f6871895a3243d835127Yuichi Araki            return position;
14731a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        }
14831a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
14931a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        @Override
15031a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        public View getView(int position, View convertView, ViewGroup parent) {
15131a49efe2adb59e31611f6871895a3243d835127Yuichi Araki            if (convertView == null) {
15231a49efe2adb59e31611f6871895a3243d835127Yuichi Araki                convertView = mLayoutInflater.inflate(R.layout.design_drawer_item, parent, false);
15331a49efe2adb59e31611f6871895a3243d835127Yuichi Araki            }
15431a49efe2adb59e31611f6871895a3243d835127Yuichi Araki            MenuView.ItemView itemView = (MenuView.ItemView) convertView;
15531a49efe2adb59e31611f6871895a3243d835127Yuichi Araki            itemView.initialize(getItem(position), 0);
15631a49efe2adb59e31611f6871895a3243d835127Yuichi Araki            return convertView;
15731a49efe2adb59e31611f6871895a3243d835127Yuichi Araki        }
15831a49efe2adb59e31611f6871895a3243d835127Yuichi Araki    }
15931a49efe2adb59e31611f6871895a3243d835127Yuichi Araki
16031a49efe2adb59e31611f6871895a3243d835127Yuichi Araki}
161