1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.support.design.internal; 18 19import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP; 20 21import android.content.Context; 22import android.os.Parcel; 23import android.os.Parcelable; 24import android.support.annotation.NonNull; 25import android.support.annotation.RestrictTo; 26import android.support.v7.view.menu.MenuBuilder; 27import android.support.v7.view.menu.MenuItemImpl; 28import android.support.v7.view.menu.MenuPresenter; 29import android.support.v7.view.menu.MenuView; 30import android.support.v7.view.menu.SubMenuBuilder; 31import android.view.ViewGroup; 32 33/** 34 * @hide 35 */ 36@RestrictTo(LIBRARY_GROUP) 37public class BottomNavigationPresenter implements MenuPresenter { 38 private MenuBuilder mMenu; 39 private BottomNavigationMenuView mMenuView; 40 private boolean mUpdateSuspended = false; 41 private int mId; 42 43 public void setBottomNavigationMenuView(BottomNavigationMenuView menuView) { 44 mMenuView = menuView; 45 } 46 47 @Override 48 public void initForMenu(Context context, MenuBuilder menu) { 49 mMenuView.initialize(mMenu); 50 mMenu = menu; 51 } 52 53 @Override 54 public MenuView getMenuView(ViewGroup root) { 55 return mMenuView; 56 } 57 58 @Override 59 public void updateMenuView(boolean cleared) { 60 if (mUpdateSuspended) return; 61 if (cleared) { 62 mMenuView.buildMenuView(); 63 } else { 64 mMenuView.updateMenuView(); 65 } 66 } 67 68 @Override 69 public void setCallback(Callback cb) {} 70 71 @Override 72 public boolean onSubMenuSelected(SubMenuBuilder subMenu) { 73 return false; 74 } 75 76 @Override 77 public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {} 78 79 @Override 80 public boolean flagActionItems() { 81 return false; 82 } 83 84 @Override 85 public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) { 86 return false; 87 } 88 89 @Override 90 public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) { 91 return false; 92 } 93 94 public void setId(int id) { 95 mId = id; 96 } 97 98 @Override 99 public int getId() { 100 return mId; 101 } 102 103 @Override 104 public Parcelable onSaveInstanceState() { 105 SavedState savedState = new SavedState(); 106 savedState.selectedItemId = mMenuView.getSelectedItemId(); 107 return savedState; 108 } 109 110 @Override 111 public void onRestoreInstanceState(Parcelable state) { 112 if (state instanceof SavedState) { 113 mMenuView.tryRestoreSelectedItemId(((SavedState) state).selectedItemId); 114 } 115 } 116 117 public void setUpdateSuspended(boolean updateSuspended) { 118 mUpdateSuspended = updateSuspended; 119 } 120 121 static class SavedState implements Parcelable { 122 int selectedItemId; 123 124 SavedState() {} 125 126 SavedState(Parcel in) { 127 selectedItemId = in.readInt(); 128 } 129 130 @Override 131 public int describeContents() { 132 return 0; 133 } 134 135 @Override 136 public void writeToParcel(@NonNull Parcel out, int flags) { 137 out.writeInt(selectedItemId); 138 } 139 140 public static final Creator<SavedState> CREATOR = new Creator<SavedState>() { 141 @Override 142 public SavedState createFromParcel(Parcel in) { 143 return new SavedState(in); 144 } 145 146 @Override 147 public SavedState[] newArray(int size) { 148 return new SavedState[size]; 149 } 150 }; 151 } 152} 153