Action bar context mode support for overflow, submenus
Change-Id: I951ae179698b08b6aba5b174b3d47f0cf847352e
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java
index f37021b..63dbdb4f 100644
--- a/core/java/com/android/internal/app/ActionBarImpl.java
+++ b/core/java/com/android/internal/app/ActionBarImpl.java
@@ -16,8 +16,10 @@
package com.android.internal.app;
-import com.android.internal.view.menu.ActionMenu;
-import com.android.internal.view.menu.ActionMenuItem;
+import com.android.internal.view.menu.MenuBuilder;
+import com.android.internal.view.menu.MenuItemImpl;
+import com.android.internal.view.menu.MenuPopupHelper;
+import com.android.internal.view.menu.SubMenuBuilder;
import com.android.internal.widget.ActionBarContextView;
import com.android.internal.widget.ActionBarView;
@@ -196,9 +198,7 @@
@Override
public void startContextMode(ContextModeCallback callback) {
- if (mContextMode != null) {
- mContextMode.finish();
- }
+ finishContextMode();
// Don't wait for the close context mode animation to finish.
if (mClosingContext) {
@@ -207,15 +207,16 @@
mCloseContext.run();
}
- mContextMode = new ContextMode(callback);
- if (callback.onCreateContextMode(mContextMode, mContextMode.getMenu())) {
- mContextMode.invalidate();
- mUpperContextView.initForMode(mContextMode);
+ ContextMode mode = new ContextMode(callback);
+ if (callback.onCreateContextMode(mode, mode.getMenu())) {
+ mode.invalidate();
+ mUpperContextView.initForMode(mode);
mAnimatorView.setDisplayedChild(CONTEXT_VIEW);
if (mLowerContextView != null) {
// TODO animate this
mLowerContextView.setVisibility(View.VISIBLE);
}
+ mContextMode = mode;
}
}
@@ -336,14 +337,15 @@
/**
* @hide
*/
- public class ContextMode extends ActionBar.ContextMode {
+ public class ContextMode extends ActionBar.ContextMode implements MenuBuilder.Callback {
private ContextModeCallback mCallback;
- private ActionMenu mMenu;
+ private MenuBuilder mMenu;
private WeakReference<View> mCustomView;
public ContextMode(ContextModeCallback callback) {
mCallback = callback;
- mMenu = new ActionMenu(mActionView.getContext());
+ mMenu = new MenuBuilder(mActionView.getContext());
+ mMenu.setCallback(this);
}
@Override
@@ -405,12 +407,27 @@
return mCustomView != null ? mCustomView.get() : null;
}
- public void dispatchOnContextItemClicked(MenuItem item) {
- ActionMenuItem actionItem = (ActionMenuItem) item;
- if (!actionItem.invoke()) {
- mCallback.onContextItemClicked(this, item);
+ public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {
+ return mCallback.onContextItemClicked(this, item);
+ }
+
+ public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
+ }
+
+ public boolean onSubMenuSelected(SubMenuBuilder subMenu) {
+ if (!subMenu.hasVisibleItems()) {
+ return true;
}
- }
+
+ new MenuPopupHelper(mActivity, subMenu).show();
+ return true;
+ }
+
+ public void onCloseSubMenu(SubMenuBuilder menu) {
+ }
+
+ public void onMenuModeChange(MenuBuilder menu) {
+ }
}
/**