13a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn/*
23a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn * Copyright (C) 2012 The Android Open Source Project
33a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn *
43a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
53a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn * you may not use this file except in compliance with the License.
63a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn * You may obtain a copy of the License at
73a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn *
83a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
93a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn *
103a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn * Unless required by applicable law or agreed to in writing, software
113a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
123a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn * See the License for the specific language governing permissions and
143a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn * limitations under the License.
153a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn */
163a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
173a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackbornpackage com.android.internal.widget;
183a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
193a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackbornimport com.android.internal.app.ActionBarImpl;
203a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
213a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackbornimport android.content.Context;
223a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackbornimport android.content.res.TypedArray;
233a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackbornimport android.graphics.Rect;
243a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackbornimport android.util.AttributeSet;
25139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackbornimport android.util.Log;
263a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackbornimport android.view.View;
273a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackbornimport android.widget.FrameLayout;
283a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
293a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn/**
303a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn * Special layout for the containing of an overlay action bar (and its
313a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn * content) to correctly handle fitting system windows when the content
323a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn * has request that its layout ignore them.
333a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn */
343a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackbornpublic class ActionBarOverlayLayout extends FrameLayout {
353a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    private int mActionBarHeight;
363a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    private ActionBarImpl mActionBar;
373a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    private int mWindowVisibility = View.VISIBLE;
383a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    private View mContent;
393a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    private View mActionBarTop;
403a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    private ActionBarContainer mContainerView;
413a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    private ActionBarView mActionView;
423a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    private View mActionBarBottom;
433a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    private int mLastSystemUiVisibility;
443a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    private final Rect mZeroRect = new Rect(0, 0, 0, 0);
453a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
463a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    static final int[] mActionBarSizeAttr = new int [] {
473a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            com.android.internal.R.attr.actionBarSize
483a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    };
493a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
503a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    public ActionBarOverlayLayout(Context context) {
513a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        super(context);
523a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        init(context);
533a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    }
543a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
553a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    public ActionBarOverlayLayout(Context context, AttributeSet attrs) {
563a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        super(context, attrs);
573a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        init(context);
583a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    }
593a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
603a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    private void init(Context context) {
613a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        TypedArray ta = getContext().getTheme().obtainStyledAttributes(mActionBarSizeAttr);
623a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        mActionBarHeight = ta.getDimensionPixelSize(0, 0);
633a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        ta.recycle();
643a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    }
653a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
663a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    public void setActionBar(ActionBarImpl impl) {
673a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        mActionBar = impl;
683a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        if (getWindowToken() != null) {
693a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            // This is being initialized after being added to a window;
703a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            // make sure to update all state now.
713a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            mActionBar.setWindowVisibility(mWindowVisibility);
723a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            if (mLastSystemUiVisibility != 0) {
733a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn                int newVis = mLastSystemUiVisibility;
743a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn                onWindowSystemUiVisibilityChanged(newVis);
753a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn                requestFitSystemWindows();
763a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            }
773a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        }
783a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    }
793a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
80139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn    public void setShowingForActionMode(boolean showing) {
81139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn        if (showing) {
82139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn            // Here's a fun hack: if the status bar is currently being hidden,
83139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn            // and the application has asked for stable content insets, then
84139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn            // we will end up with the action mode action bar being shown
85139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn            // without the status bar, but moved below where the status bar
86139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn            // would be.  Not nice.  Trying to have this be positioned
87139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn            // correctly is not easy (basically we need yet *another* content
88139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn            // inset from the window manager to know where to put it), so
89139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn            // instead we will just temporarily force the status bar to be shown.
90139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn            if ((getWindowSystemUiVisibility() & (SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
91139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn                    | SYSTEM_UI_FLAG_LAYOUT_STABLE))
92139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn                    == (SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | SYSTEM_UI_FLAG_LAYOUT_STABLE)) {
93139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn                setDisabledSystemUiVisibility(SYSTEM_UI_FLAG_FULLSCREEN);
94139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn            }
95139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn        } else {
96139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn            setDisabledSystemUiVisibility(0);
97139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn        }
98139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn    }
99139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn
1003a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    @Override
1013a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    public void onWindowSystemUiVisibilityChanged(int visible) {
1023a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        super.onWindowSystemUiVisibilityChanged(visible);
1033a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        pullChildren();
1043a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        final int diff = mLastSystemUiVisibility ^ visible;
1053a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        mLastSystemUiVisibility = visible;
1063a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        final boolean barVisible = (visible&SYSTEM_UI_FLAG_FULLSCREEN) == 0;
107139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn        final boolean wasVisible = mActionBar != null ? mActionBar.isSystemShowing() : true;
108139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn        if (mActionBar != null) {
109139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn            if (barVisible) mActionBar.showForSystem();
110139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn            else mActionBar.hideForSystem();
111139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn        }
112139e5aa1da51b27231ab36344cf2d0dafab23f1eDianne Hackborn        if ((diff&SYSTEM_UI_FLAG_LAYOUT_STABLE) != 0) {
1133a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            if (mActionBar != null) {
1143a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn                requestFitSystemWindows();
1153a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            }
1163a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        }
1173a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    }
1183a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
1193a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    @Override
1203a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    protected void onWindowVisibilityChanged(int visibility) {
1213a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        super.onWindowVisibilityChanged(visibility);
1223a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        mWindowVisibility = visibility;
1233a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        if (mActionBar != null) {
1243a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            mActionBar.setWindowVisibility(visibility);
1253a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        }
1263a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    }
1273a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
1283a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    private boolean applyInsets(View view, Rect insets, boolean left, boolean top,
1293a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            boolean bottom, boolean right) {
1303a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        boolean changed = false;
1313a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams)view.getLayoutParams();
1323a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        if (left && lp.leftMargin != insets.left) {
1333a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            changed = true;
1343a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            lp.leftMargin = insets.left;
1353a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        }
1363a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        if (top && lp.topMargin != insets.top) {
1373a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            changed = true;
1383a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            lp.topMargin = insets.top;
1393a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        }
1403a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        if (right && lp.rightMargin != insets.right) {
1413a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            changed = true;
1423a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            lp.rightMargin = insets.right;
1433a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        }
1443a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        if (bottom && lp.bottomMargin != insets.bottom) {
1453a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            changed = true;
1463a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            lp.bottomMargin = insets.bottom;
1473a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        }
1483a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        return changed;
1493a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    }
1503a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
1513a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    @Override
1523a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    protected boolean fitSystemWindows(Rect insets) {
1533a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        pullChildren();
1543a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
1553a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        final int vis = getWindowSystemUiVisibility();
1563a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        final boolean stable = (vis & SYSTEM_UI_FLAG_LAYOUT_STABLE) != 0;
1573a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
1583a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        // The top and bottom action bars are always within the content area.
1593a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        boolean changed = applyInsets(mActionBarTop, insets, true, true, false, true);
160fe2b7ccca4c5fdaa0d77968b897bd789f4c87c30Dianne Hackborn        if (mActionBarBottom != null) {
161fe2b7ccca4c5fdaa0d77968b897bd789f4c87c30Dianne Hackborn            changed |= applyInsets(mActionBarBottom, insets, true, false, true, true);
162fe2b7ccca4c5fdaa0d77968b897bd789f4c87c30Dianne Hackborn        }
1633a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
1643a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        // If the window has not requested system UI layout flags, we need to
1653a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        // make sure its content is not being covered by system UI...  though it
1663a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        // will still be covered by the action bar since they have requested it to
1673a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        // overlay.
1683a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        if ((vis & SYSTEM_UI_LAYOUT_FLAGS) == 0) {
1693a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            changed |= applyInsets(mContent, insets, true, true, true, true);
1703a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            // The insets are now consumed.
1713a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            insets.set(0, 0, 0, 0);
1723a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        } else {
1733a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            changed |= applyInsets(mContent, mZeroRect, true, true, true, true);
1743a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        }
1753a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
1763a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
1773a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        if (stable || mActionBarTop.getVisibility() == VISIBLE) {
1783a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            // The action bar creates additional insets for its content to use.
1793a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            insets.top += mActionBarHeight;
1803a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        }
1813a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
1823a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        if (mActionBar != null && mActionBar.hasNonEmbeddedTabs()) {
1833a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            View tabs = mContainerView.getTabContainer();
1843a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            if (stable || (tabs != null && tabs.getVisibility() == VISIBLE)) {
1853a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn                // If tabs are not embedded, adjust insets to account for them.
1863a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn                insets.top += mActionBarHeight;
1873a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            }
1883a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        }
1893a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
1903a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        if (mActionView.isSplitActionBar()) {
1913a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            if (stable || (mActionBarBottom != null
1923a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn                    && mActionBarBottom.getVisibility() == VISIBLE)) {
1933a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn                // If action bar is split, adjust buttom insets for it.
1943a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn                insets.bottom += mActionBarHeight;
1953a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            }
1963a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        }
1973a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
1983a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        if (changed) {
1993a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            requestLayout();
2003a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        }
2013a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
2023a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        return super.fitSystemWindows(insets);
2033a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    }
2043a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn
2053a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    void pullChildren() {
2063a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        if (mContent == null) {
2073a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            mContent = findViewById(com.android.internal.R.id.content);
2083a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            mActionBarTop = findViewById(com.android.internal.R.id.top_action_bar);
2093a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            mContainerView = (ActionBarContainer)findViewById(
2103a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn                    com.android.internal.R.id.action_bar_container);
2113a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            mActionView = (ActionBarView) findViewById(com.android.internal.R.id.action_bar);
2123a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn            mActionBarBottom = findViewById(com.android.internal.R.id.split_action_bar);
2133a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn        }
2143a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn    }
2153a3a6cfd8ec12208ca75c0d0d871d19d76c34194Dianne Hackborn}
216