1e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell/* 2e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell * Copyright (C) 2014 The Android Open Source Project 3e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell * 4e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell * Licensed under the Apache License, Version 2.0 (the "License"); 5e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell * you may not use this file except in compliance with the License. 6e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell * You may obtain a copy of the License at 7e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell * 8e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell * http://www.apache.org/licenses/LICENSE-2.0 9e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell * 10e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell * Unless required by applicable law or agreed to in writing, software 11e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell * distributed under the License is distributed on an "AS IS" BASIS, 12e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell * See the License for the specific language governing permissions and 14e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell * limitations under the License. 15e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell */ 16e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 17e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 18e43340c80dc66c45edc793ecd0343774aa34d108Adam Powellpackage com.android.internal.app; 19e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 20e43340c80dc66c45edc793ecd0343774aa34d108Adam Powellimport android.annotation.Nullable; 21e43340c80dc66c45edc793ecd0343774aa34d108Adam Powellimport android.app.ActionBar; 22e43340c80dc66c45edc793ecd0343774aa34d108Adam Powellimport android.content.Context; 23e43340c80dc66c45edc793ecd0343774aa34d108Adam Powellimport android.content.res.Configuration; 24e43340c80dc66c45edc793ecd0343774aa34d108Adam Powellimport android.graphics.drawable.Drawable; 25e43340c80dc66c45edc793ecd0343774aa34d108Adam Powellimport android.view.ActionMode; 2607a74548ae5c1e064508cb1c79ac34de1142b240Adam Powellimport android.view.KeyEvent; 27e43340c80dc66c45edc793ecd0343774aa34d108Adam Powellimport android.view.LayoutInflater; 2807a74548ae5c1e064508cb1c79ac34de1142b240Adam Powellimport android.view.Menu; 2907a74548ae5c1e064508cb1c79ac34de1142b240Adam Powellimport android.view.MenuItem; 30e43340c80dc66c45edc793ecd0343774aa34d108Adam Powellimport android.view.View; 3107a74548ae5c1e064508cb1c79ac34de1142b240Adam Powellimport android.view.Window; 3214e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powellimport android.view.WindowCallbackWrapper; 33e43340c80dc66c45edc793ecd0343774aa34d108Adam Powellimport android.widget.SpinnerAdapter; 34e43340c80dc66c45edc793ecd0343774aa34d108Adam Powellimport android.widget.Toolbar; 3507a74548ae5c1e064508cb1c79ac34de1142b240Adam Powellimport com.android.internal.view.menu.MenuBuilder; 3604c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powellimport com.android.internal.view.menu.MenuPresenter; 3707a74548ae5c1e064508cb1c79ac34de1142b240Adam Powellimport com.android.internal.widget.DecorToolbar; 3807a74548ae5c1e064508cb1c79ac34de1142b240Adam Powellimport com.android.internal.widget.ToolbarWidgetWrapper; 39e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 40e43340c80dc66c45edc793ecd0343774aa34d108Adam Powellimport java.util.ArrayList; 41e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 42e43340c80dc66c45edc793ecd0343774aa34d108Adam Powellpublic class ToolbarActionBar extends ActionBar { 4307a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell private DecorToolbar mDecorToolbar; 4414e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell private boolean mToolbarMenuPrepared; 4507a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell private Window.Callback mWindowCallback; 4604c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell private boolean mMenuCallbackSet; 47e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 48e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell private boolean mLastMenuVisibility; 49e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell private ArrayList<OnMenuVisibilityListener> mMenuVisibilityListeners = 50e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell new ArrayList<OnMenuVisibilityListener>(); 51e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 5207a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell private final Runnable mMenuInvalidator = new Runnable() { 5307a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell @Override 5407a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell public void run() { 5507a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell populateOptionsMenu(); 5607a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell } 5707a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell }; 5807a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell 5907a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell private final Toolbar.OnMenuItemClickListener mMenuClicker = 6007a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell new Toolbar.OnMenuItemClickListener() { 6107a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell @Override 6207a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell public boolean onMenuItemClick(MenuItem item) { 6307a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell return mWindowCallback.onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, item); 6407a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell } 6507a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell }; 6607a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell 6707a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell public ToolbarActionBar(Toolbar toolbar, CharSequence title, Window.Callback windowCallback) { 682aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell mDecorToolbar = new ToolbarWidgetWrapper(toolbar, false); 6914e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell mWindowCallback = new ToolbarCallbackWrapper(windowCallback); 70b40484bb30838e2769857f30f439cd0fc5e8223eAdam Powell mDecorToolbar.setWindowCallback(mWindowCallback); 7107a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell toolbar.setOnMenuItemClickListener(mMenuClicker); 7207a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell mDecorToolbar.setWindowTitle(title); 73e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 74e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 7514e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell public Window.Callback getWrappedWindowCallback() { 7614e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell return mWindowCallback; 7714e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell } 7814e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell 79e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 80e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setCustomView(View view) { 81e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell setCustomView(view, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 82e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 83e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 84e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 85e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setCustomView(View view, LayoutParams layoutParams) { 8607a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell view.setLayoutParams(layoutParams); 8707a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell mDecorToolbar.setCustomView(view); 88e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 89e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 90e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 91e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setCustomView(int resId) { 92fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar final LayoutInflater inflater = LayoutInflater.from(mDecorToolbar.getContext()); 93fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar setCustomView(inflater.inflate(resId, mDecorToolbar.getViewGroup(), false)); 94e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 95e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 96e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 97e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setIcon(int resId) { 9807a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell mDecorToolbar.setIcon(resId); 99e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 100e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 101e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 102e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setIcon(Drawable icon) { 10307a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell mDecorToolbar.setIcon(icon); 104e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 105e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 106e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 107e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setLogo(int resId) { 10807a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell mDecorToolbar.setLogo(resId); 109e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 110e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 111e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 112e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setLogo(Drawable logo) { 11307a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell mDecorToolbar.setLogo(logo); 114e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 115e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 116e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 117e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setStackedBackgroundDrawable(Drawable d) { 118e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell // This space for rent (do nothing) 119e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 120e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 121e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 122e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setSplitBackgroundDrawable(Drawable d) { 123e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell // This space for rent (do nothing) 124e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 125e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 126e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 127e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setHomeButtonEnabled(boolean enabled) { 128e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell // If the nav button on a Toolbar is present, it's enabled. No-op. 129e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 130e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 131e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 13214d1fa4ba753d3480abf031525da0aa23d8e5abeAdam Powell public void setElevation(float elevation) { 133fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar mDecorToolbar.getViewGroup().setElevation(elevation); 13414d1fa4ba753d3480abf031525da0aa23d8e5abeAdam Powell } 13514d1fa4ba753d3480abf031525da0aa23d8e5abeAdam Powell 13614d1fa4ba753d3480abf031525da0aa23d8e5abeAdam Powell @Override 13714d1fa4ba753d3480abf031525da0aa23d8e5abeAdam Powell public float getElevation() { 138fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar return mDecorToolbar.getViewGroup().getElevation(); 13914d1fa4ba753d3480abf031525da0aa23d8e5abeAdam Powell } 14014d1fa4ba753d3480abf031525da0aa23d8e5abeAdam Powell 14114d1fa4ba753d3480abf031525da0aa23d8e5abeAdam Powell @Override 142e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public Context getThemedContext() { 143fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar return mDecorToolbar.getContext(); 144e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 145e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 146e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 147e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public boolean isTitleTruncated() { 148e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell return super.isTitleTruncated(); 149e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 150e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 151e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 152e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setHomeAsUpIndicator(Drawable indicator) { 153fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar mDecorToolbar.setNavigationIcon(indicator); 154e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 155e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 156e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 157e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setHomeAsUpIndicator(int resId) { 158fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar mDecorToolbar.setNavigationIcon(resId); 159e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 160e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 161e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 162e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setHomeActionContentDescription(CharSequence description) { 163e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar mDecorToolbar.setNavigationContentDescription(description); 164e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 165e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 166e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 167e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setDefaultDisplayHomeAsUpEnabled(boolean enabled) { 168e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell // Do nothing 169e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 170e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 171e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 172e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setHomeActionContentDescription(int resId) { 173e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar mDecorToolbar.setNavigationContentDescription(resId); 174e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 175e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 176e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 177e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setShowHideAnimationEnabled(boolean enabled) { 178e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell // This space for rent; no-op. 179e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 180e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 181e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 182e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void onConfigurationChanged(Configuration config) { 183e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell super.onConfigurationChanged(config); 184e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 185e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 186e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 187e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public ActionMode startActionMode(ActionMode.Callback callback) { 1881dcedbac347a363f77bc7d4818a7da6aefd4d9f4Adam Powell return null; 189e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 190e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 191e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 192e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) { 1936790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell mDecorToolbar.setDropdownParams(adapter, new NavItemSelectedListener(callback)); 194e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 195e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 196e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 197e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setSelectedNavigationItem(int position) { 1986790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell switch (mDecorToolbar.getNavigationMode()) { 1996790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell case NAVIGATION_MODE_LIST: 2006790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell mDecorToolbar.setDropdownSelectedPosition(position); 2016790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell break; 2026790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell default: 2036790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell throw new IllegalStateException( 2046790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell "setSelectedNavigationIndex not valid for current navigation mode"); 2056790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell } 206e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 207e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 208e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 209e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public int getSelectedNavigationIndex() { 210e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell return -1; 211e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 212e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 213e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 214e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public int getNavigationItemCount() { 215e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell return 0; 216e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 217e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 218e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 219e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setTitle(CharSequence title) { 22007a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell mDecorToolbar.setTitle(title); 221e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 222e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 223e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 224e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setTitle(int resId) { 22507a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell mDecorToolbar.setTitle(resId != 0 ? mDecorToolbar.getContext().getText(resId) : null); 226e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 227e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 228e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 229af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell public void setWindowTitle(CharSequence title) { 230af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell mDecorToolbar.setWindowTitle(title); 231af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell } 232af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell 233af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell @Override 234e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setSubtitle(CharSequence subtitle) { 23507a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell mDecorToolbar.setSubtitle(subtitle); 236e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 237e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 238e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 239e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setSubtitle(int resId) { 24007a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell mDecorToolbar.setSubtitle(resId != 0 ? mDecorToolbar.getContext().getText(resId) : null); 241e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 242e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 243e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 244e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setDisplayOptions(@DisplayOptions int options) { 245e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell setDisplayOptions(options, 0xffffffff); 246e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 247e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 248e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 249e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setDisplayOptions(@DisplayOptions int options, @DisplayOptions int mask) { 25012b0321c0b400f105cad40568a1f572020ba6336Adam Powell final int currentOptions = mDecorToolbar.getDisplayOptions(); 25112b0321c0b400f105cad40568a1f572020ba6336Adam Powell mDecorToolbar.setDisplayOptions(options & mask | currentOptions & ~mask); 252e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 253e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 254e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 255e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setDisplayUseLogoEnabled(boolean useLogo) { 256e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell setDisplayOptions(useLogo ? DISPLAY_USE_LOGO : 0, DISPLAY_USE_LOGO); 257e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 258e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 259e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 260e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setDisplayShowHomeEnabled(boolean showHome) { 261e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell setDisplayOptions(showHome ? DISPLAY_SHOW_HOME : 0, DISPLAY_SHOW_HOME); 262e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 263e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 264e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 265e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setDisplayHomeAsUpEnabled(boolean showHomeAsUp) { 266e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell setDisplayOptions(showHomeAsUp ? DISPLAY_HOME_AS_UP : 0, DISPLAY_HOME_AS_UP); 267e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 268e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 269e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 270e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setDisplayShowTitleEnabled(boolean showTitle) { 271e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell setDisplayOptions(showTitle ? DISPLAY_SHOW_TITLE : 0, DISPLAY_SHOW_TITLE); 272e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 273e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 274e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 275e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setDisplayShowCustomEnabled(boolean showCustom) { 276e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell setDisplayOptions(showCustom ? DISPLAY_SHOW_CUSTOM : 0, DISPLAY_SHOW_CUSTOM); 277e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 278e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 279e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 280e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setBackgroundDrawable(@Nullable Drawable d) { 281fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar mDecorToolbar.setBackgroundDrawable(d); 282e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 283e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 284e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 285e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public View getCustomView() { 28607a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell return mDecorToolbar.getCustomView(); 287e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 288e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 289e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 290e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public CharSequence getTitle() { 291fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar return mDecorToolbar.getTitle(); 292e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 293e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 294e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 295e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public CharSequence getSubtitle() { 296fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar return mDecorToolbar.getSubtitle(); 297e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 298e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 299e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 300e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public int getNavigationMode() { 301e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell return NAVIGATION_MODE_STANDARD; 302e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 303e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 304e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 305e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void setNavigationMode(@NavigationMode int mode) { 306e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell if (mode == ActionBar.NAVIGATION_MODE_TABS) { 307e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell throw new IllegalArgumentException("Tabs not supported in this configuration"); 308e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell } 3096790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell mDecorToolbar.setNavigationMode(mode); 310e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 311e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 312e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 313e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public int getDisplayOptions() { 31407a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell return mDecorToolbar.getDisplayOptions(); 315e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 316e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 317e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 318e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public Tab newTab() { 319e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell throw new UnsupportedOperationException( 3206790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell "Tabs are not supported in toolbar action bars"); 321e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 322e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 323e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 324e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void addTab(Tab tab) { 325e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell throw new UnsupportedOperationException( 3266790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell "Tabs are not supported in toolbar action bars"); 327e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 328e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 329e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 330e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void addTab(Tab tab, boolean setSelected) { 331e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell throw new UnsupportedOperationException( 3326790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell "Tabs are not supported in toolbar action bars"); 333e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 334e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 335e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 336e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void addTab(Tab tab, int position) { 337e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell throw new UnsupportedOperationException( 3386790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell "Tabs are not supported in toolbar action bars"); 339e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 340e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 341e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 342e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void addTab(Tab tab, int position, boolean setSelected) { 343e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell throw new UnsupportedOperationException( 3446790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell "Tabs are not supported in toolbar action bars"); 345e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 346e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 347e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 348e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void removeTab(Tab tab) { 349e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell throw new UnsupportedOperationException( 3506790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell "Tabs are not supported in toolbar action bars"); 351e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 352e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 353e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 354e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void removeTabAt(int position) { 355e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell throw new UnsupportedOperationException( 3566790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell "Tabs are not supported in toolbar action bars"); 357e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 358e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 359e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 360e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void removeAllTabs() { 361e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell throw new UnsupportedOperationException( 3626790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell "Tabs are not supported in toolbar action bars"); 363e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 364e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 365e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 366e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void selectTab(Tab tab) { 367e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell throw new UnsupportedOperationException( 3686790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell "Tabs are not supported in toolbar action bars"); 369e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 370e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 371e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 372e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public Tab getSelectedTab() { 373e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell throw new UnsupportedOperationException( 3746790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell "Tabs are not supported in toolbar action bars"); 375e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 376e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 377e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 378e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public Tab getTabAt(int index) { 379e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell throw new UnsupportedOperationException( 3806790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell "Tabs are not supported in toolbar action bars"); 381e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 382e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 383e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 384e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public int getTabCount() { 385e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell return 0; 386e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 387e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 388e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 389e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public int getHeight() { 390fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar return mDecorToolbar.getHeight(); 391e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 392e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 393e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 394e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void show() { 395e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell // TODO: Consider a better transition for this. 396e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell // Right now use no automatic transition so that the app can supply one if desired. 397fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar mDecorToolbar.setVisibility(View.VISIBLE); 398e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 399e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 400e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 401e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void hide() { 402e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell // TODO: Consider a better transition for this. 403e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell // Right now use no automatic transition so that the app can supply one if desired. 404fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar mDecorToolbar.setVisibility(View.GONE); 405e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 406e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 407e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell @Override 408e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public boolean isShowing() { 409fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar return mDecorToolbar.getVisibility() == View.VISIBLE; 410e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 411e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 41207a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell @Override 41307a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell public boolean openOptionsMenu() { 414fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar return mDecorToolbar.showOverflowMenu(); 41507a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell } 41607a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell 41707a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell @Override 41807a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell public boolean invalidateOptionsMenu() { 419fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar mDecorToolbar.getViewGroup().removeCallbacks(mMenuInvalidator); 420fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar mDecorToolbar.getViewGroup().postOnAnimation(mMenuInvalidator); 42107a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell return true; 42207a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell } 42307a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell 42407a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell @Override 42507a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell public boolean collapseActionView() { 426fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar if (mDecorToolbar.hasExpandedActionView()) { 427fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar mDecorToolbar.collapseActionView(); 42807a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell return true; 42907a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell } 43007a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell return false; 43107a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell } 43207a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell 43307a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell void populateOptionsMenu() { 43404c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell if (!mMenuCallbackSet) { 435fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar mDecorToolbar.setMenuCallbacks(new ActionMenuPresenterCallback(), new MenuBuilderCallback()); 43604c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell mMenuCallbackSet = true; 43704c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell } 438fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar final Menu menu = mDecorToolbar.getMenu(); 43907a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell final MenuBuilder mb = menu instanceof MenuBuilder ? (MenuBuilder) menu : null; 44007a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell if (mb != null) { 44107a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell mb.stopDispatchingItemsChanged(); 44207a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell } 44307a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell try { 44407a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell menu.clear(); 44507a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell if (!mWindowCallback.onCreatePanelMenu(Window.FEATURE_OPTIONS_PANEL, menu) || 44607a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell !mWindowCallback.onPreparePanel(Window.FEATURE_OPTIONS_PANEL, null, menu)) { 44707a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell menu.clear(); 44807a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell } 44907a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell } finally { 45007a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell if (mb != null) { 45107a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell mb.startDispatchingItemsChanged(); 45207a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell } 45307a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell } 45407a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell } 45507a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell 45607a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell @Override 45707a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell public boolean onMenuKeyEvent(KeyEvent event) { 45807a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell if (event.getAction() == KeyEvent.ACTION_UP) { 45907a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell openOptionsMenu(); 46007a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell } 46107a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell return true; 46207a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell } 46307a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell 464e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) { 465e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell mMenuVisibilityListeners.add(listener); 466e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 467e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 468e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) { 469e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell mMenuVisibilityListeners.remove(listener); 470e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 471e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 472e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell public void dispatchMenuVisibilityChanged(boolean isVisible) { 473e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell if (isVisible == mLastMenuVisibility) { 474e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell return; 475e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 476e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell mLastMenuVisibility = isVisible; 477e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell 478e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell final int count = mMenuVisibilityListeners.size(); 479e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell for (int i = 0; i < count; i++) { 480e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell mMenuVisibilityListeners.get(i).onMenuVisibilityChanged(isVisible); 481e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 482e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell } 48314e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell 48414e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell private class ToolbarCallbackWrapper extends WindowCallbackWrapper { 48514e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell public ToolbarCallbackWrapper(Window.Callback wrapped) { 48614e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell super(wrapped); 48714e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell } 48814e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell 48914e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell @Override 49014e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell public boolean onPreparePanel(int featureId, View view, Menu menu) { 49114e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell final boolean result = super.onPreparePanel(featureId, view, menu); 49214e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell if (result && !mToolbarMenuPrepared) { 49314e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell mDecorToolbar.setMenuPrepared(); 49414e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell mToolbarMenuPrepared = true; 49514e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell } 49614e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell return result; 49714e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell } 49814e1afe0d86de826ae1831d64ca00da03da86b4bAdam Powell } 49904c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell 50004c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell private final class ActionMenuPresenterCallback implements MenuPresenter.Callback { 50104c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell private boolean mClosingActionMenu; 50204c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell 50304c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell @Override 50404c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell public boolean onOpenSubMenu(MenuBuilder subMenu) { 50504c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell if (mWindowCallback != null) { 50604c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell mWindowCallback.onMenuOpened(Window.FEATURE_ACTION_BAR, subMenu); 50704c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell return true; 50804c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell } 50904c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell return false; 51004c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell } 51104c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell 51204c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell @Override 51304c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) { 51404c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell if (mClosingActionMenu) { 51504c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell return; 51604c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell } 51704c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell 51804c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell mClosingActionMenu = true; 519fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar mDecorToolbar.dismissPopupMenus(); 52004c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell if (mWindowCallback != null) { 52104c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell mWindowCallback.onPanelClosed(Window.FEATURE_ACTION_BAR, menu); 52204c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell } 52304c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell mClosingActionMenu = false; 52404c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell } 52504c0d4607897157f01c908475fa0c6d7301cf7e5Adam Powell } 526c46125042493e66f7dfdccec24e3b0739600b194Adam Powell 527c46125042493e66f7dfdccec24e3b0739600b194Adam Powell private final class MenuBuilderCallback implements MenuBuilder.Callback { 528c46125042493e66f7dfdccec24e3b0739600b194Adam Powell 529c46125042493e66f7dfdccec24e3b0739600b194Adam Powell @Override 530c46125042493e66f7dfdccec24e3b0739600b194Adam Powell public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) { 531c46125042493e66f7dfdccec24e3b0739600b194Adam Powell return false; 532c46125042493e66f7dfdccec24e3b0739600b194Adam Powell } 533c46125042493e66f7dfdccec24e3b0739600b194Adam Powell 534c46125042493e66f7dfdccec24e3b0739600b194Adam Powell @Override 535c46125042493e66f7dfdccec24e3b0739600b194Adam Powell public void onMenuModeChange(MenuBuilder menu) { 536c46125042493e66f7dfdccec24e3b0739600b194Adam Powell if (mWindowCallback != null) { 537fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar if (mDecorToolbar.isOverflowMenuShowing()) { 538c46125042493e66f7dfdccec24e3b0739600b194Adam Powell mWindowCallback.onPanelClosed(Window.FEATURE_ACTION_BAR, menu); 539c46125042493e66f7dfdccec24e3b0739600b194Adam Powell } else if (mWindowCallback.onPreparePanel(Window.FEATURE_OPTIONS_PANEL, 540c46125042493e66f7dfdccec24e3b0739600b194Adam Powell null, menu)) { 541c46125042493e66f7dfdccec24e3b0739600b194Adam Powell mWindowCallback.onMenuOpened(Window.FEATURE_ACTION_BAR, menu); 542c46125042493e66f7dfdccec24e3b0739600b194Adam Powell } 543c46125042493e66f7dfdccec24e3b0739600b194Adam Powell } 544c46125042493e66f7dfdccec24e3b0739600b194Adam Powell } 545c46125042493e66f7dfdccec24e3b0739600b194Adam Powell } 546e43340c80dc66c45edc793ecd0343774aa34d108Adam Powell} 547