summaryrefslogtreecommitdiffstats
path: root/core/java/com
diff options
context:
space:
mode:
authorAdam Powell <adamp@google.com>2013-10-03 18:21:58 -0700
committerAdam Powell <adamp@google.com>2013-10-03 18:21:58 -0700
commitda9710806bc7874b8c553f4daf9cf14f35ae1b07 (patch)
tree178d50d64c2a4adfd4a91760fbf114264288bd60 /core/java/com
parentd6239b922901420b6855a7dad903632c85ccde68 (diff)
downloadframeworks_base-da9710806bc7874b8c553f4daf9cf14f35ae1b07.zip
frameworks_base-da9710806bc7874b8c553f4daf9cf14f35ae1b07.tar.gz
frameworks_base-da9710806bc7874b8c553f4daf9cf14f35ae1b07.tar.bz2
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
Diffstat (limited to 'core/java/com')
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuPresenter.java2
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuView.java5
-rw-r--r--core/java/com/android/internal/view/menu/MenuBuilder.java5
3 files changed, 8 insertions, 4 deletions
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 @@ public class ActionMenuPresenter extends BaseMenuPresenter
}
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.ViewDebug;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.widget.LinearLayout;
+import com.android.internal.R;
/**
* @hide
@@ -101,7 +100,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
// 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 @@ public class MenuBuilder implements Menu {
* 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 @@ public class MenuBuilder implements Menu {
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);