| Index: chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java
|
| index ce4cd65badc3f0b64481b46a0613c53d93e3d47b..ec9fe27d01c9642f35562914325d2075d8b6ae1d 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java
|
| @@ -8,8 +8,11 @@ import android.graphics.drawable.Drawable;
|
| import android.view.LayoutInflater;
|
| import android.view.MenuItem;
|
| import android.view.View;
|
| +import android.view.View.OnClickListener;
|
| import android.view.ViewGroup;
|
| import android.widget.BaseAdapter;
|
| +import android.widget.Button;
|
| +import android.widget.ImageButton;
|
| import android.widget.ListView;
|
| import android.widget.TextView;
|
|
|
| @@ -21,14 +24,29 @@ import java.util.List;
|
| * ListAdapter to customize the view of items in the list.
|
| */
|
| class AppMenuAdapter extends BaseAdapter {
|
| - private static final int VIEW_TYPE_MENUITEM = 0;
|
| - private static final int VIEW_TYPE_COUNT = 1;
|
| -
|
| + private static final int VIEW_TYPE_COUNT = 3;
|
| +
|
| + /**
|
| + * Regular Android menu item that contains a title and an icon if icon is specified.
|
| + */
|
| + private static final int STANDARD_MENU_ITEM = 0;
|
| + /**
|
| + * Menu item that has two buttons, the first one is a title and the second one is an icon.
|
| + * It is different from the regular menu item because it contains two separate buttons.
|
| + */
|
| + private static final int TITLE_BUTTON_MENU_ITEM = 1;
|
| + /**
|
| + * Menu item that has three buttons. Every one of these buttons is displayed as an icon.
|
| + */
|
| + private static final int THREE_BUTTON_MENU_ITEM = 2;
|
| +
|
| + private final AppMenu mAppMenu;
|
| private final LayoutInflater mInflater;
|
| private final List<MenuItem> mMenuItems;
|
| private final int mNumMenuItems;
|
|
|
| - public AppMenuAdapter(List<MenuItem> menuItems, LayoutInflater inflater) {
|
| + public AppMenuAdapter(AppMenu appMenu, List<MenuItem> menuItems, LayoutInflater inflater) {
|
| + mAppMenu = appMenu;
|
| mMenuItems = menuItems;
|
| mInflater = inflater;
|
| mNumMenuItems = menuItems.size();
|
| @@ -46,7 +64,14 @@ class AppMenuAdapter extends BaseAdapter {
|
|
|
| @Override
|
| public int getItemViewType(int position) {
|
| - return VIEW_TYPE_MENUITEM;
|
| + if (getItem(position).hasSubMenu()) {
|
| + if (getItem(position).getSubMenu().size() == 3) {
|
| + return THREE_BUTTON_MENU_ITEM;
|
| + } else if (getItem(position).getSubMenu().size() == 2) {
|
| + return TITLE_BUTTON_MENU_ITEM;
|
| + }
|
| + }
|
| + return STANDARD_MENU_ITEM;
|
| }
|
|
|
| @Override
|
| @@ -64,41 +89,117 @@ class AppMenuAdapter extends BaseAdapter {
|
|
|
| @Override
|
| public View getView(int position, View convertView, ViewGroup parent) {
|
| - View rowView = convertView;
|
| - // A ViewHolder keeps references to children views to avoid unneccessary calls
|
| - // to findViewById() on each row.
|
| - ViewHolder holder = null;
|
| -
|
| - // When convertView is not null, we can reuse it directly, there is no need
|
| - // to reinflate it.
|
| - if (rowView == null) {
|
| - holder = new ViewHolder();
|
| - rowView = mInflater.inflate(R.layout.menu_item, null);
|
| - holder.text = (TextView) rowView.findViewById(R.id.menu_item_text);
|
| - holder.image = (AppMenuItemIcon) rowView.findViewById(R.id.menu_item_icon);
|
| - rowView.setTag(holder);
|
| - } else {
|
| - holder = (ViewHolder) convertView.getTag();
|
| + final MenuItem item = getItem(position);
|
| + switch (getItemViewType(position)) {
|
| + case STANDARD_MENU_ITEM: {
|
| + StandardMenuItemViewHolder holder = null;
|
| + if (convertView == null) {
|
| + holder = new StandardMenuItemViewHolder();
|
| + convertView = mInflater.inflate(R.layout.menu_item, null);
|
| + holder.text = (TextView) convertView.findViewById(R.id.menu_item_text);
|
| + holder.image = (AppMenuItemIcon) convertView.findViewById(R.id.menu_item_icon);
|
| + convertView.setTag(holder);
|
| + } else {
|
| + holder = (StandardMenuItemViewHolder) convertView.getTag();
|
| + }
|
| +
|
| + convertView.setOnClickListener(new OnClickListener() {
|
| + @Override
|
| + public void onClick(View v) {
|
| + mAppMenu.onItemClick(item);
|
| + }
|
| + });
|
| + // Set up the icon.
|
| + Drawable icon = item.getIcon();
|
| + holder.image.setImageDrawable(icon);
|
| + holder.image.setVisibility(icon == null ? View.GONE : View.VISIBLE);
|
| + holder.image.setChecked(item.isChecked());
|
| +
|
| + holder.text.setText(item.getTitle());
|
| + boolean isEnabled = item.isEnabled();
|
| + // Set the text color (using a color state list).
|
| + holder.text.setEnabled(isEnabled);
|
| + // This will ensure that the item is not highlighted when selected.
|
| + convertView.setEnabled(isEnabled);
|
| + break;
|
| + }
|
| + case THREE_BUTTON_MENU_ITEM: {
|
| + ThreeButtonMenuItemViewHolder holder = null;
|
| + if (convertView == null) {
|
| + holder = new ThreeButtonMenuItemViewHolder();
|
| + convertView = mInflater.inflate(R.layout.three_button_menu_item, null);
|
| + holder.buttonOne = (ImageButton) convertView.findViewById(R.id.button_one);
|
| + holder.buttonTwo = (ImageButton) convertView.findViewById(R.id.button_two);
|
| + holder.buttonThree = (ImageButton) convertView.findViewById(R.id.button_three);
|
| + convertView.setTag(holder);
|
| + } else {
|
| + holder = (ThreeButtonMenuItemViewHolder) convertView.getTag();
|
| + }
|
| + setupImageButton(holder.buttonOne, item.getSubMenu().getItem(0));
|
| + setupImageButton(holder.buttonTwo, item.getSubMenu().getItem(1));
|
| + setupImageButton(holder.buttonThree, item.getSubMenu().getItem(2));
|
| + convertView.setFocusable(false);
|
| + convertView.setEnabled(false);
|
| + break;
|
| + }
|
| + case TITLE_BUTTON_MENU_ITEM: {
|
| + TitleButtonMenuItemViewHolder holder = null;
|
| + if (convertView == null) {
|
| + holder = new TitleButtonMenuItemViewHolder();
|
| + convertView = mInflater.inflate(R.layout.title_button_menu_item, null);
|
| + holder.title = (Button) convertView.findViewById(R.id.title);
|
| + holder.button = (ImageButton) convertView.findViewById(R.id.button);
|
| + convertView.setTag(holder);
|
| + } else {
|
| + holder = (TitleButtonMenuItemViewHolder) convertView.getTag();
|
| + }
|
| + final MenuItem titleItem = item.getSubMenu().getItem(0);
|
| + holder.title.setText(titleItem.getTitle());
|
| + holder.title.setEnabled(titleItem.isEnabled());
|
| + holder.title.setFocusable(titleItem.isEnabled());
|
| + holder.title.setOnClickListener(new OnClickListener() {
|
| + @Override
|
| + public void onClick(View v) {
|
| + mAppMenu.onItemClick(titleItem);
|
| + }
|
| + });
|
| + setupImageButton(holder.button, item.getSubMenu().getItem(1));
|
| + convertView.setFocusable(false);
|
| + convertView.setEnabled(false);
|
| + break;
|
| + }
|
| + default:
|
| + assert false : "Unexpected MenuItem type";
|
| }
|
| - MenuItem item = getItem(position);
|
| -
|
| - // Set up the icon.
|
| - Drawable icon = item.getIcon();
|
| - holder.image.setImageDrawable(icon);
|
| - holder.image.setVisibility(icon == null ? View.GONE : View.VISIBLE);
|
| - holder.image.setChecked(item.isChecked());
|
| -
|
| - holder.text.setText(item.getTitle());
|
| - boolean isEnabled = item.isEnabled();
|
| - // Set the text color (using a color state list).
|
| - holder.text.setEnabled(isEnabled);
|
| - // This will ensure that the item is not highlighted when selected.
|
| - rowView.setEnabled(isEnabled);
|
| - return rowView;
|
| + return convertView;
|
| + }
|
| +
|
| + private void setupImageButton(ImageButton button, final MenuItem item) {
|
| + button.setImageDrawable(item.getIcon());
|
| + button.setContentDescription(item.getTitle());
|
| + button.setEnabled(item.isEnabled());
|
| + button.setFocusable(item.isEnabled());
|
| + button.setOnClickListener(new OnClickListener() {
|
| + @Override
|
| + public void onClick(View v) {
|
| + mAppMenu.onItemClick(item);
|
| + }
|
| + });
|
| }
|
|
|
| - static class ViewHolder {
|
| + static class StandardMenuItemViewHolder {
|
| public TextView text;
|
| public AppMenuItemIcon image;
|
| }
|
| +
|
| + static class ThreeButtonMenuItemViewHolder {
|
| + public ImageButton buttonOne;
|
| + public ImageButton buttonTwo;
|
| + public ImageButton buttonThree;
|
| + }
|
| +
|
| + static class TitleButtonMenuItemViewHolder {
|
| + public Button title;
|
| + public ImageButton button;
|
| + }
|
| }
|
|
|