summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Adam Powell <adamp@google.com> 2010-07-20 12:15:08 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2010-07-20 12:15:08 -0700
commit7bb66f3245e51ec92926a15e6b641a9ccbb1097c (patch)
tree9319fe277e39b788e6547da223f98d540eddbbff
parentf91f2971a8a03026664666c332abe73f70c5b437 (diff)
parent2c9c9fe806e51f29276e66b8ba40cb4b7a80c3f4 (diff)
Merge "Action bar context mode support for overflow, submenus"
-rw-r--r--core/java/com/android/internal/app/ActionBarImpl.java51
-rw-r--r--core/java/com/android/internal/widget/ActionBarContextView.java48
2 files changed, 45 insertions, 54 deletions
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java
index f37021b7ede2..63dbdb4fdbde 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 @@ public class ActionBarImpl extends ActionBar {
@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 @@ public class ActionBarImpl extends ActionBar {
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 @@ public class ActionBarImpl extends ActionBar {
/**
* @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 @@ public class ActionBarImpl extends ActionBar {
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) {
+ }
}
/**
diff --git a/core/java/com/android/internal/widget/ActionBarContextView.java b/core/java/com/android/internal/widget/ActionBarContextView.java
index cd9832f0659f..3e49cf9a594d 100644
--- a/core/java/com/android/internal/widget/ActionBarContextView.java
+++ b/core/java/com/android/internal/widget/ActionBarContextView.java
@@ -16,7 +16,8 @@
package com.android.internal.widget;
import com.android.internal.R;
-import com.android.internal.app.ActionBarImpl;
+import com.android.internal.view.menu.ActionMenuView;
+import com.android.internal.view.menu.MenuBuilder;
import android.app.ActionBar;
import android.content.Context;
@@ -25,11 +26,8 @@ import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.Menu;
-import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.view.View.MeasureSpec;
-import android.view.ViewGroup.LayoutParams;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -43,6 +41,7 @@ public class ActionBarContextView extends ViewGroup {
private int mItemPadding;
private int mItemMargin;
+ private int mActionSpacing;
private int mContentHeight;
private CharSequence mTitle;
@@ -54,6 +53,7 @@ public class ActionBarContextView extends ViewGroup {
private TextView mTitleView;
private TextView mSubtitleView;
private Drawable mCloseDrawable;
+ private View mMenuView;
public ActionBarContextView(Context context) {
this(context, null, 0);
@@ -137,8 +137,6 @@ public class ActionBarContextView extends ViewGroup {
}
public void initForMode(final ActionBar.ContextMode mode) {
- final ActionBarImpl.ContextMode implMode = (ActionBarImpl.ContextMode) mode;
-
if (mCloseButton == null) {
mCloseButton = new ImageButton(getContext());
mCloseButton.setImageDrawable(mCloseDrawable);
@@ -151,34 +149,15 @@ public class ActionBarContextView extends ViewGroup {
}
addView(mCloseButton);
- final Context context = getContext();
- final Menu menu = mode.getMenu();
- final int itemCount = menu.size();
- for (int i = 0; i < itemCount; i++) {
- final MenuItem item = menu.getItem(i);
- final ImageButton button = new ImageButton(context, null,
- com.android.internal.R.attr.actionButtonStyle);
- button.setClickable(true);
- button.setFocusable(true);
- button.setImageDrawable(item.getIcon());
- button.setId(item.getItemId());
- button.setVisibility(item.isVisible() ? VISIBLE : GONE);
- button.setEnabled(item.isEnabled());
-
- button.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- implMode.dispatchOnContextItemClicked(item);
- }
- });
-
- addView(button);
- }
- requestLayout();
+ final MenuBuilder menu = (MenuBuilder) mode.getMenu();
+ mMenuView = menu.getMenuView(MenuBuilder.TYPE_ACTION_BUTTON, this);
+ addView(mMenuView);
}
public void closeMode() {
removeAllViews();
mCustomView = null;
+ mMenuView = null;
}
@Override
@@ -266,15 +245,10 @@ public class ActionBarContextView extends ViewGroup {
}
x = r - l - getPaddingRight();
-
- final int childCount = getChildCount();
- for (int i = 0; i < childCount; i++) {
- final View child = getChildAt(i);
- if (child == mCloseButton || child == mTitleLayout || child == mCustomView) {
- continue;
- }
- x -= positionChildInverse(child, x, y, contentHeight) + itemMargin;
+ if (mMenuView != null) {
+ x -= positionChildInverse(mMenuView, x + mActionSpacing, y, contentHeight)
+ - mActionSpacing;
}
}