Fix bug 3240444 - add OnMenuVisibilityListener for action bar.

Fix bug 3180015 - leaking window handles on configuration change for
action bar dropdown menus

Rename ActionBar.NavigationCallback to something more consistent with
the rest of the API.

Change-Id: Ic1fb4c07484c57a72649b30e27d220b18cda6cdf
diff --git a/core/java/com/android/internal/view/menu/MenuPopupHelper.java b/core/java/com/android/internal/view/menu/MenuPopupHelper.java
index 1406e4e..2cb78a5 100644
--- a/core/java/com/android/internal/view/menu/MenuPopupHelper.java
+++ b/core/java/com/android/internal/view/menu/MenuPopupHelper.java
@@ -35,7 +35,7 @@
  * @hide
  */
 public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.OnKeyListener,
-        ViewTreeObserver.OnGlobalLayoutListener {
+        ViewTreeObserver.OnGlobalLayoutListener, PopupWindow.OnDismissListener {
     private static final String TAG = "MenuPopupHelper";
 
     private Context mContext;
@@ -46,12 +46,6 @@
     private boolean mOverflowOnly;
     private ViewTreeObserver mTreeObserver;
 
-    private PopupWindow.OnDismissListener mDismissListener = new PopupWindow.OnDismissListener() {
-        public void onDismiss() {
-            mPopup = null;
-        }
-    };
-
     public MenuPopupHelper(Context context, MenuBuilder menu) {
         this(context, menu, null, false);
     }
@@ -77,7 +71,7 @@
     public void show() {
         mPopup = new ListPopupWindow(mContext, null, com.android.internal.R.attr.popupMenuStyle);
         mPopup.setOnItemClickListener(this);
-        mPopup.setOnDismissListener(mDismissListener);
+        mPopup.setOnDismissListener(this);
 
         final MenuAdapter adapter = mOverflowOnly ?
                 mMenu.getOverflowMenuAdapter(MenuBuilder.TYPE_POPUP) :
@@ -110,8 +104,12 @@
         if (isShowing()) {
             mPopup.dismiss();
         }
+    }
+
+    public void onDismiss() {
+        mPopup = null;
         if (mTreeObserver != null) {
-            mTreeObserver.removeGlobalOnLayoutListener(this);
+            mTreeObserver.removeGlobalOnLayoutListener(MenuPopupHelper.this);
             mTreeObserver = null;
         }
     }