• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
17 package android.support.design.internal;
18 
19 import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
20 
21 import android.content.Context;
22 import android.os.Parcel;
23 import android.os.Parcelable;
24 import android.support.annotation.NonNull;
25 import android.support.annotation.RestrictTo;
26 import android.support.v7.view.menu.MenuBuilder;
27 import android.support.v7.view.menu.MenuItemImpl;
28 import android.support.v7.view.menu.MenuPresenter;
29 import android.support.v7.view.menu.MenuView;
30 import android.support.v7.view.menu.SubMenuBuilder;
31 import android.view.ViewGroup;
32 
33 /**
34  * @hide
35  */
36 @RestrictTo(LIBRARY_GROUP)
37 public class BottomNavigationPresenter implements MenuPresenter {
38     private MenuBuilder mMenu;
39     private BottomNavigationMenuView mMenuView;
40     private boolean mUpdateSuspended = false;
41     private int mId;
42 
setBottomNavigationMenuView(BottomNavigationMenuView menuView)43     public void setBottomNavigationMenuView(BottomNavigationMenuView menuView) {
44         mMenuView = menuView;
45     }
46 
47     @Override
initForMenu(Context context, MenuBuilder menu)48     public void initForMenu(Context context, MenuBuilder menu) {
49         mMenuView.initialize(mMenu);
50         mMenu = menu;
51     }
52 
53     @Override
getMenuView(ViewGroup root)54     public MenuView getMenuView(ViewGroup root) {
55         return mMenuView;
56     }
57 
58     @Override
updateMenuView(boolean cleared)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
setCallback(Callback cb)69     public void setCallback(Callback cb) {}
70 
71     @Override
onSubMenuSelected(SubMenuBuilder subMenu)72     public boolean onSubMenuSelected(SubMenuBuilder subMenu) {
73         return false;
74     }
75 
76     @Override
onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing)77     public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {}
78 
79     @Override
flagActionItems()80     public boolean flagActionItems() {
81         return false;
82     }
83 
84     @Override
expandItemActionView(MenuBuilder menu, MenuItemImpl item)85     public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {
86         return false;
87     }
88 
89     @Override
collapseItemActionView(MenuBuilder menu, MenuItemImpl item)90     public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {
91         return false;
92     }
93 
setId(int id)94     public void setId(int id) {
95         mId = id;
96     }
97 
98     @Override
getId()99     public int getId() {
100         return mId;
101     }
102 
103     @Override
onSaveInstanceState()104     public Parcelable onSaveInstanceState() {
105         SavedState savedState = new SavedState();
106         savedState.selectedItemId = mMenuView.getSelectedItemId();
107         return savedState;
108     }
109 
110     @Override
onRestoreInstanceState(Parcelable state)111     public void onRestoreInstanceState(Parcelable state) {
112         if (state instanceof SavedState) {
113             mMenuView.tryRestoreSelectedItemId(((SavedState) state).selectedItemId);
114         }
115     }
116 
setUpdateSuspended(boolean updateSuspended)117     public void setUpdateSuspended(boolean updateSuspended) {
118         mUpdateSuspended = updateSuspended;
119     }
120 
121     static class SavedState implements Parcelable {
122         int selectedItemId;
123 
SavedState()124         SavedState() {}
125 
SavedState(Parcel in)126         SavedState(Parcel in) {
127             selectedItemId = in.readInt();
128         }
129 
130         @Override
describeContents()131         public int describeContents() {
132             return 0;
133         }
134 
135         @Override
writeToParcel(@onNull Parcel out, int flags)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