summaryrefslogtreecommitdiffstats
path: root/core/java/android/widget/ActionMenuView.java
diff options
context:
space:
mode:
authorAdam Powell <adamp@google.com>2014-03-17 19:10:43 -0700
committerAdam Powell <adamp@google.com>2014-04-04 10:08:17 -0700
commite43340c80dc66c45edc793ecd0343774aa34d108 (patch)
tree6a3f96a7b59d7fdd5efd45bedb666371dfaef249 /core/java/android/widget/ActionMenuView.java
parentfc35dfd513677ca01e8d4950ff9faa4ed19e65fe (diff)
downloadframeworks_base-e43340c80dc66c45edc793ecd0343774aa34d108.zip
frameworks_base-e43340c80dc66c45edc793ecd0343774aa34d108.tar.gz
frameworks_base-e43340c80dc66c45edc793ecd0343774aa34d108.tar.bz2
android.widget.Toolbar
Add the new Toolbar widget for use in app layouts. ActionBar can now be used as a point of control for either a traditional window decor action bar or for a Toolbar that appears inline in an Activity's layout. ToolbarActionBar is currently WIP. Change-Id: I0da093e5645840f4fd032aa34efa0ae5f1825ff2
Diffstat (limited to 'core/java/android/widget/ActionMenuView.java')
-rw-r--r--core/java/android/widget/ActionMenuView.java54
1 files changed, 51 insertions, 3 deletions
diff --git a/core/java/android/widget/ActionMenuView.java b/core/java/android/widget/ActionMenuView.java
index 32c7086..3975edf 100644
--- a/core/java/android/widget/ActionMenuView.java
+++ b/core/java/android/widget/ActionMenuView.java
@@ -20,6 +20,7 @@ import android.content.res.Configuration;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.Menu;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewDebug;
import android.view.ViewGroup;
@@ -27,6 +28,7 @@ import android.view.accessibility.AccessibilityEvent;
import com.android.internal.view.menu.ActionMenuItemView;
import com.android.internal.view.menu.MenuBuilder;
import com.android.internal.view.menu.MenuItemImpl;
+import com.android.internal.view.menu.MenuPresenter;
import com.android.internal.view.menu.MenuView;
/**
@@ -50,6 +52,8 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
private int mMinCellSize;
private int mGeneratedItemPadding;
+ private OnMenuItemClickListener mOnMenuItemClickListener;
+
public ActionMenuView(Context context) {
this(context, null);
}
@@ -78,6 +82,10 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
}
}
+ public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {
+ mOnMenuItemClickListener = listener;
+ }
+
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// If we've been given an exact size to match, apply special formatting during layout.
@@ -96,11 +104,11 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
mMenu.onItemsChanged(true);
}
- if (mFormatItems) {
+ final int childCount = getChildCount();
+ if (mFormatItems && childCount > 0) {
onMeasureExactFormat(widthMeasureSpec, heightMeasureSpec);
} else {
// Previous measurement at exact format may have set margins - reset them.
- final int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = getChildAt(i);
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
@@ -559,9 +567,11 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
if (mMenu == null) {
final Context context = getContext();
mMenu = new MenuBuilder(context);
+ mMenu.setCallback(new MenuBuilderCallback());
mPresenter = new ActionMenuPresenter(context);
- mPresenter.initForMenu(context, mMenu);
mPresenter.setMenuView(this);
+ mPresenter.setCallback(new ActionMenuPresenterCallback());
+ mMenu.addMenuPresenter(mPresenter);
}
return mMenu;
@@ -591,6 +601,44 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
return false;
}
+ /**
+ * Interface responsible for receiving menu item click events if the items themselves
+ * do not have individual item click listeners.
+ */
+ public interface OnMenuItemClickListener {
+ /**
+ * This method will be invoked when a menu item is clicked if the item itself did
+ * not already handle the event.
+ *
+ * @param item {@link MenuItem} that was clicked
+ * @return <code>true</code> if the event was handled, <code>false</code> otherwise.
+ */
+ public boolean onMenuItemClick(MenuItem item);
+ }
+
+ private class MenuBuilderCallback implements MenuBuilder.Callback {
+ @Override
+ public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {
+ return mOnMenuItemClickListener != null &&
+ mOnMenuItemClickListener.onMenuItemClick(item);
+ }
+
+ @Override
+ public void onMenuModeChange(MenuBuilder menu) {
+ }
+ }
+
+ private class ActionMenuPresenterCallback implements ActionMenuPresenter.Callback {
+ @Override
+ public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
+ }
+
+ @Override
+ public boolean onOpenSubMenu(MenuBuilder subMenu) {
+ return false;
+ }
+ }
+
/** @hide */
public interface ActionMenuChildView {
public boolean needsDividerBefore();