123e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas/* 223e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas * Copyright (C) 2016 The Android Open Source Project 323e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas * 423e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas * Licensed under the Apache License, Version 2.0 (the "License"); 523e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas * you may not use this file except in compliance with the License. 623e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas * You may obtain a copy of the License at 723e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas * 823e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas * http://www.apache.org/licenses/LICENSE-2.0 923e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas * 1023e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas * Unless required by applicable law or agreed to in writing, software 1123e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas * distributed under the License is distributed on an "AS IS" BASIS, 1223e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1323e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas * See the License for the specific language governing permissions and 1423e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas * limitations under the License. 1523e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas */ 1623e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 1723e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikaspackage android.support.design.internal; 1823e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 198e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikasimport static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP; 208e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas 2123e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikasimport android.content.Context; 22b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Korenimport android.os.Parcel; 2323e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikasimport android.os.Parcelable; 24b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Korenimport android.support.annotation.NonNull; 25c39d9c75590eca86a5e7e32a8824ba04a0d42e9bAlan Viveretteimport android.support.annotation.RestrictTo; 2623e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikasimport android.support.v7.view.menu.MenuBuilder; 2723e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikasimport android.support.v7.view.menu.MenuItemImpl; 2823e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikasimport android.support.v7.view.menu.MenuPresenter; 2923e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikasimport android.support.v7.view.menu.MenuView; 3023e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikasimport android.support.v7.view.menu.SubMenuBuilder; 3123e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikasimport android.view.ViewGroup; 3223e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 3323e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas/** 3423e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas * @hide 3523e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas */ 368e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas@RestrictTo(LIBRARY_GROUP) 3723e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikaspublic class BottomNavigationPresenter implements MenuPresenter { 3823e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas private MenuBuilder mMenu; 3923e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas private BottomNavigationMenuView mMenuView; 4023e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas private boolean mUpdateSuspended = false; 41b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren private int mId; 4223e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 4323e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas public void setBottomNavigationMenuView(BottomNavigationMenuView menuView) { 4423e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas mMenuView = menuView; 4523e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas } 4623e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 4723e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas @Override 4823e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas public void initForMenu(Context context, MenuBuilder menu) { 4923e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas mMenuView.initialize(mMenu); 5023e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas mMenu = menu; 5123e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas } 5223e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 5323e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas @Override 5423e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas public MenuView getMenuView(ViewGroup root) { 5523e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas return mMenuView; 5623e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas } 5723e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 5823e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas @Override 5923e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas public void updateMenuView(boolean cleared) { 6023e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas if (mUpdateSuspended) return; 6123e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas if (cleared) { 6223e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas mMenuView.buildMenuView(); 6323e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas } else { 6423e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas mMenuView.updateMenuView(); 6523e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas } 6623e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas } 6723e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 6823e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas @Override 6923e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas public void setCallback(Callback cb) {} 7023e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 7123e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas @Override 7223e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas public boolean onSubMenuSelected(SubMenuBuilder subMenu) { 7323e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas return false; 7423e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas } 7523e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 7623e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas @Override 7723e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {} 7823e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 7923e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas @Override 8023e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas public boolean flagActionItems() { 8123e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas return false; 8223e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas } 8323e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 8423e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas @Override 8523e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) { 8623e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas return false; 8723e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas } 8823e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 8923e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas @Override 9023e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) { 9123e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas return false; 9223e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas } 9323e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 94b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren public void setId(int id) { 95b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren mId = id; 96b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren } 97b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren 9823e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas @Override 9923e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas public int getId() { 100b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren return mId; 10123e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas } 10223e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 10323e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas @Override 10423e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas public Parcelable onSaveInstanceState() { 105b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren SavedState savedState = new SavedState(); 106b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren savedState.selectedItemId = mMenuView.getSelectedItemId(); 107b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren return savedState; 10823e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas } 10923e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 11023e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas @Override 111b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren public void onRestoreInstanceState(Parcelable state) { 112b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren if (state instanceof SavedState) { 113b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren mMenuView.tryRestoreSelectedItemId(((SavedState) state).selectedItemId); 114b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren } 115b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren } 11623e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas 11723e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas public void setUpdateSuspended(boolean updateSuspended) { 11823e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas mUpdateSuspended = updateSuspended; 11923e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas } 120b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren 121b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren static class SavedState implements Parcelable { 122b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren int selectedItemId; 123b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren 124b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren SavedState() {} 125b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren 126b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren SavedState(Parcel in) { 127b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren selectedItemId = in.readInt(); 128b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren } 129b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren 130b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren @Override 131b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren public int describeContents() { 132b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren return 0; 133b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren } 134b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren 135b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren @Override 136b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren public void writeToParcel(@NonNull Parcel out, int flags) { 137b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren out.writeInt(selectedItemId); 138b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren } 139b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren 140b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren public static final Creator<SavedState> CREATOR = new Creator<SavedState>() { 141b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren @Override 142b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren public SavedState createFromParcel(Parcel in) { 143b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren return new SavedState(in); 144b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren } 145b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren 146b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren @Override 147b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren public SavedState[] newArray(int size) { 148b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren return new SavedState[size]; 149b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren } 150b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren }; 151b01c03a178cb74302b83e20820fb98a817b47e3eJonathan Koren } 15223e274886774bf1a6c433ed98503e148fa1e15b4Aurimas Liutikas} 153