1bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell/*
2bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * Copyright (C) 2010 The Android Open Source Project
3bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell *
4bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * Licensed under the Apache License, Version 2.0 (the "License");
5bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * you may not use this file except in compliance with the License.
6bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * You may obtain a copy of the License at
7bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell *
8bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell *      http://www.apache.org/licenses/LICENSE-2.0
9bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell *
10bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * Unless required by applicable law or agreed to in writing, software
11bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * distributed under the License is distributed on an "AS IS" BASIS,
12bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * See the License for the specific language governing permissions and
14bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * limitations under the License.
15bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell */
16da10fdd1400ecfd8d7f2e55651dd528d0614dfc5Jeff Brownpackage android.support.v7.internal.widget;
17bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
18bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.content.Context;
19bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.content.res.TypedArray;
20bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.graphics.drawable.Drawable;
21da10fdd1400ecfd8d7f2e55651dd528d0614dfc5Jeff Brownimport android.support.v7.appcompat.R;
22d8222dedaacae30fa03bee346ebf42ee75b39928Chris Banesimport android.support.v7.view.ActionMode;
23da10fdd1400ecfd8d7f2e55651dd528d0614dfc5Jeff Brownimport android.support.v7.internal.view.menu.ActionMenuPresenter;
24da10fdd1400ecfd8d7f2e55651dd528d0614dfc5Jeff Brownimport android.support.v7.internal.view.menu.ActionMenuView;
25da10fdd1400ecfd8d7f2e55651dd528d0614dfc5Jeff Brownimport android.support.v7.internal.view.menu.MenuBuilder;
26bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.text.TextUtils;
27bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.util.AttributeSet;
28bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.view.LayoutInflater;
29bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.view.View;
30bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.view.ViewGroup;
31bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.widget.LinearLayout;
32bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.widget.TextView;
33bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
34bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell/**
35bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * @hide
36bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell */
3734b5c9580dd01b4428ab2c5990add571eaab6b13Trevor Johnspublic class ActionBarContextView extends AbsActionBarView {
38bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
3920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private static final String TAG = "ActionBarContextView";
40bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
4120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private CharSequence mTitle;
4220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private CharSequence mSubtitle;
43bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
4420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private View mClose;
4520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private View mCustomView;
4620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private LinearLayout mTitleLayout;
4720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private TextView mTitleView;
4820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private TextView mSubtitleView;
4920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private int mTitleStyleRes;
5020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private int mSubtitleStyleRes;
5120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private Drawable mSplitBackground;
5220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private boolean mTitleOptional;
5320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
5420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public ActionBarContextView(Context context) {
5520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        this(context, null);
56bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
5720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
5820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public ActionBarContextView(Context context, AttributeSet attrs) {
5920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        this(context, attrs, R.attr.actionModeStyle);
60bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
61bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
6220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public ActionBarContextView(Context context, AttributeSet attrs, int defStyle) {
6320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        super(context, attrs, defStyle);
64bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
6520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ActionMode, defStyle, 0);
6620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        setBackgroundDrawable(a.getDrawable(
6720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                R.styleable.ActionMode_background));
6820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mTitleStyleRes = a.getResourceId(
6920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                R.styleable.ActionMode_titleTextStyle, 0);
7020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mSubtitleStyleRes = a.getResourceId(
7120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                R.styleable.ActionMode_subtitleTextStyle, 0);
72bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
7320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mContentHeight = a.getLayoutDimension(
7420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                R.styleable.ActionMode_height, 0);
75bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
7620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mSplitBackground = a.getDrawable(
7720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                R.styleable.ActionMode_backgroundSplit);
7820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
7920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        a.recycle();
80bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
81bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
8220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
8320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void onDetachedFromWindow() {
8420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        super.onDetachedFromWindow();
8520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mActionMenuPresenter != null) {
8620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mActionMenuPresenter.hideOverflowMenu();
8720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mActionMenuPresenter.hideSubMenus();
8820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
89bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
90bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
9120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
9220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void setSplitActionBar(boolean split) {
9320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mSplitActionBar != split) {
9420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            if (mActionMenuPresenter != null) {
9520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                // Mode is already active; move everything over and adjust the menu itself.
9620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                final ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(
9720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                        ViewGroup.LayoutParams.WRAP_CONTENT,
9820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                        ViewGroup.LayoutParams.FILL_PARENT);
9920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                if (!split) {
10020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this);
10120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    mMenuView.setBackgroundDrawable(null);
10220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    final ViewGroup oldParent = (ViewGroup) mMenuView.getParent();
10320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    if (oldParent != null) {
10420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                        oldParent.removeView(mMenuView);
10520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    }
10620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    addView(mMenuView, layoutParams);
10720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                } else {
10820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    // Allow full screen width in split mode.
10920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    mActionMenuPresenter.setWidthLimit(
11020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                            getContext().getResources().getDisplayMetrics().widthPixels, true);
11120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    // No limit to the item count; use whatever will fit.
11220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    mActionMenuPresenter.setItemLimit(Integer.MAX_VALUE);
11320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    // Span the whole width
11420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    layoutParams.width = ViewGroup.LayoutParams.FILL_PARENT;
11520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    layoutParams.height = mContentHeight;
11620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this);
11720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    mMenuView.setBackgroundDrawable(mSplitBackground);
11820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    final ViewGroup oldParent = (ViewGroup) mMenuView.getParent();
11920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    if (oldParent != null) {
12020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                        oldParent.removeView(mMenuView);
12120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    }
12220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    mSplitView.addView(mMenuView, layoutParams);
12320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                }
12420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            }
12520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            super.setSplitActionBar(split);
12620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
127bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
12820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
12920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void setContentHeight(int height) {
13020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mContentHeight = height;
131bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
132bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
13320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void setCustomView(View view) {
13420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mCustomView != null) {
13520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            removeView(mCustomView);
13620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
13720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mCustomView = view;
13820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mTitleLayout != null) {
13920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            removeView(mTitleLayout);
14020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mTitleLayout = null;
14120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
14220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (view != null) {
14320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            addView(view);
14420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
14520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        requestLayout();
146bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
147bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
14820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void setTitle(CharSequence title) {
14920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mTitle = title;
15020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        initTitle();
151bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
15220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
15320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void setSubtitle(CharSequence subtitle) {
15420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mSubtitle = subtitle;
15520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        initTitle();
156bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
157bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
15820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public CharSequence getTitle() {
15920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mTitle;
160bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
161bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
16220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public CharSequence getSubtitle() {
16320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mSubtitle;
16420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
165bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
16620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private void initTitle() {
16720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mTitleLayout == null) {
16820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            LayoutInflater inflater = LayoutInflater.from(getContext());
169ee7c9fb199e9b9af8d40a1f9e27d85465acf8301Chris Banes            inflater.inflate(R.layout.abc_action_bar_title_item, this);
17020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mTitleLayout = (LinearLayout) getChildAt(getChildCount() - 1);
17120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mTitleView = (TextView) mTitleLayout.findViewById(R.id.action_bar_title);
17220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mSubtitleView = (TextView) mTitleLayout.findViewById(R.id.action_bar_subtitle);
17320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            if (mTitleStyleRes != 0) {
17420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                mTitleView.setTextAppearance(getContext(), mTitleStyleRes);
17520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            }
17620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            if (mSubtitleStyleRes != 0) {
17720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                mSubtitleView.setTextAppearance(getContext(), mSubtitleStyleRes);
17820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            }
17920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
180bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
18120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mTitleView.setText(mTitle);
18220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mSubtitleView.setText(mSubtitle);
183bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
18420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        final boolean hasTitle = !TextUtils.isEmpty(mTitle);
18520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        final boolean hasSubtitle = !TextUtils.isEmpty(mSubtitle);
18620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mSubtitleView.setVisibility(hasSubtitle ? VISIBLE : GONE);
18720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mTitleLayout.setVisibility(hasTitle || hasSubtitle ? VISIBLE : GONE);
18820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mTitleLayout.getParent() == null) {
18920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            addView(mTitleLayout);
19020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
191bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
192bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
19320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void initForMode(final ActionMode mode) {
19420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mClose == null) {
19520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            LayoutInflater inflater = LayoutInflater.from(getContext());
196ee7c9fb199e9b9af8d40a1f9e27d85465acf8301Chris Banes            mClose = inflater.inflate(R.layout.abc_action_mode_close_item, this, false);
19720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            addView(mClose);
19820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        } else if (mClose.getParent() == null) {
19920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            addView(mClose);
20020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
20120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
20220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        View closeButton = mClose.findViewById(R.id.action_mode_close_button);
20320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        closeButton.setOnClickListener(new View.OnClickListener() {
20420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            public void onClick(View v) {
20520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                mode.finish();
20620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            }
20720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        });
20820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
20920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        final MenuBuilder menu = (MenuBuilder) mode.getMenu();
21020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mActionMenuPresenter != null) {
21120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mActionMenuPresenter.dismissPopupMenus();
21220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
21320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mActionMenuPresenter = new ActionMenuPresenter(getContext());
21420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mActionMenuPresenter.setReserveOverflow(true);
21520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
21620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        final ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(
21720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                ViewGroup.LayoutParams.WRAP_CONTENT,
21820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                ViewGroup.LayoutParams.FILL_PARENT);
21920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (!mSplitActionBar) {
22020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            menu.addMenuPresenter(mActionMenuPresenter);
22120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this);
22220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mMenuView.setBackgroundDrawable(null);
22320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            addView(mMenuView, layoutParams);
22420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        } else {
22520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            // Allow full screen width in split mode.
22620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mActionMenuPresenter.setWidthLimit(
22720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    getContext().getResources().getDisplayMetrics().widthPixels, true);
22820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            // No limit to the item count; use whatever will fit.
22920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mActionMenuPresenter.setItemLimit(Integer.MAX_VALUE);
23020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            // Span the whole width
23120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            layoutParams.width = ViewGroup.LayoutParams.FILL_PARENT;
23220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            layoutParams.height = mContentHeight;
23320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            menu.addMenuPresenter(mActionMenuPresenter);
23420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this);
23520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mMenuView.setBackgroundDrawable(mSplitBackground);
23620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mSplitView.addView(mMenuView, layoutParams);
23720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
238bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
239bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
24020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void closeMode() {
24120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mClose == null) {
24220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            killMode();
24320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            return;
244bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell        }
245bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
246bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
24720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void killMode() {
24820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        removeAllViews();
24920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mSplitView != null) {
25020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mSplitView.removeView(mMenuView);
25120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
25220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mCustomView = null;
25320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mMenuView = null;
254bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
255bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
25620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
25720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean showOverflowMenu() {
25820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mActionMenuPresenter != null) {
25920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            return mActionMenuPresenter.showOverflowMenu();
260bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell        }
26120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return false;
262bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
263bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
26420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
26520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean hideOverflowMenu() {
26620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mActionMenuPresenter != null) {
26720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            return mActionMenuPresenter.hideOverflowMenu();
26820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
26920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return false;
27020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
271bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
27220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
27320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean isOverflowMenuShowing() {
27420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mActionMenuPresenter != null) {
27520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            return mActionMenuPresenter.isOverflowMenuShowing();
27620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
27720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return false;
27820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
279bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
28020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
28120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
28220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        // Used by custom views if they don't supply layout params. Everything else
28320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        // added to an ActionBarContextView should have them already.
28420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return new ViewGroup.MarginLayoutParams(
28520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
286bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
287bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
28820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
28920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
29020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return new ViewGroup.MarginLayoutParams(getContext(), attrs);
291bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
292bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
29320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
29420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
29520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        final int widthMode = View.MeasureSpec.getMode(widthMeasureSpec);
29620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (widthMode != View.MeasureSpec.EXACTLY) {
29720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            throw new IllegalStateException(getClass().getSimpleName() + " can only be used " +
29820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    "with android:layout_width=\"FILL_PARENT\" (or fill_parent)");
29920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
30020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
30120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        final int heightMode = View.MeasureSpec.getMode(heightMeasureSpec);
30220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (heightMode == View.MeasureSpec.UNSPECIFIED) {
30320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            throw new IllegalStateException(getClass().getSimpleName() + " can only be used " +
30420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    "with android:layout_height=\"wrap_content\"");
30520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
30620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
30720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        final int contentWidth = View.MeasureSpec.getSize(widthMeasureSpec);
30820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
30920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        int maxHeight = mContentHeight > 0 ?
31020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                mContentHeight : View.MeasureSpec.getSize(heightMeasureSpec);
31120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
31220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        final int verticalPadding = getPaddingTop() + getPaddingBottom();
31320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        int availableWidth = contentWidth - getPaddingLeft() - getPaddingRight();
31420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        final int height = maxHeight - verticalPadding;
31520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        final int childSpecHeight = View.MeasureSpec
31620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                .makeMeasureSpec(height, View.MeasureSpec.AT_MOST);
31720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
31820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mClose != null) {
31920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            availableWidth = measureChildView(mClose, availableWidth, childSpecHeight, 0);
32020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) mClose
32120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    .getLayoutParams();
32220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            availableWidth -= lp.leftMargin + lp.rightMargin;
32320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
32420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
32520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mMenuView != null && mMenuView.getParent() == this) {
32620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            availableWidth = measureChildView(mMenuView, availableWidth,
32720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    childSpecHeight, 0);
32820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
32920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
33020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mTitleLayout != null && mCustomView == null) {
33120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            if (mTitleOptional) {
33220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                final int titleWidthSpec = View.MeasureSpec
33320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                        .makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
33420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                mTitleLayout.measure(titleWidthSpec, childSpecHeight);
33520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                final int titleWidth = mTitleLayout.getMeasuredWidth();
33620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                final boolean titleFits = titleWidth <= availableWidth;
33720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                if (titleFits) {
33820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    availableWidth -= titleWidth;
33920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                }
34020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                mTitleLayout.setVisibility(titleFits ? VISIBLE : GONE);
34120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            } else {
34220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                availableWidth = measureChildView(mTitleLayout, availableWidth, childSpecHeight, 0);
34320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            }
34420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
34520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
34620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mCustomView != null) {
34720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            ViewGroup.LayoutParams lp = mCustomView.getLayoutParams();
34820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            final int customWidthMode = lp.width != ViewGroup.LayoutParams.WRAP_CONTENT ?
34920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    View.MeasureSpec.EXACTLY : View.MeasureSpec.AT_MOST;
35020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            final int customWidth = lp.width >= 0 ?
35120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    Math.min(lp.width, availableWidth) : availableWidth;
35220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            final int customHeightMode = lp.height != ViewGroup.LayoutParams.WRAP_CONTENT ?
35320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    View.MeasureSpec.EXACTLY : View.MeasureSpec.AT_MOST;
35420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            final int customHeight = lp.height >= 0 ?
35520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    Math.min(lp.height, height) : height;
35620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            mCustomView.measure(View.MeasureSpec.makeMeasureSpec(customWidth, customWidthMode),
35720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    View.MeasureSpec.makeMeasureSpec(customHeight, customHeightMode));
35820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
35920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
36020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mContentHeight <= 0) {
36120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            int measuredHeight = 0;
36220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            final int count = getChildCount();
36320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            for (int i = 0; i < count; i++) {
36420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                View v = getChildAt(i);
36520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                int paddedViewHeight = v.getMeasuredHeight() + verticalPadding;
36620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                if (paddedViewHeight > measuredHeight) {
36720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    measuredHeight = paddedViewHeight;
36820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                }
36920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            }
37020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            setMeasuredDimension(contentWidth, measuredHeight);
37120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        } else {
37220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            setMeasuredDimension(contentWidth, maxHeight);
37320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
374bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
375bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
37620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    @Override
37720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    protected void onLayout(boolean changed, int l, int t, int r, int b) {
37820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        int x = getPaddingLeft();
37920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        final int y = getPaddingTop();
38020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        final int contentHeight = b - t - getPaddingTop() - getPaddingBottom();
38120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
38220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mClose != null && mClose.getVisibility() != GONE) {
38320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) mClose
38420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns                    .getLayoutParams();
38520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            x += lp.leftMargin;
38620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            x += positionChild(mClose, x, y, contentHeight);
38720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            x += lp.rightMargin;
38820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
38920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
39020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
39120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mTitleLayout != null && mCustomView == null && mTitleLayout.getVisibility() != GONE) {
39220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            x += positionChild(mTitleLayout, x, y, contentHeight);
39320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
39420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
39520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mCustomView != null) {
39620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            x += positionChild(mCustomView, x, y, contentHeight);
39720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
39820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
39920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        x = r - l - getPaddingRight();
400bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
40120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (mMenuView != null) {
40220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            x -= positionChildInverse(mMenuView, x, y, contentHeight);
40320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
404bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
405bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
40620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void setTitleOptional(boolean titleOptional) {
40720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        if (titleOptional != mTitleOptional) {
40820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns            requestLayout();
40920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        }
41020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mTitleOptional = titleOptional;
411bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    }
412bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
41320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean isTitleOptional() {
41420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mTitleOptional;
41520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
416bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell}
417