Refine the behavior of split action bars.
Change-Id: I27212c7554025433ee366f0766971f0092b26d67
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java
index dda3be6..c3b1098 100644
--- a/core/java/com/android/internal/app/ActionBarImpl.java
+++ b/core/java/com/android/internal/app/ActionBarImpl.java
@@ -368,7 +368,7 @@
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 @@
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 @@
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 91dd7e36..98c2747 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 @@
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 @@
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 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 e4c4989..fc43994 100644
--- a/core/java/com/android/internal/widget/ActionBarContextView.java
+++ b/core/java/com/android/internal/widget/ActionBarContextView.java
@@ -168,14 +168,14 @@
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 @@
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 eb97ea8..55849e5 100644
--- a/core/java/com/android/internal/widget/ActionBarView.java
+++ b/core/java/com/android/internal/widget/ActionBarView.java
@@ -327,15 +327,15 @@
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 @@
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;
}