OSDN Git Service

Fix action menu visibility callbacks for nested popups
authorAdam Powell <adamp@google.com>
Sat, 2 Nov 2013 01:22:11 +0000 (18:22 -0700)
committerAdam Powell <adamp@google.com>
Sat, 2 Nov 2013 01:22:11 +0000 (18:22 -0700)
When opening a submenu from a popup in ActionMenuPresenter, delegate
the submenu callbacks to the presenter callback registered on the
ActionMenuPresenter. This allows menu visibility callbacks to
propagate properly so that apps that hide their action bars after a
timeout can detect open menus that are deeply nested.

Bug 11429613

Change-Id: I3332886f08d4f9010f0875057c457566301d12ec

core/java/com/android/internal/view/menu/ActionMenuPresenter.java
core/java/com/android/internal/view/menu/BaseMenuPresenter.java

index 44e7ec1..4654178 100644 (file)
@@ -721,7 +721,8 @@ public class ActionMenuPresenter extends BaseMenuPresenter
             if (subMenu == null) return false;
 
             mOpenSubMenuId = ((SubMenuBuilder) subMenu).getItem().getItemId();
-            return false;
+            final MenuPresenter.Callback cb = getCallback();
+            return cb != null ? cb.onOpenSubMenu(subMenu) : false;
         }
 
         @Override
@@ -729,6 +730,10 @@ public class ActionMenuPresenter extends BaseMenuPresenter
             if (menu instanceof SubMenuBuilder) {
                 ((SubMenuBuilder) menu).getRootMenu().close(false);
             }
+            final MenuPresenter.Callback cb = getCallback();
+            if (cb != null) {
+                cb.onCloseMenu(menu, allMenusAreClosing);
+            }
         }
     }
 
index db0d6dd..92e9ea6 100644 (file)
@@ -144,6 +144,10 @@ public abstract class BaseMenuPresenter implements MenuPresenter {
         mCallback = cb;
     }
 
+    public Callback getCallback() {
+        return mCallback;
+    }
+
     /**
      * Create a new item view that can be re-bound to other item data later.
      *