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:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user