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