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;
2294283533aba1b8c895728feb40462250a1ebecceDoris Liuimport android.animation.ObjectAnimator;
23e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.app.ActionBar;
24e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.content.Context;
25e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.content.res.TypedArray;
26e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.graphics.drawable.Drawable;
27e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.os.Parcelable;
2807a74548ae5c1e064508cb1c79ac34de1142b240Adam Powellimport android.text.TextUtils;
29e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.util.Log;
30e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.util.SparseArray;
316790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powellimport android.view.Gravity;
32e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.view.LayoutInflater;
33e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.view.Menu;
34e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.view.View;
35e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.view.ViewGroup;
36e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.view.Window;
37e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.widget.ActionMenuPresenter;
38e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.widget.AdapterView;
39e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.widget.Spinner;
40e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.widget.SpinnerAdapter;
41e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport android.widget.Toolbar;
42e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport com.android.internal.R;
43e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport com.android.internal.view.menu.ActionMenuItem;
44e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport com.android.internal.view.menu.MenuBuilder;
45e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellimport com.android.internal.view.menu.MenuPresenter;
46e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
47e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell/**
48e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * Internal class used to interact with the Toolbar widget without
49e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * exposing interface methods to the public API.
50e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell *
51e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * <p>ToolbarWidgetWrapper manages the differences between Toolbar and ActionBarView
52e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * so that either variant acting as a
53e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * {@link com.android.internal.app.WindowDecorActionBar WindowDecorActionBar} can behave
54e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * in the same way.</p>
55e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell *
56e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell * @hide
57e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell */
58e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powellpublic class ToolbarWidgetWrapper implements DecorToolbar {
59e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private static final String TAG = "ToolbarWidgetWrapper";
60e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
61e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private static final int AFFECTS_LOGO_MASK =
62e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_USE_LOGO;
6394283533aba1b8c895728feb40462250a1ebecceDoris Liu    // Default fade duration for fading in/out tool bar.
6494283533aba1b8c895728feb40462250a1ebecceDoris Liu    private static final long DEFAULT_FADE_DURATION_MS = 200;
65e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
66e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private Toolbar mToolbar;
67e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
68e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private int mDisplayOpts;
69e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private View mTabView;
70e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private Spinner mSpinner;
71e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private View mCustomView;
72e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
73e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private Drawable mIcon;
74e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private Drawable mLogo;
75e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private Drawable mNavIcon;
76e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
77e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private boolean mTitleSet;
78e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private CharSequence mTitle;
79e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private CharSequence mSubtitle;
80e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar    private CharSequence mHomeDescription;
81e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
82e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private Window.Callback mWindowCallback;
83e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private boolean mMenuPrepared;
84e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private ActionMenuPresenter mActionMenuPresenter;
85e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
866790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell    private int mNavigationMode = ActionBar.NAVIGATION_MODE_STANDARD;
87e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar    private int mDefaultNavigationContentDescription = 0;
8830f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar    private Drawable mDefaultNavigationIcon;
896790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell
902aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell    public ToolbarWidgetWrapper(Toolbar toolbar, boolean style) {
91e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar        this(toolbar, style, R.string.action_bar_up_description);
92e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar    }
93e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar
94e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar    public ToolbarWidgetWrapper(Toolbar toolbar, boolean style,
95e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar            int defaultNavigationContentDescription) {
96e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mToolbar = toolbar;
97e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
9807a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell        mTitle = toolbar.getTitle();
9907a74548ae5c1e064508cb1c79ac34de1142b240Adam Powell        mSubtitle = toolbar.getSubtitle();
1006192b07bdc81072fe8d8579b2625a9ba3999a3a0Adam Powell        mTitleSet = mTitle != null;
10124c2a7e736611b257d077f7ce1c0a28563bc8c06Yigit Boyar        mNavIcon = mToolbar.getNavigationIcon();
10230f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar        final TypedArray a = toolbar.getContext().obtainStyledAttributes(null,
10330f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar                R.styleable.ActionBar, R.attr.actionBarStyle, 0);
10430f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar        mDefaultNavigationIcon = a.getDrawable(R.styleable.ActionBar_homeAsUpIndicator);
1052aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell        if (style) {
1062aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            final CharSequence title = a.getText(R.styleable.ActionBar_title);
1072aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            if (!TextUtils.isEmpty(title)) {
1082aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                setTitle(title);
1092aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            }
110e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
1112aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            final CharSequence subtitle = a.getText(R.styleable.ActionBar_subtitle);
1122aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            if (!TextUtils.isEmpty(subtitle)) {
1132aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                setSubtitle(subtitle);
1142aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            }
115e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
1162aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            final Drawable logo = a.getDrawable(R.styleable.ActionBar_logo);
1172aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            if (logo != null) {
1182aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                setLogo(logo);
1192aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            }
120e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
1212aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            final Drawable icon = a.getDrawable(R.styleable.ActionBar_icon);
1222aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            if (icon != null) {
1232aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                setIcon(icon);
1242aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            }
12524c2a7e736611b257d077f7ce1c0a28563bc8c06Yigit Boyar            if (mNavIcon == null && mDefaultNavigationIcon != null) {
12630f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar                setNavigationIcon(mDefaultNavigationIcon);
1272aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            }
1282aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            setDisplayOptions(a.getInt(R.styleable.ActionBar_displayOptions, 0));
129e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
1302aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            final int customNavId = a.getResourceId(
1312aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                    R.styleable.ActionBar_customNavigationLayout, 0);
1322aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            if (customNavId != 0) {
1332aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                setCustomView(LayoutInflater.from(mToolbar.getContext()).inflate(customNavId,
1342aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                        mToolbar, false));
1352aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                setDisplayOptions(mDisplayOpts | ActionBar.DISPLAY_SHOW_CUSTOM);
1362aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            }
137e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
1382aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            final int height = a.getLayoutDimension(R.styleable.ActionBar_height, 0);
1392aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            if (height > 0) {
1402aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                final ViewGroup.LayoutParams lp = mToolbar.getLayoutParams();
1412aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                lp.height = height;
1422aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                mToolbar.setLayoutParams(lp);
1432aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            }
144e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
1452aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            final int contentInsetStart = a.getDimensionPixelOffset(
1462aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                    R.styleable.ActionBar_contentInsetStart, -1);
1472aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            final int contentInsetEnd = a.getDimensionPixelOffset(
1482aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                    R.styleable.ActionBar_contentInsetEnd, -1);
1492aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            if (contentInsetStart >= 0 || contentInsetEnd >= 0) {
1502aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                mToolbar.setContentInsetsRelative(Math.max(contentInsetStart, 0),
1512aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                        Math.max(contentInsetEnd, 0));
1522aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            }
153e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
1542aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            final int titleTextStyle = a.getResourceId(R.styleable.ActionBar_titleTextStyle, 0);
1552aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            if (titleTextStyle != 0) {
1562aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                mToolbar.setTitleTextAppearance(mToolbar.getContext(), titleTextStyle);
1572aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            }
158ebba5d4edd763b19124b715a0f084d2f00c84a47Adam Powell
1592aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            final int subtitleTextStyle = a.getResourceId(
1602aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                    R.styleable.ActionBar_subtitleTextStyle, 0);
1612aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            if (subtitleTextStyle != 0) {
1622aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell                mToolbar.setSubtitleTextAppearance(mToolbar.getContext(), subtitleTextStyle);
1632aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell            }
164ebba5d4edd763b19124b715a0f084d2f00c84a47Adam Powell
16522a117d1b60869ed36d125796396f190b4b002fbAlan Viverette            final int popupTheme = a.getResourceId(R.styleable.ActionBar_popupTheme, 0);
16622a117d1b60869ed36d125796396f190b4b002fbAlan Viverette            if (popupTheme != 0) {
16722a117d1b60869ed36d125796396f190b4b002fbAlan Viverette                mToolbar.setPopupTheme(popupTheme);
16822a117d1b60869ed36d125796396f190b4b002fbAlan Viverette            }
169af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell        } else {
170af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell            mDisplayOpts = detectDisplayOptions();
1712aa09a94dd540650d3ebad7363e4fb3aab2ebc95Adam Powell        }
17230f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar        a.recycle();
173e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
174e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar        setDefaultNavigationContentDescription(defaultNavigationContentDescription);
175e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar        mHomeDescription = mToolbar.getNavigationContentDescription();
1767901b2a54981b769bf27852c41ce612871a8e019Adam Powell
177e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
178e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            final ActionMenuItem mNavItem = new ActionMenuItem(mToolbar.getContext(),
179e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                    0, android.R.id.home, 0, 0, mTitle);
180e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            @Override
181e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            public void onClick(View v) {
182e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                if (mWindowCallback != null && mMenuPrepared) {
183e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                    mWindowCallback.onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, mNavItem);
184e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                }
185e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            }
186e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        });
187e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
188e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
189e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar    @Override
190e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar    public void setDefaultNavigationContentDescription(int defaultNavigationContentDescription) {
191e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar        if (defaultNavigationContentDescription == mDefaultNavigationContentDescription) {
192e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar            return;
193e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar        }
194e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar        mDefaultNavigationContentDescription = defaultNavigationContentDescription;
195e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar        if (TextUtils.isEmpty(mToolbar.getNavigationContentDescription())) {
196e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar            setNavigationContentDescription(mDefaultNavigationContentDescription);
197e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar        }
198e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar    }
199e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar
200af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell    private int detectDisplayOptions() {
201af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell        int opts = ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME |
202af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell                ActionBar.DISPLAY_USE_LOGO;
203af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell        if (mToolbar.getNavigationIcon() != null) {
204af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell            opts |= ActionBar.DISPLAY_HOME_AS_UP;
20530f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar            mDefaultNavigationIcon = mToolbar.getNavigationIcon();
206af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell        }
207af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell        return opts;
208af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell    }
209af2d85973ed768e390bc2f40f255ea39cc6f6fe5Adam Powell
210e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
211e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public ViewGroup getViewGroup() {
212e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mToolbar;
213e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
214e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
215e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
216e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public Context getContext() {
217e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mToolbar.getContext();
218e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
219e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
220e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
221e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public boolean isSplit() {
222e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return false;
223e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
224e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
225e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
226e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public boolean hasExpandedActionView() {
227e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mToolbar.hasExpandedActionView();
228e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
229e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
230e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
231e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void collapseActionView() {
232e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mToolbar.collapseActionView();
233e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
234e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
235e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
236e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setWindowCallback(Window.Callback cb) {
237e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mWindowCallback = cb;
238e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
239e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
240e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
241e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setWindowTitle(CharSequence title) {
242e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        // "Real" title always trumps window title.
243e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        if (!mTitleSet) {
244e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            setTitleInt(title);
245e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        }
246e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
247e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
248e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
249e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public CharSequence getTitle() {
250e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mToolbar.getTitle();
251e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
252e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
253e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
254e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setTitle(CharSequence title) {
255e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mTitleSet = true;
256e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        setTitleInt(title);
257e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
258e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
259e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private void setTitleInt(CharSequence title) {
260e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mTitle = title;
261e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        if ((mDisplayOpts & ActionBar.DISPLAY_SHOW_TITLE) != 0) {
262e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            mToolbar.setTitle(title);
263e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        }
264e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
265e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
266e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
267e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public CharSequence getSubtitle() {
268e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mToolbar.getSubtitle();
269e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
270e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
271e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
272e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setSubtitle(CharSequence subtitle) {
273e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mSubtitle = subtitle;
274e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        if ((mDisplayOpts & ActionBar.DISPLAY_SHOW_TITLE) != 0) {
275e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            mToolbar.setSubtitle(subtitle);
276e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        }
277e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
278e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
279e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
280e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void initProgress() {
281e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        Log.i(TAG, "Progress display unsupported");
282e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
283e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
284e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
285e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void initIndeterminateProgress() {
286e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        Log.i(TAG, "Progress display unsupported");
287e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
288e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
289e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
290e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public boolean canSplit() {
291e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return false;
292e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
293e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
294e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
295e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setSplitView(ViewGroup splitView) {
296e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
297e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
298e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
299e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setSplitToolbar(boolean split) {
300e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        if (split) {
301e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            throw new UnsupportedOperationException("Cannot split an android.widget.Toolbar");
302e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        }
303e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
304e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
305e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
306e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setSplitWhenNarrow(boolean splitWhenNarrow) {
307e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        // Ignore.
308e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
309e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
310e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
311e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public boolean hasIcon() {
312e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mIcon != null;
313e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
314e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
315e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
316e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public boolean hasLogo() {
317e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mLogo != null;
318e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
319e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
320e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
321e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setIcon(int resId) {
322e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        setIcon(resId != 0 ? getContext().getDrawable(resId) : null);
323e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
324e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
325e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
326e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setIcon(Drawable d) {
327e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mIcon = d;
328e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        updateToolbarLogo();
329e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
330e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
331e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
332e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setLogo(int resId) {
333e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        setLogo(resId != 0 ? getContext().getDrawable(resId) : null);
334e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
335e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
336e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
337e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setLogo(Drawable d) {
338e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mLogo = d;
339e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        updateToolbarLogo();
340e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
341e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
342e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    private void updateToolbarLogo() {
343e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        Drawable logo = null;
344e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        if ((mDisplayOpts & ActionBar.DISPLAY_SHOW_HOME) != 0) {
345e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            if ((mDisplayOpts & ActionBar.DISPLAY_USE_LOGO) != 0) {
346e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                logo = mLogo != null ? mLogo : mIcon;
347e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            } else {
348e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                logo = mIcon;
349e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            }
350e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        }
351e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mToolbar.setLogo(logo);
352e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
353e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
354e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
355e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public boolean canShowOverflowMenu() {
356e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mToolbar.canShowOverflowMenu();
357e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
358e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
359e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
360e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public boolean isOverflowMenuShowing() {
361e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mToolbar.isOverflowMenuShowing();
362e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
363e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
364e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
365e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public boolean isOverflowMenuShowPending() {
366e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mToolbar.isOverflowMenuShowPending();
367e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
368e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
369e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
370e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public boolean showOverflowMenu() {
371e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mToolbar.showOverflowMenu();
372e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
373e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
374e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
375e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public boolean hideOverflowMenu() {
376e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mToolbar.hideOverflowMenu();
377e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
378e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
379e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
380e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setMenuPrepared() {
381e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mMenuPrepared = true;
382e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
383e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
384e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
385e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setMenu(Menu menu, MenuPresenter.Callback cb) {
386e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        if (mActionMenuPresenter == null) {
387e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            mActionMenuPresenter = new ActionMenuPresenter(mToolbar.getContext());
388e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            mActionMenuPresenter.setId(com.android.internal.R.id.action_menu_presenter);
389e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        }
390e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mActionMenuPresenter.setCallback(cb);
391e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mToolbar.setMenu((MenuBuilder) menu, mActionMenuPresenter);
392e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
393e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
394e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
395e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void dismissPopupMenus() {
396e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mToolbar.dismissPopupMenus();
397e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
398e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
399e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
400e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public int getDisplayOptions() {
401e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mDisplayOpts;
402e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
403e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
404e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
405e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setDisplayOptions(int newOpts) {
406e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        final int oldOpts = mDisplayOpts;
407e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        final int changed = oldOpts ^ newOpts;
408e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mDisplayOpts = newOpts;
409e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        if (changed != 0) {
410e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            if ((changed & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
411e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                if ((newOpts & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
412e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar                    updateHomeAccessibility();
413e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                }
41430f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar                updateNavigationIcon();
415e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            }
416e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
417e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            if ((changed & AFFECTS_LOGO_MASK) != 0) {
418e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                updateToolbarLogo();
419e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            }
420e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
421e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            if ((changed & ActionBar.DISPLAY_SHOW_TITLE) != 0) {
422e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                if ((newOpts & ActionBar.DISPLAY_SHOW_TITLE) != 0) {
423e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                    mToolbar.setTitle(mTitle);
424e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                    mToolbar.setSubtitle(mSubtitle);
425e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                } else {
426e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                    mToolbar.setTitle(null);
427e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                    mToolbar.setSubtitle(null);
428e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                }
429e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            }
430e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
431e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            if ((changed & ActionBar.DISPLAY_SHOW_CUSTOM) != 0 && mCustomView != null) {
432e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                if ((newOpts & ActionBar.DISPLAY_SHOW_CUSTOM) != 0) {
433e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                    mToolbar.addView(mCustomView);
434e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                } else {
435e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                    mToolbar.removeView(mCustomView);
436e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                }
437e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            }
438e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        }
439e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
440e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
441e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
442e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell    public void setEmbeddedTabView(ScrollingTabContainerView tabView) {
443e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell        if (mTabView != null && mTabView.getParent() == mToolbar) {
444e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell            mToolbar.removeView(mTabView);
445e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell        }
446e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mTabView = tabView;
447e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell        if (tabView != null && mNavigationMode == ActionBar.NAVIGATION_MODE_TABS) {
448e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell            mToolbar.addView(mTabView, 0);
449e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell            Toolbar.LayoutParams lp = (Toolbar.LayoutParams) mTabView.getLayoutParams();
450e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell            lp.width = ViewGroup.LayoutParams.WRAP_CONTENT;
451e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell            lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
452e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell            lp.gravity = Gravity.START | Gravity.BOTTOM;
453e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell            tabView.setAllowCollapse(true);
454e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell        }
455e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
456e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
457e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
458e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public boolean hasEmbeddedTabs() {
459e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mTabView != null;
460e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
461e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
462e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
463e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public boolean isTitleTruncated() {
464e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mToolbar.isTitleTruncated();
465e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
466e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
467e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
468e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setCollapsible(boolean collapsible) {
469360c1d89227570510de7bb11195c986300488464Adam Powell        mToolbar.setCollapsible(collapsible);
470e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
471e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
472e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
473e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setHomeButtonEnabled(boolean enable) {
474e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        // Ignore
475e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
476e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
477e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
478e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public int getNavigationMode() {
4796790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell        return mNavigationMode;
480e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
481e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
482e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
483e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setNavigationMode(int mode) {
4846790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell        final int oldMode = mNavigationMode;
4856790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell        if (mode != oldMode) {
4866790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell            switch (oldMode) {
4876790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell                case ActionBar.NAVIGATION_MODE_LIST:
4886790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell                    if (mSpinner != null && mSpinner.getParent() == mToolbar) {
4896790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell                        mToolbar.removeView(mSpinner);
4906790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell                    }
4916790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell                    break;
492e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell                case ActionBar.NAVIGATION_MODE_TABS:
493e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell                    if (mTabView != null && mTabView.getParent() == mToolbar) {
494e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell                        mToolbar.removeView(mTabView);
495e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell                    }
496e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell                    break;
4976790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell            }
4986790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell
4996790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell            mNavigationMode = mode;
5006790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell
5016790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell            switch (mode) {
5026790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell                case ActionBar.NAVIGATION_MODE_STANDARD:
5036790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell                    break;
5046790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell                case ActionBar.NAVIGATION_MODE_LIST:
5056790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell                    ensureSpinner();
5066790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell                    mToolbar.addView(mSpinner, 0);
5076790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell                    break;
5086790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell                case ActionBar.NAVIGATION_MODE_TABS:
509e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell                    if (mTabView != null) {
510e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell                        mToolbar.addView(mTabView, 0);
511e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell                        Toolbar.LayoutParams lp = (Toolbar.LayoutParams) mTabView.getLayoutParams();
512e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell                        lp.width = ViewGroup.LayoutParams.WRAP_CONTENT;
513e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell                        lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
514e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell                        lp.gravity = Gravity.START | Gravity.BOTTOM;
515e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell                    }
516e002c2fb39f9df1db38a7412832882ae622660d4Adam Powell                    break;
5176790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell                default:
5186790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell                    throw new IllegalArgumentException("Invalid navigation mode " + mode);
5196790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell            }
520e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        }
521e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
522e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
5236790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell    private void ensureSpinner() {
524e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        if (mSpinner == null) {
525e178c93ff5457962cc694f44729dfa633de53f9bAlan Viverette            mSpinner = new Spinner(getContext(), null, R.attr.actionDropDownStyle);
5266790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell            Toolbar.LayoutParams lp = new Toolbar.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
5276790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell                    ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL);
5286790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell            mSpinner.setLayoutParams(lp);
529e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        }
5306790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell    }
5316790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell
5326790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell    @Override
5336790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell    public void setDropdownParams(SpinnerAdapter adapter,
5346790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell            AdapterView.OnItemSelectedListener listener) {
5356790b0502b0ab6375ab9f750a5faf6a9b1748a4cAdam Powell        ensureSpinner();
536e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mSpinner.setAdapter(adapter);
537e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mSpinner.setOnItemSelectedListener(listener);
538e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
539e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
540e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
541e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setDropdownSelectedPosition(int position) {
542e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        if (mSpinner == null) {
543e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            throw new IllegalStateException(
544e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                    "Can't set dropdown selected position without an adapter");
545e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        }
546e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mSpinner.setSelection(position);
547e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
548e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
549e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
550e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public int getDropdownSelectedPosition() {
551e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mSpinner != null ? mSpinner.getSelectedItemPosition() : 0;
552e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
553e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
554e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
555e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public int getDropdownItemCount() {
556e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mSpinner != null ? mSpinner.getCount() : 0;
557e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
558e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
559e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
560e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setCustomView(View view) {
561e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        if (mCustomView != null && (mDisplayOpts & ActionBar.DISPLAY_SHOW_CUSTOM) != 0) {
562e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            mToolbar.removeView(mCustomView);
563e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        }
564e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mCustomView = view;
565e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        if (view != null && (mDisplayOpts & ActionBar.DISPLAY_SHOW_CUSTOM) != 0) {
566e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell            mToolbar.addView(mCustomView);
567e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        }
568e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
569e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
570e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
571e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public View getCustomView() {
572e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        return mCustomView;
573e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
574e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
575e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
576e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void animateToVisibility(int visibility) {
57794283533aba1b8c895728feb40462250a1ebecceDoris Liu        Animator anim = setupAnimatorToVisibility(visibility, DEFAULT_FADE_DURATION_MS);
57894283533aba1b8c895728feb40462250a1ebecceDoris Liu        if (anim != null) {
57994283533aba1b8c895728feb40462250a1ebecceDoris Liu            anim.start();
58094283533aba1b8c895728feb40462250a1ebecceDoris Liu        }
58194283533aba1b8c895728feb40462250a1ebecceDoris Liu    }
58294283533aba1b8c895728feb40462250a1ebecceDoris Liu
58394283533aba1b8c895728feb40462250a1ebecceDoris Liu    @Override
58494283533aba1b8c895728feb40462250a1ebecceDoris Liu    public Animator setupAnimatorToVisibility(int visibility, long duration) {
58594283533aba1b8c895728feb40462250a1ebecceDoris Liu
586e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        if (visibility == View.GONE) {
58794283533aba1b8c895728feb40462250a1ebecceDoris Liu            ObjectAnimator anim = ObjectAnimator.ofFloat(mToolbar, View.ALPHA, 1, 0);
58894283533aba1b8c895728feb40462250a1ebecceDoris Liu            anim.setDuration(duration);
58994283533aba1b8c895728feb40462250a1ebecceDoris Liu            anim.addListener(new AnimatorListenerAdapter() {
590e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                        private boolean mCanceled = false;
591e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                        @Override
592e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                        public void onAnimationEnd(Animator animation) {
593e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                            if (!mCanceled) {
594e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                                mToolbar.setVisibility(View.GONE);
595e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                            }
596e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                        }
597e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
598e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                        @Override
599e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                        public void onAnimationCancel(Animator animation) {
600e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                            mCanceled = true;
601e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                        }
602e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                    });
60394283533aba1b8c895728feb40462250a1ebecceDoris Liu            return anim;
604e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        } else if (visibility == View.VISIBLE) {
60594283533aba1b8c895728feb40462250a1ebecceDoris Liu            ObjectAnimator anim = ObjectAnimator.ofFloat(mToolbar, View.ALPHA, 0, 1);
60694283533aba1b8c895728feb40462250a1ebecceDoris Liu            anim.setDuration(duration);
60794283533aba1b8c895728feb40462250a1ebecceDoris Liu            anim.addListener(new AnimatorListenerAdapter() {
608e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                        @Override
609e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                        public void onAnimationStart(Animator animation) {
610e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                            mToolbar.setVisibility(View.VISIBLE);
611e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                        }
612e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell                    });
61394283533aba1b8c895728feb40462250a1ebecceDoris Liu            return anim;
614e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        }
61594283533aba1b8c895728feb40462250a1ebecceDoris Liu        return null;
616e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
617e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
618e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
619e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setNavigationIcon(Drawable icon) {
620e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mNavIcon = icon;
62130f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar        updateNavigationIcon();
622e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
623e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
624e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
625e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setNavigationIcon(int resId) {
6266bb10554ba3a0b6127402951a477412d961d1072Adam Powell        setNavigationIcon(resId != 0 ? mToolbar.getContext().getDrawable(resId) : null);
627e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
628e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
629e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
63030f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar    public void setDefaultNavigationIcon(Drawable defaultNavigationIcon) {
63130f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar        if (mDefaultNavigationIcon != defaultNavigationIcon) {
63230f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar            mDefaultNavigationIcon = defaultNavigationIcon;
63330f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar            updateNavigationIcon();
63430f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar        }
63530f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar    }
63630f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar
63730f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar    private void updateNavigationIcon() {
63830f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar        if ((mDisplayOpts & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
63930f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar            mToolbar.setNavigationIcon(mNavIcon != null ? mNavIcon : mDefaultNavigationIcon);
64030f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar        } else {
64130f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar            mToolbar.setNavigationIcon(null);
64230f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar        }
64330f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar    }
64430f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar
64530f5dc935b30a72982cc2ee04c8c2a17ba95e885Yigit Boyar    @Override
646e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setNavigationContentDescription(CharSequence description) {
647e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar        mHomeDescription = description;
648e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar        updateHomeAccessibility();
649e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
650e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
651e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
652e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void setNavigationContentDescription(int resId) {
653e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar        setNavigationContentDescription(resId == 0 ? null : getContext().getString(resId));
654e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar    }
655e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar
656e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar    private void updateHomeAccessibility() {
657e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar        if ((mDisplayOpts & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
658e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar            if (TextUtils.isEmpty(mHomeDescription)) {
659e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar                mToolbar.setNavigationContentDescription(mDefaultNavigationContentDescription);
660e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar            } else {
661e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar                mToolbar.setNavigationContentDescription(mHomeDescription);
662e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar            }
663e91f7c0219d0f47d9c44a4933b571b0a482ec058Yigit Boyar        }
664e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
665e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
666e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
667e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void saveHierarchyState(SparseArray<Parcelable> toolbarStates) {
668e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mToolbar.saveHierarchyState(toolbarStates);
669e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
670e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
671e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    @Override
672e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    public void restoreHierarchyState(SparseArray<Parcelable> toolbarStates) {
673e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell        mToolbar.restoreHierarchyState(toolbarStates);
674e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell    }
675e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell
676fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    @Override
677fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    public void setBackgroundDrawable(Drawable d) {
678fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar        //noinspection deprecation
679fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar        mToolbar.setBackgroundDrawable(d);
680fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    }
681fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar
682fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    @Override
683fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    public int getHeight() {
684fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar        return mToolbar.getHeight();
685fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    }
686fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar
687fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    @Override
688fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    public void setVisibility(int visible) {
689fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar        mToolbar.setVisibility(visible);
690fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    }
691fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar
692fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    @Override
693fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    public int getVisibility() {
694fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar        return mToolbar.getVisibility();
695fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    }
696fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar
697fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    @Override
698fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    public void setMenuCallbacks(MenuPresenter.Callback presenterCallback,
699fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar            MenuBuilder.Callback menuBuilderCallback) {
700fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar        mToolbar.setMenuCallbacks(presenterCallback, menuBuilderCallback);
701fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    }
702fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar
703fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    @Override
704fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    public Menu getMenu() {
705fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar        return mToolbar.getMenu();
706fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar    }
707fe6d57c366ba78295d3320cb73512f02876eed61Yigit Boyar
708e021e6ed8931a0a8296af182fc9b0c76b64fb0c4Adam Powell}
709