diff options
author | Adam Powell <adamp@google.com> | 2013-10-03 18:21:58 -0700 |
---|---|---|
committer | Adam Powell <adamp@google.com> | 2013-10-03 18:21:58 -0700 |
commit | da9710806bc7874b8c553f4daf9cf14f35ae1b07 (patch) | |
tree | 178d50d64c2a4adfd4a91760fbf114264288bd60 /core/java/com | |
parent | d6239b922901420b6855a7dad903632c85ccde68 (diff) | |
download | frameworks_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')
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); |