Fix a bug in action menu measurement
Thanks to a measurement optimization in KK, the view recycling
behavior of ActionMenuPresenter could get into a state where the
resulting ActionMenuView had changed but no layout was
requested. Explicitly request a layout during menu update. Also fix an
ancient typo.
Bug 11047996
Change-Id: I6289fd2d142ac7d2101fbec6de19b7d3d7fbd6a2
diff --git a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
index 6471e14..23ed019 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
@@ -216,6 +216,8 @@
}
super.updateMenuView(cleared);
+ ((View) mMenuView).requestLayout();
+
if (mMenu != null) {
final ArrayList<MenuItemImpl> actionItems = mMenu.getActionItems();
final int count = actionItems.size();
diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java
index 34ade74..16a2031 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuView.java
@@ -15,8 +15,6 @@
*/
package com.android.internal.view.menu;
-import com.android.internal.R;
-
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.TypedArray;
@@ -27,6 +25,7 @@
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.widget.LinearLayout;
+import com.android.internal.R;
/**
* @hide
@@ -101,7 +100,7 @@
// Special formatting can change whether items can fit as action buttons.
// Kick the menu and update presenters when this changes.
- final int widthSize = MeasureSpec.getMode(widthMeasureSpec);
+ final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
if (mFormatItems && mMenu != null && widthSize != mFormatItemsWidth) {
mFormatItemsWidth = widthSize;
mMenu.onItemsChanged(true);
diff --git a/core/java/com/android/internal/view/menu/MenuBuilder.java b/core/java/com/android/internal/view/menu/MenuBuilder.java
index 458ea2f..aff697a 100644
--- a/core/java/com/android/internal/view/menu/MenuBuilder.java
+++ b/core/java/com/android/internal/view/menu/MenuBuilder.java
@@ -1034,6 +1034,10 @@
* to avoid inadvertent reordering that may break the app's intended design.
*/
public void flagActionItems() {
+ // Important side effect: if getVisibleItems is stale it may refresh,
+ // which can affect action items staleness.
+ final ArrayList<MenuItemImpl> visibleItems = getVisibleItems();
+
if (!mIsActionItemsStale) {
return;
}
@@ -1052,7 +1056,6 @@
if (flagged) {
mActionItems.clear();
mNonActionItems.clear();
- ArrayList<MenuItemImpl> visibleItems = getVisibleItems();
final int itemsSize = visibleItems.size();
for (int i = 0; i < itemsSize; i++) {
MenuItemImpl item = visibleItems.get(i);