From 76889f3482d6391b17f0961f7356c1e8169c8813 Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Tue, 8 May 2012 22:22:52 -0700 Subject: [PATCH] Forgive me monkeys, for I have sinned. It has been several hours since my last commit. Fix an obscure bug that could cause call ordering problems while updating ListAdapter-based MenuPresenters. This would trigger an inconsistent return value from the adapter's getCount method that didn't take the expanded menu item into account, resulting in the infamous ListView "you didn't call notifyDataSetChanged" exception. Bug 6412318 Change-Id: I6262846d9c2acdb87ff99116ad78ca4a388efa6d --- .../com/android/internal/view/menu/ListMenuPresenter.java | 8 +++----- .../com/android/internal/view/menu/MenuPopupHelper.java | 8 +++----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/core/java/com/android/internal/view/menu/ListMenuPresenter.java b/core/java/com/android/internal/view/menu/ListMenuPresenter.java index a331bec53dc40..b3e2d2769f235 100644 --- a/core/java/com/android/internal/view/menu/ListMenuPresenter.java +++ b/core/java/com/android/internal/view/menu/ListMenuPresenter.java @@ -220,7 +220,6 @@ public class ListMenuPresenter implements MenuPresenter, AdapterView.OnItemClick private int mExpandedIndex = -1; public MenuAdapter() { - registerDataSetObserver(new ExpandedIndexObserver()); findExpandedIndex(); } @@ -273,12 +272,11 @@ public class ListMenuPresenter implements MenuPresenter, AdapterView.OnItemClick } mExpandedIndex = -1; } - } - private class ExpandedIndexObserver extends DataSetObserver { @Override - public void onChanged() { - mAdapter.findExpandedIndex(); + public void notifyDataSetChanged() { + findExpandedIndex(); + super.notifyDataSetChanged(); } } } diff --git a/core/java/com/android/internal/view/menu/MenuPopupHelper.java b/core/java/com/android/internal/view/menu/MenuPopupHelper.java index 329b457b56c98..cacc86b0f3d9e 100644 --- a/core/java/com/android/internal/view/menu/MenuPopupHelper.java +++ b/core/java/com/android/internal/view/menu/MenuPopupHelper.java @@ -307,7 +307,6 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On public MenuAdapter(MenuBuilder menu) { mAdapterMenu = menu; - registerDataSetObserver(new ExpandedIndexObserver()); findExpandedIndex(); } @@ -363,12 +362,11 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On } mExpandedIndex = -1; } - } - private class ExpandedIndexObserver extends DataSetObserver { @Override - public void onChanged() { - mAdapter.findExpandedIndex(); + public void notifyDataSetChanged() { + findExpandedIndex(); + super.notifyDataSetChanged(); } } }