Dispatch the actual PopupWindow dismiss callback to PopupMenu

Previously the dismiss callback was called immediately after the menu
received a close request; however, the dismiss callback implies that
the menu's window has finished animating and been removed from the
window manager.

Also cleans up handling of mPopup in MenuPopupHelper to prevent
unnecessary MenuPopup allocations and convert unnecessary fields into
method arguments.

Bug: 25323707
Change-Id: I8e3877ae6c40b4d0f1df23a4ff4fa48a7df34e0d
This commit is contained in:
Alan Viverette
2015-11-20 15:21:30 -05:00
parent 67de49451e
commit 708aa9d964
3 changed files with 140 additions and 92 deletions

View File

@@ -937,10 +937,11 @@ public class ActionMenuPresenter extends BaseMenuPresenter
}
@Override
public void onDismiss() {
super.onDismiss();
protected void onDismiss() {
mMenu.close();
mOverflowPopup = null;
super.onDismiss();
}
}
@@ -959,10 +960,11 @@ public class ActionMenuPresenter extends BaseMenuPresenter
}
@Override
public void onDismiss() {
super.onDismiss();
protected void onDismiss() {
mActionButtonPopup = null;
mOpenSubMenuId = 0;
super.onDismiss();
}
}

View File

@@ -19,7 +19,6 @@ package android.widget;
import com.android.internal.R;
import com.android.internal.view.menu.MenuBuilder;
import com.android.internal.view.menu.MenuPopupHelper;
import com.android.internal.view.menu.MenuPresenter;
import com.android.internal.view.menu.ShowableListMenu;
import android.annotation.MenuRes;
@@ -45,7 +44,7 @@ public class PopupMenu {
private final MenuPopupHelper mPopup;
private OnMenuItemClickListener mMenuItemClickListener;
private OnDismissListener mDismissListener;
private OnDismissListener mOnDismissListener;
private OnTouchListener mDragListener;
/**
@@ -114,20 +113,13 @@ public class PopupMenu {
mPopup = new MenuPopupHelper(context, mMenu, anchor, false, popupStyleAttr, popupStyleRes);
mPopup.setGravity(gravity);
mPopup.setCallback(new MenuPresenter.Callback() {
mPopup.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
if (mDismissListener != null) {
mDismissListener.onDismiss(PopupMenu.this);
public void onDismiss() {
if (mOnDismissListener != null) {
mOnDismissListener.onDismiss(PopupMenu.this);
}
}
@Override
public boolean onOpenSubMenu(MenuBuilder subMenu) {
// The menu presenter will handle opening the submenu itself.
// Nothing to do here.
return false;
}
});
}
@@ -259,7 +251,7 @@ public class PopupMenu {
* @param listener the listener to notify
*/
public void setOnDismissListener(OnDismissListener listener) {
mDismissListener = listener;
mOnDismissListener = listener;
}
/**