diff options
| author | 2010-07-20 12:15:08 -0700 | |
|---|---|---|
| committer | 2010-07-20 12:15:08 -0700 | |
| commit | 7bb66f3245e51ec92926a15e6b641a9ccbb1097c (patch) | |
| tree | 9319fe277e39b788e6547da223f98d540eddbbff | |
| parent | f91f2971a8a03026664666c332abe73f70c5b437 (diff) | |
| parent | 2c9c9fe806e51f29276e66b8ba40cb4b7a80c3f4 (diff) | |
Merge "Action bar context mode support for overflow, submenus"
| -rw-r--r-- | core/java/com/android/internal/app/ActionBarImpl.java | 51 | ||||
| -rw-r--r-- | core/java/com/android/internal/widget/ActionBarContextView.java | 48 |
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; } } |