diff options
| author | 2011-06-09 20:49:49 -0700 | |
|---|---|---|
| committer | 2011-06-09 21:01:56 -0700 | |
| commit | 1ab418a222e1834c4b1312fde355e41a1947af0d (patch) | |
| tree | 17b9758e9896c71a73c0646f1f6d415a28651f67 | |
| parent | aab49b40e8dd78aca67db160f5d0c787379c8f7f (diff) | |
Refine the behavior of split action bars.
Change-Id: I27212c7554025433ee366f0766971f0092b26d67
4 files changed, 48 insertions, 25 deletions
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java index dda3be6f1105..c3b1098964e5 100644 --- a/core/java/com/android/internal/app/ActionBarImpl.java +++ b/core/java/com/android/internal/app/ActionBarImpl.java @@ -368,7 +368,7 @@ public class ActionBarImpl extends ActionBar { mode.invalidate(); mContextView.initForMode(mode); animateToMode(true); - if (mSplitView != null) { + if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) { // TODO animate this mSplitView.setVisibility(View.VISIBLE); } @@ -526,7 +526,7 @@ public class ActionBarImpl extends ActionBar { mContainerView.setTranslationY(-mContainerView.getHeight()); b.with(ObjectAnimator.ofFloat(mContainerView, "translationY", 0)); } - if (mSplitView != null) { + if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) { mSplitView.setAlpha(0); b.with(ObjectAnimator.ofFloat(mSplitView, "alpha", 1)); } @@ -560,7 +560,7 @@ public class ActionBarImpl extends ActionBar { b.with(ObjectAnimator.ofFloat(mContainerView, "translationY", -mContainerView.getHeight())); } - if (mSplitView != null) { + if (mSplitView != null && mSplitView.getVisibility() == View.VISIBLE) { mSplitView.setAlpha(1); b.with(ObjectAnimator.ofFloat(mSplitView, "alpha", 0)); } diff --git a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java index 91dd7e36f7ba..98c2747a6573 100644 --- a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java +++ b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java @@ -39,10 +39,13 @@ public class ActionMenuPresenter extends BaseMenuPresenter { private View mOverflowButton; private boolean mReserveOverflow; + private boolean mReserveOverflowSet; private int mWidthLimit; private int mActionItemWidthLimit; private int mMaxItems; + private boolean mMaxItemsSet; private boolean mStrictWidthLimit; + private boolean mWidthLimitSet; // Group IDs that have been added as actions - used temporarily, allocated here for reuse. private final SparseBooleanArray mActionButtonGroups = new SparseBooleanArray(); @@ -64,14 +67,21 @@ public class ActionMenuPresenter extends BaseMenuPresenter { super.initForMenu(context, menu); final Resources res = context.getResources(); - final int screen = res.getConfiguration().screenLayout; - // TODO Use the no-buttons specifier instead here - mReserveOverflow = (screen & Configuration.SCREENLAYOUT_SIZE_MASK) == - Configuration.SCREENLAYOUT_SIZE_XLARGE; - mWidthLimit = res.getDisplayMetrics().widthPixels / 2; + + if (!mReserveOverflowSet) { + // TODO Use the no-buttons specifier instead here + mReserveOverflow = res.getConfiguration() + .isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE); + } + + if (!mWidthLimitSet) { + mWidthLimit = res.getDisplayMetrics().widthPixels / 2; + } // Measure for initial configuration - mMaxItems = res.getInteger(com.android.internal.R.integer.max_action_buttons); + if (!mMaxItemsSet) { + mMaxItems = res.getInteger(com.android.internal.R.integer.max_action_buttons); + } int width = mWidthLimit; if (mReserveOverflow) { @@ -92,15 +102,19 @@ public class ActionMenuPresenter extends BaseMenuPresenter { } public void setWidthLimit(int width, boolean strict) { - if (mReserveOverflow) { - width -= mOverflowButton.getMeasuredWidth(); - } - mActionItemWidthLimit = width; + mWidthLimit = width; mStrictWidthLimit = strict; + mWidthLimitSet = true; + } + + public void setReserveOverflow(boolean reserveOverflow) { + mReserveOverflow = reserveOverflow; + mReserveOverflowSet = true; } public void setItemLimit(int itemCount) { mMaxItems = itemCount; + mMaxItemsSet = true; } @Override diff --git a/core/java/com/android/internal/widget/ActionBarContextView.java b/core/java/com/android/internal/widget/ActionBarContextView.java index e4c4989fbe22..fc439944f518 100644 --- a/core/java/com/android/internal/widget/ActionBarContextView.java +++ b/core/java/com/android/internal/widget/ActionBarContextView.java @@ -168,14 +168,14 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi final MenuBuilder menu = (MenuBuilder) mode.getMenu(); mActionMenuPresenter = new ActionMenuPresenter(); - menu.addMenuPresenter(mActionMenuPresenter); - mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); + mActionMenuPresenter.setReserveOverflow(true); final LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); - mMenuView.setLayoutParams(layoutParams); if (mSplitView == null) { - addView(mMenuView); + menu.addMenuPresenter(mActionMenuPresenter); + mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); + addView(mMenuView, layoutParams); } else { // Allow full screen width in split mode. mActionMenuPresenter.setWidthLimit( @@ -184,7 +184,10 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi mActionMenuPresenter.setItemLimit(Integer.MAX_VALUE); // Span the whole width layoutParams.width = LayoutParams.MATCH_PARENT; - mSplitView.addView(mMenuView); + layoutParams.height = mContentHeight; + menu.addMenuPresenter(mActionMenuPresenter); + mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); + mSplitView.addView(mMenuView, layoutParams); } mAnimateInOnLayout = true; diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java index eb97ea8b2176..55849e577f80 100644 --- a/core/java/com/android/internal/widget/ActionBarView.java +++ b/core/java/com/android/internal/widget/ActionBarView.java @@ -327,15 +327,15 @@ public class ActionBarView extends AbsActionBarView { mActionMenuPresenter.setCallback(cb); mExpandedMenuPresenter = new ExpandedActionViewMenuPresenter(); } - builder.addMenuPresenter(mActionMenuPresenter); - builder.addMenuPresenter(mExpandedMenuPresenter); - final ActionMenuView menuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); + ActionMenuView menuView; final LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); - menuView.setLayoutParams(layoutParams); if (!mSplitActionBar) { - addView(menuView); + builder.addMenuPresenter(mActionMenuPresenter); + builder.addMenuPresenter(mExpandedMenuPresenter); + menuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); + addView(menuView, layoutParams); } else { // Allow full screen width in split mode. mActionMenuPresenter.setWidthLimit( @@ -344,9 +344,15 @@ public class ActionBarView extends AbsActionBarView { mActionMenuPresenter.setItemLimit(Integer.MAX_VALUE); // Span the whole width layoutParams.width = LayoutParams.MATCH_PARENT; + builder.addMenuPresenter(mActionMenuPresenter); + builder.addMenuPresenter(mExpandedMenuPresenter); + menuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); if (mSplitView != null) { - mSplitView.addView(menuView); - } // We'll add this later if we missed it this time. + mSplitView.addView(menuView, layoutParams); + } else { + // We'll add this later if we missed it this time. + menuView.setLayoutParams(layoutParams); + } } mMenuView = menuView; } |