ToolbarWidgetWrapper.java revision 2aa09a94dd540650d3ebad7363e4fb3aab2ebc95
1e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell/* 2e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * Copyright (C) 2014 The Android Open Source Project 3e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * 4e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * Licensed under the Apache License, Version 2.0 (the "License"); 5e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * you may not use this file except in compliance with the License. 6e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * You may obtain a copy of the License at 7e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * 8e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * http://www.apache.org/licenses/LICENSE-2.0 9e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * 10e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * Unless required by applicable law or agreed to in writing, software 11e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * distributed under the License is distributed on an "AS IS" BASIS, 12e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * See the License for the specific language governing permissions and 14e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * limitations under the License. 15e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell */ 16e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 17e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 18e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellpackage com.android.internal.widget; 19e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 20e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.animation.Animator; 21e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.animation.AnimatorListenerAdapter; 22e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.app.ActionBar; 23e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.content.Context; 24e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.content.res.TypedArray; 25e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.graphics.drawable.Drawable; 26e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.os.Parcelable; 2707a74548ae5c1e064508cb1c79ac34de1142b240Adam Powellimport android.text.TextUtils; 28e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.util.Log; 29e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.util.SparseArray; 306790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powellimport android.view.Gravity; 31e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.view.LayoutInflater; 32e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.view.Menu; 33e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.view.View; 34e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.view.ViewGroup; 35e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.view.Window; 36e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.widget.ActionMenuPresenter; 37e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.widget.AdapterView; 38e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.widget.Spinner; 39e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.widget.SpinnerAdapter; 40e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.widget.Toolbar; 41e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport com.android.internal.R; 42e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport com.android.internal.view.menu.ActionMenuItem; 43e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport com.android.internal.view.menu.MenuBuilder; 44e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport com.android.internal.view.menu.MenuPresenter; 45e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 46e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell/** 47e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * Internal class used to interact with the Toolbar widget without 48e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * exposing interface methods to the public API. 49e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * 50e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * <p>ToolbarWidgetWrapper manages the differences between Toolbar and ActionBarView 51e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * so that either variant acting as a 52e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * {@link com.android.internal.app.WindowDecorActionBar WindowDecorActionBar} can behave 53e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * in the same way.</p> 54e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * 55e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * @hide 56e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell */ 57e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellpublic class ToolbarWidgetWrapper implements DecorToolbar { 58e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private static final String TAG = "ToolbarWidgetWrapper"; 59e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 60e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private static final int AFFECTS_LOGO_MASK = 61e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_USE_LOGO; 62e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 63e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private Toolbar mToolbar; 64e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 65e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private int mDisplayOpts; 66e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private View mTabView; 67e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private Spinner mSpinner; 68e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private View mCustomView; 69e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 70e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private Drawable mIcon; 71e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private Drawable mLogo; 72e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private Drawable mNavIcon; 73e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 74e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private boolean mTitleSet; 75e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private CharSequence mTitle; 76e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private CharSequence mSubtitle; 77e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 78e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private Window.Callback mWindowCallback; 79e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private boolean mMenuPrepared; 80e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private ActionMenuPresenter mActionMenuPresenter; 81e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 826790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell private int mNavigationMode = ActionBar.NAVIGATION_MODE_STANDARD; 836790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell 842aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell public ToolbarWidgetWrapper(Toolbar toolbar, boolean style) { 85e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar = toolbar; 86e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 8707a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell mTitle = toolbar.getTitle(); 8807a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell mSubtitle = toolbar.getSubtitle(); 8907a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell mTitleSet = !TextUtils.isEmpty(mTitle); 9007a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell 912aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell if (style) { 922aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell final TypedArray a = toolbar.getContext().obtainStyledAttributes(null, 932aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell R.styleable.ActionBar, R.attr.actionBarStyle, 0); 94e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 952aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell final CharSequence title = a.getText(R.styleable.ActionBar_title); 962aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell if (!TextUtils.isEmpty(title)) { 972aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell setTitle(title); 982aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell } 99e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 1002aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell final CharSequence subtitle = a.getText(R.styleable.ActionBar_subtitle); 1012aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell if (!TextUtils.isEmpty(subtitle)) { 1022aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell setSubtitle(subtitle); 1032aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell } 104e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 1052aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell final Drawable logo = a.getDrawable(R.styleable.ActionBar_logo); 1062aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell if (logo != null) { 1072aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell setLogo(logo); 1082aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell } 109e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 1102aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell final Drawable icon = a.getDrawable(R.styleable.ActionBar_icon); 1112aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell if (icon != null) { 1122aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell setIcon(icon); 1132aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell } 114e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 1152aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell final Drawable navIcon = a.getDrawable(R.styleable.ActionBar_homeAsUpIndicator); 1162aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell if (navIcon != null) { 1172aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell setNavigationIcon(navIcon); 1182aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell } 119e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 1202aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell setDisplayOptions(a.getInt(R.styleable.ActionBar_displayOptions, 0)); 121e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 1222aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell final int customNavId = a.getResourceId( 1232aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell R.styleable.ActionBar_customNavigationLayout, 0); 1242aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell if (customNavId != 0) { 1252aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell setCustomView(LayoutInflater.from(mToolbar.getContext()).inflate(customNavId, 1262aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell mToolbar, false)); 1272aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell setDisplayOptions(mDisplayOpts | ActionBar.DISPLAY_SHOW_CUSTOM); 1282aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell } 129e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 1302aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell final int height = a.getLayoutDimension(R.styleable.ActionBar_height, 0); 1312aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell if (height > 0) { 1322aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell final ViewGroup.LayoutParams lp = mToolbar.getLayoutParams(); 1332aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell lp.height = height; 1342aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell mToolbar.setLayoutParams(lp); 1352aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell } 136e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 1372aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell final int contentInsetStart = a.getDimensionPixelOffset( 1382aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell R.styleable.ActionBar_contentInsetStart, -1); 1392aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell final int contentInsetEnd = a.getDimensionPixelOffset( 1402aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell R.styleable.ActionBar_contentInsetEnd, -1); 1412aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell if (contentInsetStart >= 0 || contentInsetEnd >= 0) { 1422aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell mToolbar.setContentInsetsRelative(Math.max(contentInsetStart, 0), 1432aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell Math.max(contentInsetEnd, 0)); 1442aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell } 145e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 1462aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell final int titleTextStyle = a.getResourceId(R.styleable.ActionBar_titleTextStyle, 0); 1472aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell if (titleTextStyle != 0) { 1482aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell mToolbar.setTitleTextAppearance(mToolbar.getContext(), titleTextStyle); 1492aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell } 150ebba5d4edd763b19124b715a0f084d2f00c84a47Adam Powell 1512aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell final int subtitleTextStyle = a.getResourceId( 1522aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell R.styleable.ActionBar_subtitleTextStyle, 0); 1532aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell if (subtitleTextStyle != 0) { 1542aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell mToolbar.setSubtitleTextAppearance(mToolbar.getContext(), subtitleTextStyle); 1552aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell } 156ebba5d4edd763b19124b715a0f084d2f00c84a47Adam Powell 1572aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell a.recycle(); 1582aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell } 159e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 1607901b2a54981b769bf27852c41ce612871a8e019Adam Powell if (TextUtils.isEmpty(mToolbar.getNavigationContentDescription())) { 1617901b2a54981b769bf27852c41ce612871a8e019Adam Powell mToolbar.setNavigationContentDescription( 1627901b2a54981b769bf27852c41ce612871a8e019Adam Powell getContext().getResources().getText(R.string.action_bar_up_description)); 1637901b2a54981b769bf27852c41ce612871a8e019Adam Powell } 1647901b2a54981b769bf27852c41ce612871a8e019Adam Powell 165e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setNavigationOnClickListener(new View.OnClickListener() { 166e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell final ActionMenuItem mNavItem = new ActionMenuItem(mToolbar.getContext(), 167e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 0, android.R.id.home, 0, 0, mTitle); 168e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 169e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void onClick(View v) { 170e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if (mWindowCallback != null && mMenuPrepared) { 171e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mWindowCallback.onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, mNavItem); 172e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 173e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 174e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell }); 175e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 176e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 177e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 178e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public ViewGroup getViewGroup() { 179e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mToolbar; 180e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 181e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 182e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 183e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public Context getContext() { 184e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mToolbar.getContext(); 185e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 186e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 187e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 188e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public boolean isSplit() { 189e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return false; 190e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 191e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 192e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 193e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public boolean hasExpandedActionView() { 194e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mToolbar.hasExpandedActionView(); 195e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 196e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 197e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 198e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void collapseActionView() { 199e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.collapseActionView(); 200e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 201e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 202e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 203e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setWindowCallback(Window.Callback cb) { 204e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mWindowCallback = cb; 205e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 206e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 207e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 208e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setWindowTitle(CharSequence title) { 209e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell // "Real" title always trumps window title. 210e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if (!mTitleSet) { 211e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell setTitleInt(title); 212e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 213e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 214e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 215e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 216e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public CharSequence getTitle() { 217e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mToolbar.getTitle(); 218e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 219e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 220e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 221e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setTitle(CharSequence title) { 222e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mTitleSet = true; 223e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell setTitleInt(title); 224e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 225e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 226e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private void setTitleInt(CharSequence title) { 227e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mTitle = title; 228e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if ((mDisplayOpts & ActionBar.DISPLAY_SHOW_TITLE) != 0) { 229e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setTitle(title); 230e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 231e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 232e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 233e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 234e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public CharSequence getSubtitle() { 235e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mToolbar.getSubtitle(); 236e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 237e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 238e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 239e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setSubtitle(CharSequence subtitle) { 240e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mSubtitle = subtitle; 241e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if ((mDisplayOpts & ActionBar.DISPLAY_SHOW_TITLE) != 0) { 242e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setSubtitle(subtitle); 243e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 244e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 245e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 246e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 247e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void initProgress() { 248e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell Log.i(TAG, "Progress display unsupported"); 249e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 250e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 251e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 252e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void initIndeterminateProgress() { 253e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell Log.i(TAG, "Progress display unsupported"); 254e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 255e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 256e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 257e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public boolean canSplit() { 258e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return false; 259e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 260e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 261e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 262e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setSplitView(ViewGroup splitView) { 263e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 264e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 265e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 266e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setSplitToolbar(boolean split) { 267e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if (split) { 268e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell throw new UnsupportedOperationException("Cannot split an android.widget.Toolbar"); 269e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 270e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 271e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 272e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 273e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setSplitWhenNarrow(boolean splitWhenNarrow) { 274e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell // Ignore. 275e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 276e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 277e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 278e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public boolean hasIcon() { 279e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mIcon != null; 280e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 281e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 282e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 283e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public boolean hasLogo() { 284e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mLogo != null; 285e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 286e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 287e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 288e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setIcon(int resId) { 289e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell setIcon(resId != 0 ? getContext().getDrawable(resId) : null); 290e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 291e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 292e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 293e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setIcon(Drawable d) { 294e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mIcon = d; 295e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell updateToolbarLogo(); 296e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 297e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 298e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 299e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setLogo(int resId) { 300e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell setLogo(resId != 0 ? getContext().getDrawable(resId) : null); 301e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 302e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 303e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 304e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setLogo(Drawable d) { 305e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mLogo = d; 306e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell updateToolbarLogo(); 307e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 308e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 309e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private void updateToolbarLogo() { 310e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell Drawable logo = null; 311e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if ((mDisplayOpts & ActionBar.DISPLAY_SHOW_HOME) != 0) { 312e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if ((mDisplayOpts & ActionBar.DISPLAY_USE_LOGO) != 0) { 313e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell logo = mLogo != null ? mLogo : mIcon; 314e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } else { 315e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell logo = mIcon; 316e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 317e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 318e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setLogo(logo); 319e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 320e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 321e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 322e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public boolean canShowOverflowMenu() { 323e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mToolbar.canShowOverflowMenu(); 324e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 325e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 326e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 327e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public boolean isOverflowMenuShowing() { 328e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mToolbar.isOverflowMenuShowing(); 329e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 330e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 331e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 332e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public boolean isOverflowMenuShowPending() { 333e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mToolbar.isOverflowMenuShowPending(); 334e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 335e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 336e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 337e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public boolean showOverflowMenu() { 338e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mToolbar.showOverflowMenu(); 339e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 340e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 341e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 342e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public boolean hideOverflowMenu() { 343e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mToolbar.hideOverflowMenu(); 344e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 345e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 346e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 347e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setMenuPrepared() { 348e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mMenuPrepared = true; 349e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 350e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 351e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 352e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setMenu(Menu menu, MenuPresenter.Callback cb) { 353e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if (mActionMenuPresenter == null) { 354e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mActionMenuPresenter = new ActionMenuPresenter(mToolbar.getContext()); 355e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mActionMenuPresenter.setId(com.android.internal.R.id.action_menu_presenter); 356e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 357e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mActionMenuPresenter.setCallback(cb); 358e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setMenu((MenuBuilder) menu, mActionMenuPresenter); 359e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 360e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 361e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 362e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void dismissPopupMenus() { 363e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.dismissPopupMenus(); 364e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 365e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 366e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 367e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public int getDisplayOptions() { 368e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mDisplayOpts; 369e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 370e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 371e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 372e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setDisplayOptions(int newOpts) { 373e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell final int oldOpts = mDisplayOpts; 374e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell final int changed = oldOpts ^ newOpts; 375e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mDisplayOpts = newOpts; 376e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if (changed != 0) { 377e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if ((changed & ActionBar.DISPLAY_HOME_AS_UP) != 0) { 378e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if ((newOpts & ActionBar.DISPLAY_HOME_AS_UP) != 0) { 379e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setNavigationIcon(mNavIcon); 380e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } else { 381e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setNavigationIcon(null); 382e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 383e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 384e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 385e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if ((changed & AFFECTS_LOGO_MASK) != 0) { 386e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell updateToolbarLogo(); 387e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 388e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 389e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if ((changed & ActionBar.DISPLAY_SHOW_TITLE) != 0) { 390e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if ((newOpts & ActionBar.DISPLAY_SHOW_TITLE) != 0) { 391e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setTitle(mTitle); 392e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setSubtitle(mSubtitle); 393e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } else { 394e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setTitle(null); 395e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setSubtitle(null); 396e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 397e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 398e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 399e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if ((changed & ActionBar.DISPLAY_SHOW_CUSTOM) != 0 && mCustomView != null) { 400e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if ((newOpts & ActionBar.DISPLAY_SHOW_CUSTOM) != 0) { 401e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.addView(mCustomView); 402e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } else { 403e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.removeView(mCustomView); 404e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 405e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 406e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 407e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 408e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 409e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 410e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell public void setEmbeddedTabView(ScrollingTabContainerView tabView) { 411e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell if (mTabView != null && mTabView.getParent() == mToolbar) { 412e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell mToolbar.removeView(mTabView); 413e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell } 414e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mTabView = tabView; 415e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell if (tabView != null && mNavigationMode == ActionBar.NAVIGATION_MODE_TABS) { 416e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell mToolbar.addView(mTabView, 0); 417e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell Toolbar.LayoutParams lp = (Toolbar.LayoutParams) mTabView.getLayoutParams(); 418e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell lp.width = ViewGroup.LayoutParams.WRAP_CONTENT; 419e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell lp.height = ViewGroup.LayoutParams.WRAP_CONTENT; 420e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell lp.gravity = Gravity.START | Gravity.BOTTOM; 421e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell tabView.setAllowCollapse(true); 422e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell } 423e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 424e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 425e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 426e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public boolean hasEmbeddedTabs() { 427e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mTabView != null; 428e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 429e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 430e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 431e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public boolean isTitleTruncated() { 432e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mToolbar.isTitleTruncated(); 433e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 434e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 435e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 436e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setCollapsible(boolean collapsible) { 437360c1d89227570510de7bb11195c986300488464Adam Powell mToolbar.setCollapsible(collapsible); 438e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 439e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 440e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 441e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setHomeButtonEnabled(boolean enable) { 442e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell // Ignore 443e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 444e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 445e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 446e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public int getNavigationMode() { 4476790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell return mNavigationMode; 448e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 449e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 450e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 451e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setNavigationMode(int mode) { 4526790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell final int oldMode = mNavigationMode; 4536790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell if (mode != oldMode) { 4546790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell switch (oldMode) { 4556790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell case ActionBar.NAVIGATION_MODE_LIST: 4566790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell if (mSpinner != null && mSpinner.getParent() == mToolbar) { 4576790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell mToolbar.removeView(mSpinner); 4586790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell } 4596790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell break; 460e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell case ActionBar.NAVIGATION_MODE_TABS: 461e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell if (mTabView != null && mTabView.getParent() == mToolbar) { 462e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell mToolbar.removeView(mTabView); 463e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell } 464e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell break; 4656790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell } 4666790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell 4676790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell mNavigationMode = mode; 4686790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell 4696790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell switch (mode) { 4706790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell case ActionBar.NAVIGATION_MODE_STANDARD: 4716790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell break; 4726790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell case ActionBar.NAVIGATION_MODE_LIST: 4736790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell ensureSpinner(); 4746790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell mToolbar.addView(mSpinner, 0); 4756790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell break; 4766790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell case ActionBar.NAVIGATION_MODE_TABS: 477e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell if (mTabView != null) { 478e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell mToolbar.addView(mTabView, 0); 479e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell Toolbar.LayoutParams lp = (Toolbar.LayoutParams) mTabView.getLayoutParams(); 480e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell lp.width = ViewGroup.LayoutParams.WRAP_CONTENT; 481e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell lp.height = ViewGroup.LayoutParams.WRAP_CONTENT; 482e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell lp.gravity = Gravity.START | Gravity.BOTTOM; 483e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell } 484e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell break; 4856790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell default: 4866790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell throw new IllegalArgumentException("Invalid navigation mode " + mode); 4876790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell } 488e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 489e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 490e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 4916790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell private void ensureSpinner() { 492e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if (mSpinner == null) { 493e178c93ff5457962cc694f44729dfa633de53f9bAlan Viverette mSpinner = new Spinner(getContext(), null, R.attr.actionDropDownStyle); 4946790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell Toolbar.LayoutParams lp = new Toolbar.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 4956790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL); 4966790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell mSpinner.setLayoutParams(lp); 497e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 4986790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell } 4996790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell 5006790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell @Override 5016790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell public void setDropdownParams(SpinnerAdapter adapter, 5026790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell AdapterView.OnItemSelectedListener listener) { 5036790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell ensureSpinner(); 504e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mSpinner.setAdapter(adapter); 505e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mSpinner.setOnItemSelectedListener(listener); 506e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 507e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 508e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 509e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setDropdownSelectedPosition(int position) { 510e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if (mSpinner == null) { 511e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell throw new IllegalStateException( 512e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell "Can't set dropdown selected position without an adapter"); 513e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 514e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mSpinner.setSelection(position); 515e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 516e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 517e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 518e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public int getDropdownSelectedPosition() { 519e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mSpinner != null ? mSpinner.getSelectedItemPosition() : 0; 520e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 521e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 522e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 523e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public int getDropdownItemCount() { 524e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mSpinner != null ? mSpinner.getCount() : 0; 525e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 526e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 527e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 528e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setCustomView(View view) { 529e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if (mCustomView != null && (mDisplayOpts & ActionBar.DISPLAY_SHOW_CUSTOM) != 0) { 530e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.removeView(mCustomView); 531e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 532e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mCustomView = view; 533e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if (view != null && (mDisplayOpts & ActionBar.DISPLAY_SHOW_CUSTOM) != 0) { 534e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.addView(mCustomView); 535e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 536e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 537e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 538e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 539e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public View getCustomView() { 540e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell return mCustomView; 541e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 542e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 543e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 544e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void animateToVisibility(int visibility) { 545e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if (visibility == View.GONE) { 546e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.animate().translationY(mToolbar.getHeight()).alpha(0) 547e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell .setListener(new AnimatorListenerAdapter() { 548e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell private boolean mCanceled = false; 549e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 550e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void onAnimationEnd(Animator animation) { 551e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if (!mCanceled) { 552e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setVisibility(View.GONE); 553e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 554e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 555e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 556e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 557e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void onAnimationCancel(Animator animation) { 558e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mCanceled = true; 559e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 560e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell }); 561e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } else if (visibility == View.VISIBLE) { 562e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.animate().translationY(0).alpha(1) 563e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell .setListener(new AnimatorListenerAdapter() { 564e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 565e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void onAnimationStart(Animator animation) { 566e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setVisibility(View.VISIBLE); 567e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 568e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell }); 569e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 570e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 571e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 572e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 573e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setNavigationIcon(Drawable icon) { 574e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mNavIcon = icon; 575e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell if ((mDisplayOpts & ActionBar.DISPLAY_HOME_AS_UP) != 0) { 576e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setNavigationIcon(icon); 577e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 578e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 579e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 580e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 581e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setNavigationIcon(int resId) { 5826bb10554ba3a0b6127402951a477412d961d1072Adam Powell setNavigationIcon(resId != 0 ? mToolbar.getContext().getDrawable(resId) : null); 583e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 584e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 585e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 586e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setNavigationContentDescription(CharSequence description) { 587e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setNavigationContentDescription(description); 588e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 589e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 590e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 591e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void setNavigationContentDescription(int resId) { 592e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.setNavigationContentDescription(resId); 593e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 594e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 595e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 596e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void saveHierarchyState(SparseArray<Parcelable> toolbarStates) { 597e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.saveHierarchyState(toolbarStates); 598e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 599e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 600e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell @Override 601e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell public void restoreHierarchyState(SparseArray<Parcelable> toolbarStates) { 602e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell mToolbar.restoreHierarchyState(toolbarStates); 603e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell } 604e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell 605e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell} 606