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 */ 16bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell 17da10fdd1400ecfd8d7f2e55651dd528d0614dfc5Jeff Brownpackage android.support.v7.internal.widget; 18bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell 19bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.content.Context; 20bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.content.res.TypedArray; 21bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.graphics.Canvas; 22bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.graphics.drawable.Drawable; 23da10fdd1400ecfd8d7f2e55651dd528d0614dfc5Jeff Brownimport android.support.v7.app.ActionBar; 24da10fdd1400ecfd8d7f2e55651dd528d0614dfc5Jeff Brownimport android.support.v7.appcompat.R; 25d8222dedaacae30fa03bee346ebf42ee75b39928Chris Banesimport android.support.v7.view.ActionMode; 26bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.util.AttributeSet; 27bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.view.MotionEvent; 28bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.view.View; 29bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.view.ViewGroup; 30bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.widget.FrameLayout; 31bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell 32bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell/** 3320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * This class acts as a container for the action bar view and action mode context views. It applies 3420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * special styles as needed to help handle animated transitions between them. 3520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * 36bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * @hide 37bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell */ 38bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellpublic class ActionBarContainer extends FrameLayout { 3920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 4020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns private boolean mIsTransitioning; 4120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns private View mTabContainer; 4220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns private ActionBarView mActionBarView; 4320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 4420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns private Drawable mBackground; 4520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns private Drawable mStackedBackground; 4620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns private Drawable mSplitBackground; 4720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns private boolean mIsSplit; 4820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns private boolean mIsStacked; 4920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 5020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public ActionBarContainer(Context context) { 5120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns this(context, null); 5220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 5320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 5420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public ActionBarContainer(Context context, AttributeSet attrs) { 5520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns super(context, attrs); 5620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 5720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns setBackgroundDrawable(null); 5820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 5920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns TypedArray a = context.obtainStyledAttributes(attrs, 6020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns R.styleable.ActionBar); 6120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mBackground = a.getDrawable(R.styleable.ActionBar_background); 6220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mStackedBackground = a.getDrawable( 6320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns R.styleable.ActionBar_backgroundStacked); 6420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 6520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (getId() == R.id.split_action_bar) { 6620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mIsSplit = true; 6720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mSplitBackground = a.getDrawable( 6820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns R.styleable.ActionBar_backgroundSplit); 69bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell } 7020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns a.recycle(); 7120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 7220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns setWillNotDraw(mIsSplit ? mSplitBackground == null : 7320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mBackground == null && mStackedBackground == null); 7420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 7520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 7620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns @Override 7720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public void onFinishInflate() { 7820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns super.onFinishInflate(); 7920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mActionBarView = (ActionBarView) findViewById(R.id.action_bar); 8020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 8120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 8220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public void setPrimaryBackground(Drawable bg) { 83242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes if (mBackground != null) { 84242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes mBackground.setCallback(null); 85242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes unscheduleDrawable(mBackground); 86242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes } 8720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mBackground = bg; 88242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes if (bg != null) { 89242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes bg.setCallback(this); 90242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes } 91242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes setWillNotDraw(mIsSplit ? mSplitBackground == null : 92242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes mBackground == null && mStackedBackground == null); 9320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns invalidate(); 9420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 9520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 9620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public void setStackedBackground(Drawable bg) { 97242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes if (mStackedBackground != null) { 98242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes mStackedBackground.setCallback(null); 99242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes unscheduleDrawable(mStackedBackground); 100242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes } 10120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mStackedBackground = bg; 102242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes if (bg != null) { 103242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes bg.setCallback(this); 104242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes } 105242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes setWillNotDraw(mIsSplit ? mSplitBackground == null : 106242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes mBackground == null && mStackedBackground == null); 10720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns invalidate(); 10820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 10920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 11020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public void setSplitBackground(Drawable bg) { 111242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes if (mSplitBackground != null) { 112242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes mSplitBackground.setCallback(null); 113242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes unscheduleDrawable(mSplitBackground); 114242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes } 11520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mSplitBackground = bg; 116242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes if (bg != null) { 117242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes bg.setCallback(this); 118242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes } 119242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes setWillNotDraw(mIsSplit ? mSplitBackground == null : 120242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes mBackground == null && mStackedBackground == null); 12120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns invalidate(); 12220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 12320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 124242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes @Override 125242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes public void setVisibility(int visibility) { 126242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes super.setVisibility(visibility); 127242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes final boolean isVisible = visibility == VISIBLE; 128242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes if (mBackground != null) mBackground.setVisible(isVisible, false); 129242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes if (mStackedBackground != null) mStackedBackground.setVisible(isVisible, false); 130242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes if (mSplitBackground != null) mSplitBackground.setVisible(isVisible, false); 131242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes } 132242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes 133242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes @Override 134242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes protected boolean verifyDrawable(Drawable who) { 135242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes return (who == mBackground && !mIsSplit) || (who == mStackedBackground && mIsStacked) || 136242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes (who == mSplitBackground && mIsSplit) || super.verifyDrawable(who); 137242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes } 138242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes 139242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes @Override 140242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes protected void drawableStateChanged() { 141242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes super.drawableStateChanged(); 142242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes if (mBackground != null && mBackground.isStateful()) { 143242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes mBackground.setState(getDrawableState()); 144242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes } 145242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes if (mStackedBackground != null && mStackedBackground.isStateful()) { 146242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes mStackedBackground.setState(getDrawableState()); 147242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes } 148242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes if (mSplitBackground != null && mSplitBackground.isStateful()) { 149242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes mSplitBackground.setState(getDrawableState()); 150242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes } 151242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes } 152242db97d44808da5e2f8ec45076e2353a03882a0Chris Banes 15320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns /** 15420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Set the action bar into a "transitioning" state. While transitioning the bar will block focus 15520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * and touch from all of its descendants. This prevents the user from interacting with the bar 15620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * while it is animating in or out. 15720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * 15820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @param isTransitioning true if the bar is currently transitioning, false otherwise. 15920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns */ 16020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public void setTransitioning(boolean isTransitioning) { 16120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mIsTransitioning = isTransitioning; 16220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns setDescendantFocusability(isTransitioning ? FOCUS_BLOCK_DESCENDANTS 16320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns : FOCUS_AFTER_DESCENDANTS); 16420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 16520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 16620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns @Override 16720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public boolean onInterceptTouchEvent(MotionEvent ev) { 16820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns return mIsTransitioning || super.onInterceptTouchEvent(ev); 16920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 17020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 17120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns @Override 17220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public boolean onTouchEvent(MotionEvent ev) { 17320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns super.onTouchEvent(ev); 17420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 17520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns // An action bar always eats touch events. 17620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns return true; 17720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 17820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 17920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns //@Override 18020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public boolean onHoverEvent(MotionEvent ev) { 18120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns //super.onHoverEvent(ev); 18220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 18320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns // An action bar always eats hover events. 18420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns return true; 18520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 18620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 18720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public void setTabContainer(ScrollingTabContainerView tabView) { 18820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (mTabContainer != null) { 18920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns removeView(mTabContainer); 19020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 19120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mTabContainer = tabView; 19220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (tabView != null) { 19320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns addView(tabView); 19420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns final ViewGroup.LayoutParams lp = tabView.getLayoutParams(); 19520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns lp.width = LayoutParams.FILL_PARENT; 19620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns lp.height = LayoutParams.WRAP_CONTENT; 19720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns tabView.setAllowCollapse(false); 19820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 19920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 20020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 20120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public View getTabContainer() { 20220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns return mTabContainer; 20320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 20420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 20520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns @Override 20620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public void onDraw(Canvas canvas) { 20720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (getWidth() == 0 || getHeight() == 0) { 20820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns return; 20920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 21020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 21120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (mIsSplit) { 21220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (mSplitBackground != null) { 21320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mSplitBackground.draw(canvas); 21420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 21520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } else { 21620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (mBackground != null) { 21720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mBackground.draw(canvas); 21820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 21920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (mStackedBackground != null && mIsStacked) { 22020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mStackedBackground.draw(canvas); 22120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 22220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 22320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 22420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 22520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns //@Override 22620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public ActionMode startActionModeForChild(View child, ActionMode.Callback callback) { 22720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns // No starting an action mode for an action bar child! (Where would it go?) 22820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns return null; 22920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 23020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 23120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns @Override 23220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 23320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns super.onMeasure(widthMeasureSpec, heightMeasureSpec); 23420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 23520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (mActionBarView == null) { 23620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns return; 23720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 23820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 23920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns final LayoutParams lp = (LayoutParams) mActionBarView.getLayoutParams(); 24020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns final int actionBarViewHeight = mActionBarView.isCollapsed() ? 0 : 24120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mActionBarView.getMeasuredHeight() + lp.topMargin + lp.bottomMargin; 24220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 24320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (mTabContainer != null && mTabContainer.getVisibility() != GONE) { 24420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns final int mode = MeasureSpec.getMode(heightMeasureSpec); 24520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (mode == MeasureSpec.AT_MOST) { 24620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns final int maxHeight = MeasureSpec.getSize(heightMeasureSpec); 24720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns setMeasuredDimension(getMeasuredWidth(), 24820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns Math.min(actionBarViewHeight + mTabContainer.getMeasuredHeight(), 24920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns maxHeight)); 25020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 25120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 25220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 25320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 25420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns @Override 25520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public void onLayout(boolean changed, int l, int t, int r, int b) { 25620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns super.onLayout(changed, l, t, r, b); 25720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 25820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns final boolean hasTabs = mTabContainer != null && mTabContainer.getVisibility() != GONE; 25920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 26020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (mTabContainer != null && mTabContainer.getVisibility() != GONE) { 26120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns final int containerHeight = getMeasuredHeight(); 26220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns final int tabHeight = mTabContainer.getMeasuredHeight(); 26320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 26420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if ((mActionBarView.getDisplayOptions() & ActionBar.DISPLAY_SHOW_HOME) == 0) { 26520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns // Not showing home, put tabs on top. 26620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns final int count = getChildCount(); 26720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns for (int i = 0; i < count; i++) { 26820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns final View child = getChildAt(i); 26920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 27020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (child == mTabContainer) { 27120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns continue; 27220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 27320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 27420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (!mActionBarView.isCollapsed()) { 27520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns child.offsetTopAndBottom(tabHeight); 27620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 27720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 27820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mTabContainer.layout(l, 0, r, tabHeight); 27920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } else { 28020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mTabContainer.layout(l, containerHeight - tabHeight, r, containerHeight); 28120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 28220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 28320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 28420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns boolean needsInvalidate = false; 28520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (mIsSplit) { 28620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (mSplitBackground != null) { 28720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mSplitBackground.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight()); 28820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns needsInvalidate = true; 28920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 29020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } else { 29120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (mBackground != null) { 29220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mBackground.setBounds(mActionBarView.getLeft(), mActionBarView.getTop(), 29320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mActionBarView.getRight(), mActionBarView.getBottom()); 29420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns needsInvalidate = true; 29520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 29620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if ((mIsStacked = hasTabs && mStackedBackground != null)) { 29720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mStackedBackground.setBounds(mTabContainer.getLeft(), mTabContainer.getTop(), 29820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns mTabContainer.getRight(), mTabContainer.getBottom()); 29920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns needsInvalidate = true; 30020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 30120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 30220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 30320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns if (needsInvalidate) { 30420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns invalidate(); 30520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 30620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 307bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell} 308