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