summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorAdam Powell <adamp@google.com>2011-01-24 21:44:28 -0800
committerAdam Powell <adamp@google.com>2011-01-24 21:45:37 -0800
commit1821ff9022f0ea5f5c5d82a96a05f46192d50c26 (patch)
treec8f45357783dec46a04b2e920ba819eb7f8a18e5 /core
parent68b29902c0832d78a6557f915168694f35b7ca8e (diff)
downloadframeworks_base-1821ff9022f0ea5f5c5d82a96a05f46192d50c26.zip
frameworks_base-1821ff9022f0ea5f5c5d82a96a05f46192d50c26.tar.gz
frameworks_base-1821ff9022f0ea5f5c5d82a96a05f46192d50c26.tar.bz2
Fix bug 3178934 - Make MenuBuilder notify its adapters of changes
Change-Id: I28603afbdfdd913aa06f3a07065e27aff1dc524b
Diffstat (limited to 'core')
-rw-r--r--core/java/com/android/internal/view/menu/MenuBuilder.java34
1 files changed, 27 insertions, 7 deletions
diff --git a/core/java/com/android/internal/view/menu/MenuBuilder.java b/core/java/com/android/internal/view/menu/MenuBuilder.java
index ff59950..14d0ac5 100644
--- a/core/java/com/android/internal/view/menu/MenuBuilder.java
+++ b/core/java/com/android/internal/view/menu/MenuBuilder.java
@@ -215,6 +215,11 @@ public class MenuBuilder implements Menu {
private ViewGroup mMeasureActionButtonParent;
+ private final WeakReference<MenuAdapter>[] mAdapterCache =
+ new WeakReference[NUM_TYPES];
+ private final WeakReference<OverflowMenuAdapter>[] mOverflowAdapterCache =
+ new WeakReference[NUM_TYPES];
+
// Group IDs that have been added as actions - used temporarily, allocated here for reuse.
private final SparseBooleanArray mActionButtonGroups = new SparseBooleanArray();
@@ -1004,6 +1009,12 @@ public class MenuBuilder implements Menu {
MenuView menuView = menuTypes[i].mMenuView.get();
menuView.updateChildren(cleared);
}
+
+ MenuAdapter adapter = mAdapterCache[i] == null ? null : mAdapterCache[i].get();
+ if (adapter != null) adapter.notifyDataSetChanged();
+
+ adapter = mOverflowAdapterCache[i] == null ? null : mOverflowAdapterCache[i].get();
+ if (adapter != null) adapter.notifyDataSetChanged();
}
}
}
@@ -1358,7 +1369,13 @@ public class MenuBuilder implements Menu {
* @return A {@link MenuAdapter} for this menu with the given menu type.
*/
public MenuAdapter getMenuAdapter(int menuType) {
- return new MenuAdapter(menuType);
+ MenuAdapter adapter = mAdapterCache[menuType] == null ?
+ null : mAdapterCache[menuType].get();
+ if (adapter != null) return adapter;
+
+ adapter = new MenuAdapter(menuType);
+ mAdapterCache[menuType] = new WeakReference<MenuAdapter>(adapter);
+ return adapter;
}
/**
@@ -1368,7 +1385,13 @@ public class MenuBuilder implements Menu {
* @return A {@link MenuAdapter} for this menu with the given menu type.
*/
public MenuAdapter getOverflowMenuAdapter(int menuType) {
- return new OverflowMenuAdapter(menuType);
+ OverflowMenuAdapter adapter = mOverflowAdapterCache[menuType] == null ?
+ null : mOverflowAdapterCache[menuType].get();
+ if (adapter != null) return adapter;
+
+ adapter = new OverflowMenuAdapter(menuType);
+ mOverflowAdapterCache[menuType] = new WeakReference<OverflowMenuAdapter>(adapter);
+ return adapter;
}
void setOptionalIconsVisible(boolean visible) {
@@ -1469,21 +1492,18 @@ public class MenuBuilder implements Menu {
* source for overflow menu items that do not fit in the list of action items.
*/
private class OverflowMenuAdapter extends MenuAdapter {
- private ArrayList<MenuItemImpl> mOverflowItems;
-
public OverflowMenuAdapter(int menuType) {
super(menuType);
- mOverflowItems = getNonActionItems(true);
}
@Override
public MenuItemImpl getItem(int position) {
- return mOverflowItems.get(position);
+ return getNonActionItems(true).get(position);
}
@Override
public int getCount() {
- return mOverflowItems.size();
+ return getNonActionItems(true).size();
}
}
}