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..8ba3e3fa9a6adedb17591f45d6d7301cf5291658 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,19 @@ import java.util.List; |
* ListAdapter to customize the view of items in the list. |
*/ |
class AppMenuAdapter extends BaseAdapter { |
+ private static final int VIEW_TYPE_COUNT = 3; |
+ |
private static final int VIEW_TYPE_MENUITEM = 0; |
- private static final int VIEW_TYPE_COUNT = 1; |
+ private static final int VIEW_TYPE_TITLE_BUTTON_MENUITEM = 1; |
+ private static final int VIEW_TYPE_THREE_BUTTON_MENUITEM = 2; |
Kibeom Kim (inactive)
2014/03/19 22:04:46
maybe comment what they represent?
aurimas (slooooooooow)
2014/03/19 23:31:32
Done.
|
+ 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,6 +54,13 @@ class AppMenuAdapter extends BaseAdapter { |
@Override |
public int getItemViewType(int position) { |
+ if (getItem(position).hasSubMenu()) { |
+ if (getItem(position).getSubMenu().size() == 3) { |
+ return VIEW_TYPE_THREE_BUTTON_MENUITEM; |
+ } else if (getItem(position).getSubMenu().size() == 2) { |
+ return VIEW_TYPE_TITLE_BUTTON_MENUITEM; |
+ } |
+ } |
return VIEW_TYPE_MENUITEM; |
} |
@@ -64,37 +79,85 @@ 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); |
+ final MenuItem item = getItem(position); |
+ if (getItemViewType(position) == VIEW_TYPE_MENUITEM) { |
Kibeom Kim (inactive)
2014/03/19 22:04:46
optinal: In this case, I think switch statement wi
aurimas (slooooooooow)
2014/03/19 23:31:32
Done.
|
+ // 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 (convertView == null) { |
+ holder = new ViewHolder(); |
+ 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 = (ViewHolder) 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); |
+ return convertView; |
+ } else if (getItemViewType(position) == VIEW_TYPE_THREE_BUTTON_MENUITEM) { |
Kibeom Kim (inactive)
2014/03/19 22:04:46
probably not important but just Q: can't we reuse
aurimas (slooooooooow)
2014/03/19 23:31:32
Done.
|
+ convertView = mInflater.inflate(R.layout.three_button_menu_item, null); |
+ setupImageButton((ImageButton) convertView.findViewById(R.id.button_one), |
+ item.getSubMenu().getItem(0)); |
+ setupImageButton((ImageButton) convertView.findViewById(R.id.button_two), |
+ item.getSubMenu().getItem(1)); |
+ setupImageButton((ImageButton) convertView.findViewById(R.id.button_three), |
+ item.getSubMenu().getItem(2)); |
+ convertView.setFocusable(false); |
+ convertView.setEnabled(false); |
+ return convertView; |
} else { |
Kibeom Kim (inactive)
2014/03/19 22:04:46
I'd either use switch statement or put "assert get
aurimas (slooooooooow)
2014/03/19 23:31:32
Done.
|
- holder = (ViewHolder) convertView.getTag(); |
+ convertView = mInflater.inflate(R.layout.title_button_menu_item, null); |
+ Button button = (Button) convertView.findViewById(R.id.menu_item_text); |
+ final MenuItem textItem = item.getSubMenu().getItem(0); |
+ button.setText(textItem.getTitle()); |
+ button.setEnabled(textItem.isEnabled()); |
+ button.setFocusable(textItem.isEnabled()); |
+ button.setOnClickListener(new OnClickListener() { |
+ @Override |
+ public void onClick(View v) { |
+ mAppMenu.onItemClick(textItem); |
+ } |
+ }); |
+ setupImageButton((ImageButton) convertView.findViewById(R.id.button), |
+ item.getSubMenu().getItem(1)); |
+ convertView.setFocusable(false); |
+ convertView.setEnabled(false); |
+ return convertView; |
} |
- 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; |
+ } |
+ |
+ 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 { |