diff --git a/core/java/com/android/internal/view/menu/ActionMenuItemView.java b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
index e24596001f9c0..a10d241ef4e4b 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
@@ -18,6 +18,7 @@ package com.android.internal.view.menu;
import android.content.Context;
import android.content.res.Resources;
+import android.content.res.TypedArray;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
@@ -46,8 +47,8 @@ public class ActionMenuItemView extends LinearLayout
private ImageButton mImageButton;
private Button mTextButton;
private boolean mAllowTextWithIcon;
- private boolean mShowTextAllCaps;
private boolean mExpandedFormat;
+ private int mMinWidth;
public ActionMenuItemView(Context context) {
this(context, null);
@@ -62,7 +63,11 @@ public class ActionMenuItemView extends LinearLayout
final Resources res = context.getResources();
mAllowTextWithIcon = res.getBoolean(
com.android.internal.R.bool.config_allowActionMenuItemTextWithIcon);
- mShowTextAllCaps = res.getBoolean(com.android.internal.R.bool.config_actionMenuItemAllCaps);
+ TypedArray a = context.obtainStyledAttributes(attrs,
+ com.android.internal.R.styleable.ActionMenuItemView, 0, 0);
+ mMinWidth = a.getDimensionPixelSize(
+ com.android.internal.R.styleable.ActionMenuItemView_minWidth, 0);
+ a.recycle();
}
@Override
@@ -228,4 +233,21 @@ public class ActionMenuItemView extends LinearLayout
cheatSheet.show();
return true;
}
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+ final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+ final int specSize = MeasureSpec.getSize(widthMeasureSpec);
+ final int oldMeasuredWidth = getMeasuredWidth();
+ final int targetWidth = widthMode == MeasureSpec.AT_MOST ? Math.min(specSize, mMinWidth)
+ : mMinWidth;
+
+ if (widthMode != MeasureSpec.EXACTLY && mMinWidth > 0 && oldMeasuredWidth < targetWidth) {
+ // Remeasure at exactly the minimum width.
+ super.onMeasure(MeasureSpec.makeMeasureSpec(targetWidth, MeasureSpec.EXACTLY),
+ heightMeasureSpec);
+ }
+ }
}
diff --git a/core/java/com/android/internal/view/menu/BaseMenuPresenter.java b/core/java/com/android/internal/view/menu/BaseMenuPresenter.java
index 1e06b5a601f38..db0d6dd48090c 100644
--- a/core/java/com/android/internal/view/menu/BaseMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/BaseMenuPresenter.java
@@ -91,7 +91,14 @@ public abstract class BaseMenuPresenter implements MenuPresenter {
MenuItemImpl item = visibleItems.get(i);
if (shouldIncludeItem(childIndex, item)) {
final View convertView = parent.getChildAt(childIndex);
+ final MenuItemImpl oldItem = convertView instanceof MenuView.ItemView ?
+ ((MenuView.ItemView) convertView).getItemData() : null;
final View itemView = getItemView(item, convertView, parent);
+ if (item != oldItem) {
+ // Don't let old states linger with new data.
+ itemView.setPressed(false);
+ itemView.jumpDrawablesToCurrentState();
+ }
if (itemView != convertView) {
addItemView(itemView, childIndex);
}
diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java
index e131242a78238..4714be8df3d9f 100644
--- a/core/java/com/android/internal/widget/ActionBarView.java
+++ b/core/java/com/android/internal/widget/ActionBarView.java
@@ -518,6 +518,7 @@ public class ActionBarView extends AbsActionBarView {
public void setHomeButtonEnabled(boolean enable) {
mHomeLayout.setEnabled(enable);
+ mHomeLayout.setFocusable(enable);
// Make sure the home button has an accurate content description for accessibility.
if (!enable) {
mHomeLayout.setContentDescription(null);
diff --git a/core/res/res/values-sw600dp/dimens.xml b/core/res/res/values-sw600dp/dimens.xml
index 5dacb442e2ca5..db94884729ef6 100644
--- a/core/res/res/values-sw600dp/dimens.xml
+++ b/core/res/res/values-sw600dp/dimens.xml
@@ -54,5 +54,7 @@
-4dp
+
+ 64dip
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 65e11b4be4175..936482dfa2ade 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2394,6 +2394,10 @@
+
+
+
+
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index dfd8306c0bc59..607054ab0507c 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -189,4 +189,7 @@
8dp
8dp
8dp
+
+
+ 56dip
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index a4bdf2374a51d..924695404f735 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -1161,8 +1161,9 @@ please see styles_device_defaults.xml.
- ?android:attr/actionBarItemBackground
- 12dip
- 12dip
- - 56dip
+ - @android:dimen/action_button_min_width
- ?android:attr/actionBarSize
+ - center